{
  "id": "546c30aafedf95ecf665533101aad312",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.15",
  "solcLongVersion": "0.8.15+commit.e14f2714",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/ERC721K.sol": {
        "content": "//SPDX-License-Identifier: MIT\npragma solidity 0.8.15;\n\nimport { ERC721 } from \"./helpers/ERC721.sol\";\nimport { OwnedRoles } from \"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\";\nimport { ERC721Storage } from \"./ERC721Storage.sol\";\n\n/**\n * @title ERC721K\n * @author Kames Geraghty\n */\nabstract contract ERC721K is ERC721, OwnedRoles {\n  /// @notice ID counter for ERC721 tokens\n  uint256 internal _idCounter;\n\n  /// @notice ENSReverseRecords instance\n  address internal _erc721Storage;\n\n  event ERC721StorageUpdated(address erc721Storage);\n\n  /**\n   * @notice ERC721K Construction\n   * @param name_ string - Name of ERC721 token\n   * @param symbol_ string - Symbol of ERC721 token\n   * @param _erc721Storage_ address - Metadata instance\n   */\n  constructor(\n    string memory name_,\n    string memory symbol_,\n    address _erc721Storage_\n  ) ERC721(name_, symbol_) {\n    _erc721Storage = _erc721Storage_;\n    _initializeOwner(msg.sender);\n  }\n\n  /* ===================================================================================== */\n  /* EIP Functions                                                                     */\n  /* ===================================================================================== */\n  function supportsInterface(bytes4 interfaceId)\n    public\n    view\n    virtual\n    override(ERC721)\n    returns (bool)\n  {\n    return super.supportsInterface(interfaceId);\n  }\n\n  /* ===================================================================================== */\n  /* Virtual Functions                                                                     */\n  /* ===================================================================================== */\n  function _tokenData(uint256 tokenId)\n    internal\n    view\n    virtual\n    returns (bytes memory imageBytes, bytes memory traitsBytes);\n\n  /* ===================================================================================== */\n  /* External Functions                                                                    */\n  /* ===================================================================================== */\n\n  function contractURI() external view returns (string memory) {\n    return ERC721Storage(_erc721Storage).constructContractURI();\n  }\n\n  function totalSupply() external view returns (uint256) {\n    return _idCounter;\n  }\n\n  function getERC721Storage() external view returns (address) {\n    return _erc721Storage;\n  }\n\n  function tokenURI(uint256 tokenId) public view override returns (string memory) {\n    (bytes memory imageBytes, bytes memory traitsBytes) = _tokenData(tokenId);\n    return ERC721Storage(_erc721Storage).constructTokenURI(tokenId, imageBytes, traitsBytes);\n  }\n\n  /* ====================================== */\n  /* Writes\n  /* ====================================== */\n\n  function setStorage(address erc721Storage) external onlyOwner {\n    _erc721Storage = erc721Storage;\n    emit ERC721StorageUpdated(erc721Storage);\n  }\n}\n"
      },
      "contracts/helpers/ERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n/// @notice Modern, minimalist, and gas-optimized ERC721 implementation.\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\nabstract contract ERC721 {\n    /// -----------------------------------------------------------------------\n    /// Events\n    /// -----------------------------------------------------------------------\n\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\n\n    event Approval(address indexed owner, address indexed spender, uint256 indexed id);\n\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n    /// -----------------------------------------------------------------------\n    /// Custom Errors\n    /// -----------------------------------------------------------------------\n\n    error NotMinted();\n\n    error ZeroAddress();\n\n    error NotAuthorized();\n\n    error WrongFrom();\n\n    error InvalidRecipient();\n\n    error UnsafeRecipient();\n\n    error AlreadyMinted();\n\n    /// -----------------------------------------------------------------------\n    /// Metadata Storage/Logic\n    /// -----------------------------------------------------------------------\n\n    string public name;\n\n    string public symbol;\n\n    function tokenURI(uint256 id) public view virtual returns (string memory);\n\n    /// -----------------------------------------------------------------------\n    /// ERC721 Balance/Owner Storage\n    /// -----------------------------------------------------------------------\n\n    mapping(uint256 => address) internal _ownerOf;\n\n    mapping(address => uint256) internal _balanceOf;\n\n    function ownerOf(uint256 id) public view virtual returns (address owner) {\n        if ((owner = _ownerOf[id]) == address(0)) revert NotMinted();\n    }\n\n    function balanceOf(address owner) public view virtual returns (uint256) {\n        if (owner == address(0)) revert ZeroAddress();\n        return _balanceOf[owner];\n    }\n\n    /// -----------------------------------------------------------------------\n    /// ERC721 Approval Storage\n    /// -----------------------------------------------------------------------\n\n    mapping(uint256 => address) public getApproved;\n\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\n\n    /// -----------------------------------------------------------------------\n    /// Constructor\n    /// -----------------------------------------------------------------------\n\n    constructor(string memory _name, string memory _symbol) {\n        name = _name;\n        symbol = _symbol;\n    }\n\n    /// -----------------------------------------------------------------------\n    /// ERC721 Logic\n    /// -----------------------------------------------------------------------\n\n    function approve(address spender, uint256 id) public virtual {\n        address owner = _ownerOf[id];\n\n        if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) revert NotAuthorized();\n\n        getApproved[id] = spender;\n\n        emit Approval(owner, spender, id);\n    }\n\n    function setApprovalForAll(address operator, bool approved) public virtual {\n        isApprovedForAll[msg.sender][operator] = approved;\n\n        emit ApprovalForAll(msg.sender, operator, approved);\n    }\n\n    function transferFrom(address from, address to, uint256 id) public virtual {\n        if (from != _ownerOf[id]) revert WrongFrom();\n\n        if (to == address(0)) revert InvalidRecipient();\n\n        if (msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[id])\n            revert NotAuthorized();\n\n        // Underflow of the sender's balance is impossible because we check for\n        // ownership above and the recipient's balance can't realistically overflow.\n        unchecked {\n            _balanceOf[from]--;\n\n            _balanceOf[to]++;\n        }\n\n        _ownerOf[id] = to;\n\n        delete getApproved[id];\n\n        emit Transfer(from, to, id);\n    }\n\n    function safeTransferFrom(address from, address to, uint256 id) public virtual {\n        transferFrom(from, to, id);\n\n        if (to.code.length != 0) {\n            if (\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, \"\") !=\n                ERC721TokenReceiver.onERC721Received.selector\n            ) revert UnsafeRecipient();\n        }\n    }\n\n    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data) public virtual {\n        transferFrom(from, to, id);\n\n        if (to.code.length != 0) {\n            if (\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) !=\n                ERC721TokenReceiver.onERC721Received.selector\n            ) revert UnsafeRecipient();\n        }\n    }\n\n    /// -----------------------------------------------------------------------\n    /// ERC165 Logic\n    /// -----------------------------------------------------------------------\n\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n        return\n            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165\n            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721\n            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata\n    }\n\n    /// -----------------------------------------------------------------------\n    /// Internal Mint/Burn Logic\n    /// -----------------------------------------------------------------------\n\n    function _mint(address to, uint256 id) internal virtual {\n        if (to == address(0)) revert InvalidRecipient();\n\n        if (_ownerOf[id] != address(0)) revert AlreadyMinted();\n\n        // Counter overflow is incredibly unrealistic.\n        unchecked {\n            _balanceOf[to]++;\n        }\n\n        _ownerOf[id] = to;\n\n        emit Transfer(address(0), to, id);\n    }\n\n    function _burn(uint256 id) internal virtual {\n        address owner = _ownerOf[id];\n\n        if (owner == address(0)) revert NotMinted();\n\n        // Ownership check above ensures no underflow.\n        unchecked {\n            _balanceOf[owner]--;\n        }\n\n        delete _ownerOf[id];\n\n        delete getApproved[id];\n\n        emit Transfer(owner, address(0), id);\n    }\n\n    /// -----------------------------------------------------------------------\n    /// Internal Safe Mint Logic\n    /// -----------------------------------------------------------------------\n\n    function _safeMint(address to, uint256 id) internal virtual {\n        _mint(to, id);\n\n        if (to.code.length != 0) {\n            if (\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, \"\") !=\n                ERC721TokenReceiver.onERC721Received.selector\n            ) revert UnsafeRecipient();\n        }\n    }\n\n    function _safeMint(address to, uint256 id, bytes memory data) internal virtual {\n        _mint(to, id);\n\n        if (to.code.length != 0) {\n            if (\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) !=\n                ERC721TokenReceiver.onERC721Received.selector\n            ) revert UnsafeRecipient();\n        }\n    }\n}\n\n/// @notice A generic interface for a contract which properly accepts ERC721 tokens.\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\nabstract contract ERC721TokenReceiver {\n    function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {\n        return ERC721TokenReceiver.onERC721Received.selector;\n    }\n}\n"
      },
      "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n/// @notice Simple single owner and multiroles authorization mixin.\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\n/// @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\n/// for compatibility, the nomenclature for the 2-step ownership handover and roles\n/// may be unique to this codebase.\nabstract contract OwnedRoles {\n    /// -----------------------------------------------------------------------\n    /// Events\n    /// -----------------------------------------------------------------------\n\n    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.\n    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be\n    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\n    /// despite it not being as lightweight as a single argument event.\n    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\n\n    /// @dev An ownership handover to `pendingOwner` has been requested.\n    event OwnershipHandoverRequested(address indexed pendingOwner);\n\n    /// @dev The ownership handover to `pendingOwner` has been canceled.\n    event OwnershipHandoverCanceled(address indexed pendingOwner);\n\n    /// @dev The `user`'s roles is updated to `roles`.\n    /// Each bit of `roles` represents whether the role is set.\n    event RolesUpdated(address indexed user, uint256 indexed roles);\n\n    /// @dev `keccak256(bytes(\"OwnershipTransferred(address,address)\"))`.\n    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =\n        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;\n\n    /// @dev `keccak256(bytes(\"OwnershipHandoverRequested(address)\"))`.\n    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =\n        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;\n\n    /// @dev `keccak256(bytes(\"OwnershipHandoverCanceled(address)\"))`.\n    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =\n        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;\n\n    /// @dev `keccak256(bytes(\"RolesUpdated(address,uint256)\"))`.\n    uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =\n        0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26;\n\n    /// -----------------------------------------------------------------------\n    /// Custom Errors\n    /// -----------------------------------------------------------------------\n\n    /// @dev The caller is not authorized to call the function.\n    error Unauthorized();\n\n    /// @dev The `newOwner` cannot be the zero address.\n    error NewOwnerIsZeroAddress();\n\n    /// @dev The `pendingOwner` does not have a valid handover request.\n    error NoHandoverRequest();\n\n    /// @dev `bytes4(keccak256(bytes(\"Unauthorized()\")))`.\n    uint256 private constant _UNAUTHORIZED_ERROR_SELECTOR = 0x82b42900;\n\n    /// @dev `bytes4(keccak256(bytes(\"NewOwnerIsZeroAddress()\")))`.\n    uint256 private constant _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR = 0x7448fbae;\n\n    /// @dev `bytes4(keccak256(bytes(\"NoHandoverRequest()\")))`.\n    uint256 private constant _NO_HANDOVER_REQUEST_ERROR_SELECTOR = 0x6f5e8818;\n\n    /// -----------------------------------------------------------------------\n    /// Storage\n    /// -----------------------------------------------------------------------\n\n    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\n    /// It is intentionally choosen to be a high value\n    /// to avoid collision with lower slots.\n    /// The choice of manual storage layout is to enable compatibility\n    /// with both regular and upgradeable contracts.\n    ///\n    /// The role slot of `user` is given by:\n    /// ```\n    ///     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n    ///     let roleSlot := keccak256(0x00, 0x20)\n    /// ```\n    /// This automatically ignores the upper bits of the `user` in case\n    /// they are not clean, as well as keep the `keccak256` under 32-bytes.\n    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;\n\n    /// The ownership handover slot of `newOwner` is given by:\n    /// ```\n    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\n    ///     let handoverSlot := keccak256(0x00, 0x20)\n    /// ```\n    /// It stores the expiry timestamp of the two-step ownership handover.\n    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;\n\n    /// -----------------------------------------------------------------------\n    /// Internal Functions\n    /// -----------------------------------------------------------------------\n\n    /// @dev Initializes the owner directly without authorization guard.\n    /// This function must be called upon initialization,\n    /// regardless of whether the contract is upgradeable or not.\n    /// This is to enable generalization to both regular and upgradeable contracts,\n    /// and to save gas in case the initial owner is not the caller.\n    /// For performance reasons, this function will not check if there\n    /// is an existing owner.\n    function _initializeOwner(address newOwner) internal virtual {\n        assembly {\n            // Clean the upper 96 bits.\n            newOwner := shr(96, shl(96, newOwner))\n            // Store the new value.\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\n            // Emit the {OwnershipTransferred} event.\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)\n        }\n    }\n\n    /// @dev Sets the owner directly without authorization guard.\n    function _setOwner(address newOwner) internal virtual {\n        assembly {\n            let ownerSlot := not(_OWNER_SLOT_NOT)\n            // Clean the upper 96 bits.\n            newOwner := shr(96, shl(96, newOwner))\n            // Emit the {OwnershipTransferred} event.\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)\n            // Store the new value.\n            sstore(ownerSlot, newOwner)\n        }\n    }\n\n    /// @dev Grants the roles directly without authorization guard.\n    /// Each bit of `roles` represents the role to turn on.\n    function _grantRoles(address user, uint256 roles) internal virtual {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n            let roleSlot := keccak256(0x00, 0x20)\n            // Load the current value and `or` it with `roles`.\n            let newRoles := or(sload(roleSlot), roles)\n            // Store the new value.\n            sstore(roleSlot, newRoles)\n            // Emit the {RolesUpdated} event.\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\n        }\n    }\n\n    /// @dev Removes the roles directly without authorization guard.\n    /// Each bit of `roles` represents the role to turn off.\n    function _removeRoles(address user, uint256 roles) internal virtual {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n            let roleSlot := keccak256(0x00, 0x20)\n            // Load the current value.\n            let currentRoles := sload(roleSlot)\n            // Use `and` to compute the intersection of `currentRoles` and `roles`,\n            // `xor` it with `currentRoles` to flip the bits in the intersection.\n            let newRoles := xor(currentRoles, and(currentRoles, roles))\n            // Then, store the new value.\n            sstore(roleSlot, newRoles)\n            // Emit the {RolesUpdated} event.\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\n        }\n    }\n\n    /// -----------------------------------------------------------------------\n    /// Public Update Functions\n    /// -----------------------------------------------------------------------\n\n    /// @dev Allows the owner to transfer the ownership to `newOwner`.\n    function transferOwnership(address newOwner) public payable virtual onlyOwner {\n        assembly {\n            // Clean the upper 96 bits.\n            newOwner := shr(96, shl(96, newOwner))\n            // Reverts if the `newOwner` is the zero address.\n            if iszero(newOwner) {\n                mstore(0x00, _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR)\n                revert(0x1c, 0x04)\n            }\n            // Emit the {OwnershipTransferred} event.\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), newOwner)\n            // Store the new value.\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\n        }\n    }\n\n    /// @dev Allows the owner to renounce their ownership.\n    function renounceOwnership() public payable virtual onlyOwner {\n        assembly {\n            // Emit the {OwnershipTransferred} event.\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), 0)\n            // Store the new value.\n            sstore(not(_OWNER_SLOT_NOT), 0)\n        }\n    }\n\n    /// @dev Request a two-step ownership handover to the caller.\n    /// The request will be automatically expire in 48 hours (172800 seconds) by default.\n    function requestOwnershipHandover() public payable virtual {\n        unchecked {\n            uint256 expires = block.timestamp + ownershipHandoverValidFor();\n            assembly {\n                // Compute and set the handover slot to 1.\n                mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\n                sstore(keccak256(0x00, 0x20), expires)\n                // Emit the {OwnershipHandoverRequested} event.\n                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())\n            }\n        }\n    }\n\n    /// @dev Cancels the two-step ownership handover to the caller, if any.\n    function cancelOwnershipHandover() public payable virtual {\n        assembly {\n            // Compute and set the handover slot to 0.\n            mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\n            sstore(keccak256(0x00, 0x20), 0)\n            // Emit the {OwnershipHandoverCanceled} event.\n            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())\n        }\n    }\n\n    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\n    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.\n    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {\n        assembly {\n            // Clean the upper 96 bits.\n            pendingOwner := shr(96, shl(96, pendingOwner))\n            // Compute and set the handover slot to 0.\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\n            let handoverSlot := keccak256(0x00, 0x20)\n            // If the handover does not exist, or has expired.\n            if gt(timestamp(), sload(handoverSlot)) {\n                mstore(0x00, _NO_HANDOVER_REQUEST_ERROR_SELECTOR)\n                revert(0x1c, 0x04)\n            }\n            // Set the handover slot to 0.\n            sstore(handoverSlot, 0)\n            // Emit the {OwnershipTransferred} event.\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), pendingOwner)\n            // Store the new value.\n            sstore(not(_OWNER_SLOT_NOT), pendingOwner)\n        }\n    }\n\n    /// @dev Allows the owner to grant `user` `roles`.\n    /// If the `user` already has a role, then it will be an no-op for the role.\n    function grantRoles(address user, uint256 roles) public payable virtual onlyOwner {\n        _grantRoles(user, roles);\n    }\n\n    /// @dev Allows the owner to remove `user` `roles`.\n    /// If the `user` does not have a role, then it will be an no-op for the role.\n    function revokeRoles(address user, uint256 roles) public payable virtual onlyOwner {\n        _removeRoles(user, roles);\n    }\n\n    /// @dev Allow the caller to remove their own roles.\n    /// If the caller does not have a role, then it will be an no-op for the role.\n    function renounceRoles(uint256 roles) public payable virtual {\n        _removeRoles(msg.sender, roles);\n    }\n\n    /// -----------------------------------------------------------------------\n    /// Public Read Functions\n    /// -----------------------------------------------------------------------\n\n    /// @dev Returns the owner of the contract.\n    function owner() public view virtual returns (address result) {\n        assembly {\n            result := sload(not(_OWNER_SLOT_NOT))\n        }\n    }\n\n    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\n    function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) {\n        assembly {\n            // Compute the handover slot.\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\n            // Load the handover slot.\n            result := sload(keccak256(0x00, 0x20))\n        }\n    }\n\n    /// @dev Returns how long a two-step ownership handover is valid for in seconds.\n    function ownershipHandoverValidFor() public view virtual returns (uint64) {\n        return 48 * 3600;\n    }\n\n    /// @dev Returns whether `user` has any of `roles`.\n    function hasAnyRole(address user, uint256 roles) public view virtual returns (bool result) {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n            // Load the stored value, and set the result to whether the\n            // `and` intersection of the value and `roles` is not zero.\n            result := iszero(iszero(and(sload(keccak256(0x00, 0x20)), roles)))\n        }\n    }\n\n    /// @dev Returns whether `user` has all of `roles`.\n    function hasAllRoles(address user, uint256 roles) public view virtual returns (bool result) {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n            // Whether the stored value is contains all the set bits in `roles`.\n            result := eq(and(sload(keccak256(0x00, 0x20)), roles), roles)\n        }\n    }\n\n    /// @dev Returns the roles of `user`.\n    function rolesOf(address user) public view virtual returns (uint256 roles) {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n            // Load the stored value.\n            roles := sload(keccak256(0x00, 0x20))\n        }\n    }\n\n    /// @dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\n    /// Not recommended to be called on-chain.\n    function rolesFromOrdinals(uint8[] memory ordinals) public pure returns (uint256 roles) {\n        assembly {\n            // Skip the length slot.\n            let o := add(ordinals, 0x20)\n            // `shl` 5 is equivalent to multiplying by 0x20.\n            let end := add(o, shl(5, mload(ordinals)))\n            // prettier-ignore\n            for {} iszero(eq(o, end)) { o := add(o, 0x20) } {\n                roles := or(roles, shl(and(mload(o), 0xff), 1))\n            }\n        }\n    }\n\n    /// @dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\n    /// Not recommended to be called on-chain.\n    function ordinalsFromRoles(uint256 roles) public pure returns (uint8[] memory ordinals) {\n        assembly {\n            // Grab the pointer to the free memory.\n            let ptr := add(mload(0x40), 0x20)\n            // The absence of lookup tables, De Bruijn, etc., here is intentional for\n            // smaller bytecode, as this function is not meant to be called on-chain.\n            // prettier-ignore\n            for { let i := 0 } 1 { i := add(i, 1) } {\n                mstore(ptr, i)\n                // `shr` 5 is equivalent to multiplying by 0x20.\n                // Push back into the ordinals array if the bit is set.\n                ptr := add(ptr, shl(5, and(roles, 1)))\n                roles := shr(1, roles)\n                // prettier-ignore\n                if iszero(roles) { break }\n            }\n            // Set `ordinals` to the start of the free memory.\n            ordinals := mload(0x40)\n            // Allocate the memory.\n            mstore(0x40, ptr)\n            // Store the length of `ordinals`.\n            mstore(ordinals, shr(5, sub(ptr, add(ordinals, 0x20))))\n        }\n    }\n\n    /// -----------------------------------------------------------------------\n    /// Modifiers\n    /// -----------------------------------------------------------------------\n\n    /// @dev Marks a function as only callable by the owner.\n    modifier onlyOwner() virtual {\n        assembly {\n            // If the caller is not the stored owner, revert.\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\n                revert(0x1c, 0x04)\n            }\n        }\n        _;\n    }\n\n    /// @dev Marks a function as only callable by an account with `roles`.\n    modifier onlyRoles(uint256 roles) virtual {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\n            // Load the stored value, and if the `and` intersection\n            // of the value and `roles` is zero, revert.\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\n                revert(0x1c, 0x04)\n            }\n        }\n        _;\n    }\n\n    /// @dev Marks a function as only callable by the owner or by an account\n    /// with `roles`. Checks for ownership first, then lazily checks for roles.\n    modifier onlyOwnerOrRoles(uint256 roles) virtual {\n        assembly {\n            // If the caller is not the stored owner.\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\n                // Compute the role slot.\n                mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\n                // Load the stored value, and if the `and` intersection\n                // of the value and `roles` is zero, revert.\n                if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\n                    revert(0x1c, 0x04)\n                }\n            }\n        }\n        _;\n    }\n\n    /// @dev Marks a function as only callable by an account with `roles`\n    /// or the owner. Checks for roles first, then lazily checks for ownership.\n    modifier onlyRolesOrOwner(uint256 roles) virtual {\n        assembly {\n            // Compute the role slot.\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\n            // Load the stored value, and if the `and` intersection\n            // of the value and `roles` is zero, revert.\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\n                // If the caller is not the stored owner.\n                if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\n                    revert(0x1c, 0x04)\n                }\n            }\n        }\n        _;\n    }\n\n    /// -----------------------------------------------------------------------\n    /// Role Constants\n    /// -----------------------------------------------------------------------\n\n    uint256 internal constant _ROLE_0 = 1 << 0;\n    uint256 internal constant _ROLE_1 = 1 << 1;\n    uint256 internal constant _ROLE_2 = 1 << 2;\n    uint256 internal constant _ROLE_3 = 1 << 3;\n    uint256 internal constant _ROLE_4 = 1 << 4;\n    uint256 internal constant _ROLE_5 = 1 << 5;\n    uint256 internal constant _ROLE_6 = 1 << 6;\n    uint256 internal constant _ROLE_7 = 1 << 7;\n    uint256 internal constant _ROLE_8 = 1 << 8;\n    uint256 internal constant _ROLE_9 = 1 << 9;\n    uint256 internal constant _ROLE_10 = 1 << 10;\n    uint256 internal constant _ROLE_11 = 1 << 11;\n    uint256 internal constant _ROLE_12 = 1 << 12;\n    uint256 internal constant _ROLE_13 = 1 << 13;\n    uint256 internal constant _ROLE_14 = 1 << 14;\n    uint256 internal constant _ROLE_15 = 1 << 15;\n    uint256 internal constant _ROLE_16 = 1 << 16;\n    uint256 internal constant _ROLE_17 = 1 << 17;\n    uint256 internal constant _ROLE_18 = 1 << 18;\n    uint256 internal constant _ROLE_19 = 1 << 19;\n    uint256 internal constant _ROLE_20 = 1 << 20;\n    uint256 internal constant _ROLE_21 = 1 << 21;\n    uint256 internal constant _ROLE_22 = 1 << 22;\n    uint256 internal constant _ROLE_23 = 1 << 23;\n    uint256 internal constant _ROLE_24 = 1 << 24;\n    uint256 internal constant _ROLE_25 = 1 << 25;\n    uint256 internal constant _ROLE_26 = 1 << 26;\n    uint256 internal constant _ROLE_27 = 1 << 27;\n    uint256 internal constant _ROLE_28 = 1 << 28;\n    uint256 internal constant _ROLE_29 = 1 << 29;\n    uint256 internal constant _ROLE_30 = 1 << 30;\n    uint256 internal constant _ROLE_31 = 1 << 31;\n    uint256 internal constant _ROLE_32 = 1 << 32;\n    uint256 internal constant _ROLE_33 = 1 << 33;\n    uint256 internal constant _ROLE_34 = 1 << 34;\n    uint256 internal constant _ROLE_35 = 1 << 35;\n    uint256 internal constant _ROLE_36 = 1 << 36;\n    uint256 internal constant _ROLE_37 = 1 << 37;\n    uint256 internal constant _ROLE_38 = 1 << 38;\n    uint256 internal constant _ROLE_39 = 1 << 39;\n    uint256 internal constant _ROLE_40 = 1 << 40;\n    uint256 internal constant _ROLE_41 = 1 << 41;\n    uint256 internal constant _ROLE_42 = 1 << 42;\n    uint256 internal constant _ROLE_43 = 1 << 43;\n    uint256 internal constant _ROLE_44 = 1 << 44;\n    uint256 internal constant _ROLE_45 = 1 << 45;\n    uint256 internal constant _ROLE_46 = 1 << 46;\n    uint256 internal constant _ROLE_47 = 1 << 47;\n    uint256 internal constant _ROLE_48 = 1 << 48;\n    uint256 internal constant _ROLE_49 = 1 << 49;\n    uint256 internal constant _ROLE_50 = 1 << 50;\n    uint256 internal constant _ROLE_51 = 1 << 51;\n    uint256 internal constant _ROLE_52 = 1 << 52;\n    uint256 internal constant _ROLE_53 = 1 << 53;\n    uint256 internal constant _ROLE_54 = 1 << 54;\n    uint256 internal constant _ROLE_55 = 1 << 55;\n    uint256 internal constant _ROLE_56 = 1 << 56;\n    uint256 internal constant _ROLE_57 = 1 << 57;\n    uint256 internal constant _ROLE_58 = 1 << 58;\n    uint256 internal constant _ROLE_59 = 1 << 59;\n    uint256 internal constant _ROLE_60 = 1 << 60;\n    uint256 internal constant _ROLE_61 = 1 << 61;\n    uint256 internal constant _ROLE_62 = 1 << 62;\n    uint256 internal constant _ROLE_63 = 1 << 63;\n    uint256 internal constant _ROLE_64 = 1 << 64;\n    uint256 internal constant _ROLE_65 = 1 << 65;\n    uint256 internal constant _ROLE_66 = 1 << 66;\n    uint256 internal constant _ROLE_67 = 1 << 67;\n    uint256 internal constant _ROLE_68 = 1 << 68;\n    uint256 internal constant _ROLE_69 = 1 << 69;\n    uint256 internal constant _ROLE_70 = 1 << 70;\n    uint256 internal constant _ROLE_71 = 1 << 71;\n    uint256 internal constant _ROLE_72 = 1 << 72;\n    uint256 internal constant _ROLE_73 = 1 << 73;\n    uint256 internal constant _ROLE_74 = 1 << 74;\n    uint256 internal constant _ROLE_75 = 1 << 75;\n    uint256 internal constant _ROLE_76 = 1 << 76;\n    uint256 internal constant _ROLE_77 = 1 << 77;\n    uint256 internal constant _ROLE_78 = 1 << 78;\n    uint256 internal constant _ROLE_79 = 1 << 79;\n    uint256 internal constant _ROLE_80 = 1 << 80;\n    uint256 internal constant _ROLE_81 = 1 << 81;\n    uint256 internal constant _ROLE_82 = 1 << 82;\n    uint256 internal constant _ROLE_83 = 1 << 83;\n    uint256 internal constant _ROLE_84 = 1 << 84;\n    uint256 internal constant _ROLE_85 = 1 << 85;\n    uint256 internal constant _ROLE_86 = 1 << 86;\n    uint256 internal constant _ROLE_87 = 1 << 87;\n    uint256 internal constant _ROLE_88 = 1 << 88;\n    uint256 internal constant _ROLE_89 = 1 << 89;\n    uint256 internal constant _ROLE_90 = 1 << 90;\n    uint256 internal constant _ROLE_91 = 1 << 91;\n    uint256 internal constant _ROLE_92 = 1 << 92;\n    uint256 internal constant _ROLE_93 = 1 << 93;\n    uint256 internal constant _ROLE_94 = 1 << 94;\n    uint256 internal constant _ROLE_95 = 1 << 95;\n    uint256 internal constant _ROLE_96 = 1 << 96;\n    uint256 internal constant _ROLE_97 = 1 << 97;\n    uint256 internal constant _ROLE_98 = 1 << 98;\n    uint256 internal constant _ROLE_99 = 1 << 99;\n    uint256 internal constant _ROLE_100 = 1 << 100;\n    uint256 internal constant _ROLE_101 = 1 << 101;\n    uint256 internal constant _ROLE_102 = 1 << 102;\n    uint256 internal constant _ROLE_103 = 1 << 103;\n    uint256 internal constant _ROLE_104 = 1 << 104;\n    uint256 internal constant _ROLE_105 = 1 << 105;\n    uint256 internal constant _ROLE_106 = 1 << 106;\n    uint256 internal constant _ROLE_107 = 1 << 107;\n    uint256 internal constant _ROLE_108 = 1 << 108;\n    uint256 internal constant _ROLE_109 = 1 << 109;\n    uint256 internal constant _ROLE_110 = 1 << 110;\n    uint256 internal constant _ROLE_111 = 1 << 111;\n    uint256 internal constant _ROLE_112 = 1 << 112;\n    uint256 internal constant _ROLE_113 = 1 << 113;\n    uint256 internal constant _ROLE_114 = 1 << 114;\n    uint256 internal constant _ROLE_115 = 1 << 115;\n    uint256 internal constant _ROLE_116 = 1 << 116;\n    uint256 internal constant _ROLE_117 = 1 << 117;\n    uint256 internal constant _ROLE_118 = 1 << 118;\n    uint256 internal constant _ROLE_119 = 1 << 119;\n    uint256 internal constant _ROLE_120 = 1 << 120;\n    uint256 internal constant _ROLE_121 = 1 << 121;\n    uint256 internal constant _ROLE_122 = 1 << 122;\n    uint256 internal constant _ROLE_123 = 1 << 123;\n    uint256 internal constant _ROLE_124 = 1 << 124;\n    uint256 internal constant _ROLE_125 = 1 << 125;\n    uint256 internal constant _ROLE_126 = 1 << 126;\n    uint256 internal constant _ROLE_127 = 1 << 127;\n    uint256 internal constant _ROLE_128 = 1 << 128;\n    uint256 internal constant _ROLE_129 = 1 << 129;\n    uint256 internal constant _ROLE_130 = 1 << 130;\n    uint256 internal constant _ROLE_131 = 1 << 131;\n    uint256 internal constant _ROLE_132 = 1 << 132;\n    uint256 internal constant _ROLE_133 = 1 << 133;\n    uint256 internal constant _ROLE_134 = 1 << 134;\n    uint256 internal constant _ROLE_135 = 1 << 135;\n    uint256 internal constant _ROLE_136 = 1 << 136;\n    uint256 internal constant _ROLE_137 = 1 << 137;\n    uint256 internal constant _ROLE_138 = 1 << 138;\n    uint256 internal constant _ROLE_139 = 1 << 139;\n    uint256 internal constant _ROLE_140 = 1 << 140;\n    uint256 internal constant _ROLE_141 = 1 << 141;\n    uint256 internal constant _ROLE_142 = 1 << 142;\n    uint256 internal constant _ROLE_143 = 1 << 143;\n    uint256 internal constant _ROLE_144 = 1 << 144;\n    uint256 internal constant _ROLE_145 = 1 << 145;\n    uint256 internal constant _ROLE_146 = 1 << 146;\n    uint256 internal constant _ROLE_147 = 1 << 147;\n    uint256 internal constant _ROLE_148 = 1 << 148;\n    uint256 internal constant _ROLE_149 = 1 << 149;\n    uint256 internal constant _ROLE_150 = 1 << 150;\n    uint256 internal constant _ROLE_151 = 1 << 151;\n    uint256 internal constant _ROLE_152 = 1 << 152;\n    uint256 internal constant _ROLE_153 = 1 << 153;\n    uint256 internal constant _ROLE_154 = 1 << 154;\n    uint256 internal constant _ROLE_155 = 1 << 155;\n    uint256 internal constant _ROLE_156 = 1 << 156;\n    uint256 internal constant _ROLE_157 = 1 << 157;\n    uint256 internal constant _ROLE_158 = 1 << 158;\n    uint256 internal constant _ROLE_159 = 1 << 159;\n    uint256 internal constant _ROLE_160 = 1 << 160;\n    uint256 internal constant _ROLE_161 = 1 << 161;\n    uint256 internal constant _ROLE_162 = 1 << 162;\n    uint256 internal constant _ROLE_163 = 1 << 163;\n    uint256 internal constant _ROLE_164 = 1 << 164;\n    uint256 internal constant _ROLE_165 = 1 << 165;\n    uint256 internal constant _ROLE_166 = 1 << 166;\n    uint256 internal constant _ROLE_167 = 1 << 167;\n    uint256 internal constant _ROLE_168 = 1 << 168;\n    uint256 internal constant _ROLE_169 = 1 << 169;\n    uint256 internal constant _ROLE_170 = 1 << 170;\n    uint256 internal constant _ROLE_171 = 1 << 171;\n    uint256 internal constant _ROLE_172 = 1 << 172;\n    uint256 internal constant _ROLE_173 = 1 << 173;\n    uint256 internal constant _ROLE_174 = 1 << 174;\n    uint256 internal constant _ROLE_175 = 1 << 175;\n    uint256 internal constant _ROLE_176 = 1 << 176;\n    uint256 internal constant _ROLE_177 = 1 << 177;\n    uint256 internal constant _ROLE_178 = 1 << 178;\n    uint256 internal constant _ROLE_179 = 1 << 179;\n    uint256 internal constant _ROLE_180 = 1 << 180;\n    uint256 internal constant _ROLE_181 = 1 << 181;\n    uint256 internal constant _ROLE_182 = 1 << 182;\n    uint256 internal constant _ROLE_183 = 1 << 183;\n    uint256 internal constant _ROLE_184 = 1 << 184;\n    uint256 internal constant _ROLE_185 = 1 << 185;\n    uint256 internal constant _ROLE_186 = 1 << 186;\n    uint256 internal constant _ROLE_187 = 1 << 187;\n    uint256 internal constant _ROLE_188 = 1 << 188;\n    uint256 internal constant _ROLE_189 = 1 << 189;\n    uint256 internal constant _ROLE_190 = 1 << 190;\n    uint256 internal constant _ROLE_191 = 1 << 191;\n    uint256 internal constant _ROLE_192 = 1 << 192;\n    uint256 internal constant _ROLE_193 = 1 << 193;\n    uint256 internal constant _ROLE_194 = 1 << 194;\n    uint256 internal constant _ROLE_195 = 1 << 195;\n    uint256 internal constant _ROLE_196 = 1 << 196;\n    uint256 internal constant _ROLE_197 = 1 << 197;\n    uint256 internal constant _ROLE_198 = 1 << 198;\n    uint256 internal constant _ROLE_199 = 1 << 199;\n    uint256 internal constant _ROLE_200 = 1 << 200;\n    uint256 internal constant _ROLE_201 = 1 << 201;\n    uint256 internal constant _ROLE_202 = 1 << 202;\n    uint256 internal constant _ROLE_203 = 1 << 203;\n    uint256 internal constant _ROLE_204 = 1 << 204;\n    uint256 internal constant _ROLE_205 = 1 << 205;\n    uint256 internal constant _ROLE_206 = 1 << 206;\n    uint256 internal constant _ROLE_207 = 1 << 207;\n    uint256 internal constant _ROLE_208 = 1 << 208;\n    uint256 internal constant _ROLE_209 = 1 << 209;\n    uint256 internal constant _ROLE_210 = 1 << 210;\n    uint256 internal constant _ROLE_211 = 1 << 211;\n    uint256 internal constant _ROLE_212 = 1 << 212;\n    uint256 internal constant _ROLE_213 = 1 << 213;\n    uint256 internal constant _ROLE_214 = 1 << 214;\n    uint256 internal constant _ROLE_215 = 1 << 215;\n    uint256 internal constant _ROLE_216 = 1 << 216;\n    uint256 internal constant _ROLE_217 = 1 << 217;\n    uint256 internal constant _ROLE_218 = 1 << 218;\n    uint256 internal constant _ROLE_219 = 1 << 219;\n    uint256 internal constant _ROLE_220 = 1 << 220;\n    uint256 internal constant _ROLE_221 = 1 << 221;\n    uint256 internal constant _ROLE_222 = 1 << 222;\n    uint256 internal constant _ROLE_223 = 1 << 223;\n    uint256 internal constant _ROLE_224 = 1 << 224;\n    uint256 internal constant _ROLE_225 = 1 << 225;\n    uint256 internal constant _ROLE_226 = 1 << 226;\n    uint256 internal constant _ROLE_227 = 1 << 227;\n    uint256 internal constant _ROLE_228 = 1 << 228;\n    uint256 internal constant _ROLE_229 = 1 << 229;\n    uint256 internal constant _ROLE_230 = 1 << 230;\n    uint256 internal constant _ROLE_231 = 1 << 231;\n    uint256 internal constant _ROLE_232 = 1 << 232;\n    uint256 internal constant _ROLE_233 = 1 << 233;\n    uint256 internal constant _ROLE_234 = 1 << 234;\n    uint256 internal constant _ROLE_235 = 1 << 235;\n    uint256 internal constant _ROLE_236 = 1 << 236;\n    uint256 internal constant _ROLE_237 = 1 << 237;\n    uint256 internal constant _ROLE_238 = 1 << 238;\n    uint256 internal constant _ROLE_239 = 1 << 239;\n    uint256 internal constant _ROLE_240 = 1 << 240;\n    uint256 internal constant _ROLE_241 = 1 << 241;\n    uint256 internal constant _ROLE_242 = 1 << 242;\n    uint256 internal constant _ROLE_243 = 1 << 243;\n    uint256 internal constant _ROLE_244 = 1 << 244;\n    uint256 internal constant _ROLE_245 = 1 << 245;\n    uint256 internal constant _ROLE_246 = 1 << 246;\n    uint256 internal constant _ROLE_247 = 1 << 247;\n    uint256 internal constant _ROLE_248 = 1 << 248;\n    uint256 internal constant _ROLE_249 = 1 << 249;\n    uint256 internal constant _ROLE_250 = 1 << 250;\n    uint256 internal constant _ROLE_251 = 1 << 251;\n    uint256 internal constant _ROLE_252 = 1 << 252;\n    uint256 internal constant _ROLE_253 = 1 << 253;\n    uint256 internal constant _ROLE_254 = 1 << 254;\n    uint256 internal constant _ROLE_255 = 1 << 255;\n}\n"
      },
      "contracts/ERC721Storage.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity 0.8.15;\n\nimport { Base64 } from \"@turbo-eth/solbase-sol/src/utils/Base64.sol\";\nimport { OwnedRoles } from \"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\";\nimport { IERC721KImage } from \"./interfaces/IERC721KImage.sol\";\nimport { IERC721KTraits } from \"./interfaces/IERC721KTraits.sol\";\n\n/**\n * @title ERC721Storage\n * @author Kames Geraghty\n */\nabstract contract ERC721Storage is OwnedRoles {\n  address internal svgRenderInstance;\n  address internal traitsFetchInstance;\n  ContractURI internal _contractURI;\n\n  struct ContractURI {\n    string name;\n    string description;\n    string image;\n    string externalLink;\n    string sellerFeeBasisPoints;\n    string feeRecipient;\n  }\n\n  event SvgRenderUpdated(address svgRender);\n\n  event TraitsFetchUpdated(address traitsFetch);\n\n  event ContractURIUpdated(ContractURI contractURI);\n\n  constructor(\n    address svgRender_Instance,\n    address traitsFetchInstance_,\n    ContractURI memory _contractURI_\n  ) OwnedRoles() {\n    svgRenderInstance = svgRender_Instance;\n    traitsFetchInstance = traitsFetchInstance_;\n    _contractURI = _contractURI_;\n    _initializeOwner(msg.sender);\n  }\n\n  /* ===================================================================================== */\n  /* Virtual Functions                                                                     */\n  /* ===================================================================================== */\n\n  function _parseName(uint256 _tokenId) internal view virtual returns (string memory);\n\n  function _parseDescription(uint256 _tokenId) internal view virtual returns (string memory);\n\n  /* ===================================================================================== */\n  /* External Functions                                                                    */\n  /* ===================================================================================== */\n  function getERC721KRender() external view returns (address) {\n    return svgRenderInstance;\n  }\n\n  function getERC72KTraits() external view returns (address) {\n    return traitsFetchInstance;\n  }\n\n  function getContractDescription() external view returns (ContractURI memory) {\n    return _contractURI;\n  }\n\n  function render(bytes memory input) external view returns (string memory) {\n    return IERC721KImage(svgRenderInstance).render(input);\n  }\n\n  function constructTokenURI(\n    uint256 tokenId,\n    bytes memory input0,\n    bytes memory input1\n  ) external view virtual returns (string memory uri) {\n    string memory image_ = IERC721KImage(svgRenderInstance).render(input0);\n    string memory traits_ = IERC721KTraits(traitsFetchInstance).fetch(input1);\n    return\n      string(\n        abi.encodePacked(\n          \"data:application/json;base64,\",\n          Base64.encode(\n            bytes(\n              string.concat(\n                '{\"name\":',\n                '\"',\n                _parseName(tokenId),\n                '\",',\n                '\"description\":',\n                '\"',\n                _parseDescription(tokenId),\n                '\",',\n                '\"image\":',\n                '\"',\n                image_,\n                '\",',\n                '\"attributes\": [',\n                traits_,\n                \"]\",\n                \"}\"\n              )\n            )\n          )\n        )\n      );\n  }\n\n  function constructContractURI() external view virtual returns (string memory uri) {\n    return\n      string(\n        abi.encodePacked(\n          \"data:application/json;base64,\",\n          Base64.encode(\n            bytes(\n              string.concat(\n                '{\"name\":',\n                '\"',\n                _contractURI.name,\n                '\",',\n                '\"description\":',\n                '\"',\n                _contractURI.description,\n                '\",',\n                '\"image\":',\n                '\"',\n                _contractURI.image,\n                '\",',\n                '\"externalLink\":',\n                '\"',\n                _contractURI.externalLink,\n                '\",',\n                '\"sellerFeeBasisPoints\":',\n                '\"',\n                _contractURI.sellerFeeBasisPoints,\n                '\",',\n                '\"feeRecipient\":',\n                '\"',\n                _contractURI.feeRecipient,\n                '\"',\n                \"}\"\n              )\n            )\n          )\n        )\n      );\n  }\n\n  function setSvgRender(address svgRender) external onlyOwner {\n    svgRenderInstance = svgRender;\n    emit SvgRenderUpdated(svgRender);\n  }\n\n  function setTraitsFetch(address traitsFetch) external onlyOwner {\n    traitsFetchInstance = traitsFetch;\n    emit TraitsFetchUpdated(traitsFetch);\n  }\n\n  function setContractURI(ContractURI memory contractURI) external onlyOwner {\n    _contractURI = contractURI;\n    emit ContractURIUpdated(contractURI);\n  }\n}\n"
      },
      "@turbo-eth/solbase-sol/src/utils/Base64.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.4;\n\n/// @notice Library to encode and decode strings in Base64.\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\nlibrary Base64 {\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\n    /// See: https://datatracker.ietf.org/doc/html/rfc4648\n    /// @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\n    /// @param noPadding Whether to strip away the padding.\n    function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) {\n        assembly {\n            let dataLength := mload(data)\n\n            if dataLength {\n                // Multiply by 4/3 rounded up.\n                // The `shl(2, ...)` is equivalent to multiplying by 4.\n                let encodedLength := shl(2, div(add(dataLength, 2), 3))\n\n                // Set `result` to point to the start of the free memory.\n                result := mload(0x40)\n\n                // Store the table into the scratch space.\n                // Offsetted by -1 byte so that the `mload` will load the character.\n                // We will rewrite the free memory pointer at `0x40` later with\n                // the allocated size.\n                // The magic constant 0x0230 will translate \"-_\" + \"+/\".\n                mstore(0x1f, \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef\")\n                mstore(0x3f, sub(\"ghijklmnopqrstuvwxyz0123456789-_\", mul(iszero(fileSafe), 0x0230)))\n\n                // Skip the first slot, which stores the length.\n                let ptr := add(result, 0x20)\n                let end := add(ptr, encodedLength)\n\n                // Run over the input, 3 bytes at a time.\n                // prettier-ignore\n                for {} 1 {} {\n                    data := add(data, 3) // Advance 3 bytes.\n                    let input := mload(data)\n\n                    // Write 4 bytes. Optimized for fewer stack operations.\n                    mstore8(    ptr    , mload(and(shr(18, input), 0x3F)))\n                    mstore8(add(ptr, 1), mload(and(shr(12, input), 0x3F)))\n                    mstore8(add(ptr, 2), mload(and(shr( 6, input), 0x3F)))\n                    mstore8(add(ptr, 3), mload(and(        input , 0x3F)))\n                    \n                    ptr := add(ptr, 4) // Advance 4 bytes.\n                    // prettier-ignore\n                    if iszero(lt(ptr, end)) { break }\n                }\n\n                let r := mod(dataLength, 3)\n\n                switch noPadding\n                case 0 {\n                    // Offset `ptr` and pad with '='. We can simply write over the end.\n                    mstore8(sub(ptr, iszero(iszero(r))), 0x3d) // Pad at `ptr - 1` if `r > 0`.\n                    mstore8(sub(ptr, shl(1, eq(r, 1))), 0x3d) // Pad at `ptr - 2` if `r == 1`.\n                    // Write the length of the string.\n                    mstore(result, encodedLength)\n                }\n                default {\n                    // Write the length of the string.\n                    mstore(result, sub(encodedLength, add(iszero(iszero(r)), eq(r, 1))))\n                }\n\n                // Allocate the memory for the string.\n                // Add 31 and mask with `not(31)` to round the\n                // free memory pointer up the next multiple of 32.\n                mstore(0x40, and(add(end, 31), not(31)))\n            }\n        }\n    }\n\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\n    /// Equivalent to `encode(data, false, false)`.\n    function encode(bytes memory data) internal pure returns (string memory result) {\n        result = encode(data, false, false);\n    }\n\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\n    /// Equivalent to `encode(data, fileSafe, false)`.\n    function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) {\n        result = encode(data, fileSafe, false);\n    }\n\n    /// @dev Decodes base64 encoded `data`.\n    ///\n    /// Supports:\n    /// - RFC 4648 (both standard and file-safe mode).\n    /// - RFC 3501 (63: ',').\n    ///\n    /// Does not support:\n    /// - Line breaks.\n    ///\n    /// Note: For performance reasons,\n    /// this function will NOT revert on invalid `data` inputs.\n    /// Outputs for invalid inputs will simply be undefined behaviour.\n    /// It is the user's responsibility to ensure that the `data`\n    /// is a valid base64 encoded string.\n    function decode(string memory data) internal pure returns (bytes memory result) {\n        assembly {\n            let dataLength := mload(data)\n\n            if dataLength {\n                let end := add(data, dataLength)\n                let decodedLength := mul(shr(2, dataLength), 3)\n\n                switch and(dataLength, 3)\n                case 0 {\n                    // If padded.\n                    decodedLength := sub(\n                        decodedLength,\n                        add(eq(and(mload(end), 0xFF), 0x3d), eq(and(mload(end), 0xFFFF), 0x3d3d))\n                    )\n                }\n                default {\n                    // If non-padded.\n                    decodedLength := add(decodedLength, sub(and(dataLength, 3), 1))\n                }\n\n                result := mload(0x40)\n\n                // Write the length of the string.\n                mstore(result, decodedLength)\n\n                // Skip the first slot, which stores the length.\n                let ptr := add(result, 0x20)\n\n                // Load the table into the scratch space.\n                // Constants are optimized for smaller bytecode with zero gas overhead.\n                // `m` also doubles as the mask of the upper 6 bits.\n                let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc\n                mstore(0x5b, m)\n                mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064)\n                mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4)\n\n                // prettier-ignore\n                for {} 1 {} {\n                    // Read 4 bytes.\n                    data := add(data, 4)\n                    let input := mload(data)\n\n                    // Write 3 bytes.\n                    mstore(ptr, or(\n                        and(m, mload(byte(28, input))),\n                        shr(6, or(\n                            and(m, mload(byte(29, input))),\n                            shr(6, or(\n                                and(m, mload(byte(30, input))),\n                                shr(6, mload(byte(31, input)))\n                            ))\n                        ))\n                    ))\n\n                    ptr := add(ptr, 3)\n                    \n                    // prettier-ignore\n                    if iszero(lt(data, end)) { break }\n                }\n\n                // Allocate the memory for the string.\n                // Add 32 + 31 and mask with `not(31)` to round the\n                // free memory pointer up the next multiple of 32.\n                mstore(0x40, and(add(add(result, decodedLength), 63), not(31)))\n\n                // Restore the zero slot.\n                mstore(0x60, 0)\n            }\n        }\n    }\n}\n"
      },
      "contracts/interfaces/IERC721KImage.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.15;\n\ninterface IERC721KImage {\n  function render(bytes memory input) external view returns (string memory);\n}\n"
      },
      "contracts/interfaces/IERC721KTraits.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.15;\n\ninterface IERC721KTraits {\n  enum DisplayType {\n    Base,\n    Generic,\n    BoostNumber,\n    BoostPercent,\n    Number,\n    Date\n  }\n\n  function fetch(bytes memory input) external view returns (string memory);\n}\n"
      },
      "contracts/mocks/MockERC721K.sol": {
        "content": "//SPDX-License-Identifier: GPL-3.0\npragma solidity 0.8.15;\n\nimport { ERC721K } from \"../ERC721K.sol\";\n\ncontract MockERC721K is ERC721K {\n  constructor(\n    string memory name,\n    string memory symbol,\n    address erc721Storage\n  ) ERC721K(name, symbol, erc721Storage) {}\n\n  function _tokenData(uint256) internal view virtual override returns (bytes memory, bytes memory) {\n    bytes memory imageBytes;\n    bytes memory traitsBytes;\n    return (imageBytes, traitsBytes);\n  }\n}\n"
      },
      "contracts/mocks/MockERC721Storage.sol": {
        "content": "//SPDX-License-Identifier: GPL-3.0\npragma solidity 0.8.15;\n\nimport { Strings } from \"@openzeppelin/contracts/utils/Strings.sol\";\nimport { ERC721Storage } from \"../ERC721Storage.sol\";\n\ncontract MockERC721Storage is ERC721Storage {\n  constructor(\n    address _svgRender_,\n    address _traitsFetch_,\n    ContractURI memory _contractURI_\n  ) ERC721Storage(_svgRender_, _traitsFetch_, _contractURI_) {}\n\n  function _parseName(uint256 _tokenId) internal view override returns (string memory) {\n    return string.concat(\"NFT #\", Strings.toString(_tokenId));\n  }\n\n  function _parseDescription(uint256 _tokenId) internal view override returns (string memory) {\n    return string.concat(\"NFT Member #\", Strings.toString(_tokenId));\n  }\n}\n"
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n    bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n    uint8 private constant _ADDRESS_LENGTH = 20;\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            /// @solidity memory-safe-assembly\n            assembly {\n                ptr := add(buffer, add(32, length))\n            }\n            while (true) {\n                ptr--;\n                /// @solidity memory-safe-assembly\n                assembly {\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n                }\n                value /= 10;\n                if (value == 0) break;\n            }\n            return buffer;\n        }\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        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] = _SYMBOLS[value & 0xf];\n            value >>= 4;\n        }\n        require(value == 0, \"Strings: hex length insufficient\");\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 representation.\n     */\n    function toHexString(address addr) internal pure returns (string memory) {\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    enum Rounding {\n        Down, // Toward negative infinity\n        Up, // Toward infinity\n        Zero // Toward zero\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 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 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 up instead\n     * of rounding down.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b - 1) / b can overflow on addition, so we distribute.\n        return a == 0 ? 0 : (a - 1) / b + 1;\n    }\n\n    /**\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n     * with further edits by Uniswap Labs also under MIT license.\n     */\n    function mulDiv(\n        uint256 x,\n        uint256 y,\n        uint256 denominator\n    ) internal pure returns (uint256 result) {\n        unchecked {\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n            // variables such that product = prod1 * 2^256 + prod0.\n            uint256 prod0; // Least significant 256 bits of the product\n            uint256 prod1; // Most significant 256 bits of the product\n            assembly {\n                let mm := mulmod(x, y, not(0))\n                prod0 := mul(x, y)\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n            }\n\n            // Handle non-overflow cases, 256 by 256 division.\n            if (prod1 == 0) {\n                return prod0 / denominator;\n            }\n\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\n            require(denominator > prod1);\n\n            ///////////////////////////////////////////////\n            // 512 by 256 division.\n            ///////////////////////////////////////////////\n\n            // Make division exact by subtracting the remainder from [prod1 prod0].\n            uint256 remainder;\n            assembly {\n                // Compute remainder using mulmod.\n                remainder := mulmod(x, y, denominator)\n\n                // Subtract 256 bit number from 512 bit number.\n                prod1 := sub(prod1, gt(remainder, prod0))\n                prod0 := sub(prod0, remainder)\n            }\n\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n            // See https://cs.stackexchange.com/q/138556/92363.\n\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\n            uint256 twos = denominator & (~denominator + 1);\n            assembly {\n                // Divide denominator by twos.\n                denominator := div(denominator, twos)\n\n                // Divide [prod1 prod0] by twos.\n                prod0 := div(prod0, twos)\n\n                // Flip twos such that it is 2^256 / 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 prod1 into prod0.\n            prod0 |= prod1 * twos;\n\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n            // four bits. That is, denominator * inv = 1 mod 2^4.\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 works\n            // in modular arithmetic, doubling the correct bits in each step.\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\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^256. Since the preconditions guarantee that the outcome is\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n            // is no longer required.\n            result = prod0 * inverse;\n            return result;\n        }\n    }\n\n    /**\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n     */\n    function mulDiv(\n        uint256 x,\n        uint256 y,\n        uint256 denominator,\n        Rounding rounding\n    ) internal pure returns (uint256) {\n        uint256 result = mulDiv(x, y, denominator);\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n            result += 1;\n        }\n        return result;\n    }\n\n    /**\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n     *\n     * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n     */\n    function sqrt(uint256 a) internal pure returns (uint256) {\n        if (a == 0) {\n            return 0;\n        }\n\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n        //\n        // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n        //\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n        //\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n        uint256 result = 1 << (log2(a) >> 1);\n\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n        // into the expected uint128 result.\n        unchecked {\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            return min(result, a / result);\n        }\n    }\n\n    /**\n     * @notice 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 + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 128;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 64;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 32;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 16;\n            }\n            if (value >> 8 > 0) {\n                value >>= 8;\n                result += 8;\n            }\n            if (value >> 4 > 0) {\n                value >>= 4;\n                result += 4;\n            }\n            if (value >> 2 > 0) {\n                value >>= 2;\n                result += 2;\n            }\n            if (value >> 1 > 0) {\n                result += 1;\n            }\n        }\n        return result;\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 + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 10, rounded down, of a positive value.\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 + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 256, rounded down, of a positive value.\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 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 16;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 8;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 4;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 2;\n            }\n            if (value >> 8 > 0) {\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 log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log256(value);\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n        }\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "evmVersion": "istanbul",
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "devdoc",
            "userdoc",
            "storageLayout",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "@openzeppelin/contracts/utils/Strings.sol": {
        "Strings": {
          "abi": [],
          "devdoc": {
            "details": "String operations.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e7772f3b665bb9b1468d50008461c9812d944d0077a6f9103e9d008bf664232d64736f6c634300080f0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 PUSH24 0x2F3B665BB9B1468D50008461C9812D944D0077A6F9103E9D STOP DUP12 0xF6 PUSH5 0x232D64736F PUSH13 0x634300080F0033000000000000 ",
              "sourceMap": "188:2065:0:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;188:2065:0;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e7772f3b665bb9b1468d50008461c9812d944d0077a6f9103e9d008bf664232d64736f6c634300080f0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE7 PUSH24 0x2F3B665BB9B1468D50008461C9812D944D0077A6F9103E9D STOP DUP12 0xF6 PUSH5 0x232D64736F PUSH13 0x634300080F0033000000000000 ",
              "sourceMap": "188:2065:0:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "toHexString(address)": "infinite",
                "toHexString(uint256)": "infinite",
                "toHexString(uint256,uint256)": "infinite",
                "toString(uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\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            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\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        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] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\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 representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\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 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 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 up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / 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 prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\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 works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\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^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice 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 + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\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 + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\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 + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\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 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\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 log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "Math": {
          "abi": [],
          "devdoc": {
            "details": "Standard math utilities missing in the Solidity language.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f15828d75d7c8e337fe61088d5fbfe834daf236a8cf84b5a92b096e16165fd564736f6c634300080f0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP16 ISZERO DUP3 DUP14 PUSH22 0xD7C8E337FE61088D5FBFE834DAF236A8CF84B5A92B09 PUSH15 0x16165FD564736F6C634300080F0033 ",
              "sourceMap": "202:12302:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;202:12302:1;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f15828d75d7c8e337fe61088d5fbfe834daf236a8cf84b5a92b096e16165fd564736f6c634300080f0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP16 ISZERO DUP3 DUP14 PUSH22 0xD7C8E337FE61088D5FBFE834DAF236A8CF84B5A92B09 PUSH15 0x16165FD564736F6C634300080F0033 ",
              "sourceMap": "202:12302:1:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "average(uint256,uint256)": "infinite",
                "ceilDiv(uint256,uint256)": "infinite",
                "log10(uint256)": "infinite",
                "log10(uint256,enum Math.Rounding)": "infinite",
                "log2(uint256)": "infinite",
                "log2(uint256,enum Math.Rounding)": "infinite",
                "log256(uint256)": "infinite",
                "log256(uint256,enum Math.Rounding)": "infinite",
                "max(uint256,uint256)": "infinite",
                "min(uint256,uint256)": "infinite",
                "mulDiv(uint256,uint256,uint256)": "infinite",
                "mulDiv(uint256,uint256,uint256,enum Math.Rounding)": "infinite",
                "sqrt(uint256)": "infinite",
                "sqrt(uint256,enum Math.Rounding)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"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\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\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 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 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 up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / 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 prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\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 works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\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^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice 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 + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\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 + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\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 + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\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 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\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 log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol": {
        "OwnedRoles": {
          "abi": [
            {
              "inputs": [],
              "name": "NewOwnerIsZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoHandoverRequest",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverCanceled",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "oldOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "RolesUpdated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "cancelOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "completeOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "grantRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAllRoles",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAnyRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "ordinalsFromRoles",
              "outputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "result",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "ownershipHandoverExpiresAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "result",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ownershipHandoverValidFor",
              "outputs": [
                {
                  "internalType": "uint64",
                  "name": "",
                  "type": "uint64"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "renounceRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "revokeRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "name": "rolesFromOrdinals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                }
              ],
              "name": "rolesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)",
            "details": "While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173) for compatibility, the nomenclature for the 2-step ownership handover and roles may be unique to this codebase.",
            "errors": {
              "NewOwnerIsZeroAddress()": [
                {
                  "details": "The `newOwner` cannot be the zero address."
                }
              ],
              "NoHandoverRequest()": [
                {
                  "details": "The `pendingOwner` does not have a valid handover request."
                }
              ],
              "Unauthorized()": [
                {
                  "details": "The caller is not authorized to call the function."
                }
              ]
            },
            "events": {
              "OwnershipHandoverCanceled(address)": {
                "details": "The ownership handover to `pendingOwner` has been canceled."
              },
              "OwnershipHandoverRequested(address)": {
                "details": "An ownership handover to `pendingOwner` has been requested."
              },
              "OwnershipTransferred(address,address)": {
                "details": "The ownership is transferred from `oldOwner` to `newOwner`. This event is intentionally kept the same as OpenZeppelin's Ownable to be compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), despite it not being as lightweight as a single argument event."
              },
              "RolesUpdated(address,uint256)": {
                "details": "The `user`'s roles is updated to `roles`. Each bit of `roles` represents whether the role is set."
              }
            },
            "kind": "dev",
            "methods": {
              "cancelOwnershipHandover()": {
                "details": "Cancels the two-step ownership handover to the caller, if any."
              },
              "completeOwnershipHandover(address)": {
                "details": "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
              },
              "grantRoles(address,uint256)": {
                "details": "Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role."
              },
              "hasAllRoles(address,uint256)": {
                "details": "Returns whether `user` has all of `roles`."
              },
              "hasAnyRole(address,uint256)": {
                "details": "Returns whether `user` has any of `roles`."
              },
              "ordinalsFromRoles(uint256)": {
                "details": "Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "owner()": {
                "details": "Returns the owner of the contract."
              },
              "ownershipHandoverExpiresAt(address)": {
                "details": "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
              },
              "ownershipHandoverValidFor()": {
                "details": "Returns how long a two-step ownership handover is valid for in seconds."
              },
              "renounceOwnership()": {
                "details": "Allows the owner to renounce their ownership."
              },
              "renounceRoles(uint256)": {
                "details": "Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role."
              },
              "requestOwnershipHandover()": {
                "details": "Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default."
              },
              "revokeRoles(address,uint256)": {
                "details": "Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role."
              },
              "rolesFromOrdinals(uint8[])": {
                "details": "Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "rolesOf(address)": {
                "details": "Returns the roles of `user`."
              },
              "transferOwnership(address)": {
                "details": "Allows the owner to transfer the ownership to `newOwner`."
              }
            },
            "stateVariables": {
              "_NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR": {
                "details": "`bytes4(keccak256(bytes(\"NewOwnerIsZeroAddress()\")))`."
              },
              "_NO_HANDOVER_REQUEST_ERROR_SELECTOR": {
                "details": "`bytes4(keccak256(bytes(\"NoHandoverRequest()\")))`."
              },
              "_OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE": {
                "details": "`keccak256(bytes(\"OwnershipHandoverCanceled(address)\"))`."
              },
              "_OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE": {
                "details": "`keccak256(bytes(\"OwnershipHandoverRequested(address)\"))`."
              },
              "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE": {
                "details": "`keccak256(bytes(\"OwnershipTransferred(address,address)\"))`."
              },
              "_OWNER_SLOT_NOT": {
                "details": "The owner slot is given by: `not(_OWNER_SLOT_NOT)`. It is intentionally choosen to be a high value to avoid collision with lower slots. The choice of manual storage layout is to enable compatibility with both regular and upgradeable contracts. The role slot of `user` is given by: ```     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))     let roleSlot := keccak256(0x00, 0x20) ``` This automatically ignores the upper bits of the `user` in case they are not clean, as well as keep the `keccak256` under 32-bytes."
              },
              "_ROLES_UPDATED_EVENT_SIGNATURE": {
                "details": "`keccak256(bytes(\"RolesUpdated(address,uint256)\"))`."
              },
              "_UNAUTHORIZED_ERROR_SELECTOR": {
                "details": "`bytes4(keccak256(bytes(\"Unauthorized()\")))`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "cancelOwnershipHandover()": "54d1f13d",
              "completeOwnershipHandover(address)": "f04e283e",
              "grantRoles(address,uint256)": "1c10893f",
              "hasAllRoles(address,uint256)": "1cd64df4",
              "hasAnyRole(address,uint256)": "514e62fc",
              "ordinalsFromRoles(uint256)": "7359e41f",
              "owner()": "8da5cb5b",
              "ownershipHandoverExpiresAt(address)": "fee81cf4",
              "ownershipHandoverValidFor()": "d7533f02",
              "renounceOwnership()": "715018a6",
              "renounceRoles(uint256)": "183a4f6e",
              "requestOwnershipHandover()": "25692962",
              "revokeRoles(address,uint256)": "4a4ee7b1",
              "rolesFromOrdinals(uint8[])": "13a661ed",
              "rolesOf(address)": "2de94807",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"RolesUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"grantRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAllRoles\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAnyRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"ordinalsFromRoles\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownershipHandoverValidFor\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"renounceRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"revokeRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"name\":\"rolesFromOrdinals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rolesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\",\"details\":\"While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173) for compatibility, the nomenclature for the 2-step ownership handover and roles may be unique to this codebase.\",\"errors\":{\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"events\":{\"OwnershipHandoverCanceled(address)\":{\"details\":\"The ownership handover to `pendingOwner` has been canceled.\"},\"OwnershipHandoverRequested(address)\":{\"details\":\"An ownership handover to `pendingOwner` has been requested.\"},\"OwnershipTransferred(address,address)\":{\"details\":\"The ownership is transferred from `oldOwner` to `newOwner`. This event is intentionally kept the same as OpenZeppelin's Ownable to be compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), despite it not being as lightweight as a single argument event.\"},\"RolesUpdated(address,uint256)\":{\"details\":\"The `user`'s roles is updated to `roles`. Each bit of `roles` represents whether the role is set.\"}},\"kind\":\"dev\",\"methods\":{\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"grantRoles(address,uint256)\":{\"details\":\"Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role.\"},\"hasAllRoles(address,uint256)\":{\"details\":\"Returns whether `user` has all of `roles`.\"},\"hasAnyRole(address,uint256)\":{\"details\":\"Returns whether `user` has any of `roles`.\"},\"ordinalsFromRoles(uint256)\":{\"details\":\"Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"ownershipHandoverValidFor()\":{\"details\":\"Returns how long a two-step ownership handover is valid for in seconds.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"renounceRoles(uint256)\":{\"details\":\"Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default.\"},\"revokeRoles(address,uint256)\":{\"details\":\"Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role.\"},\"rolesFromOrdinals(uint8[])\":{\"details\":\"Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"rolesOf(address)\":{\"details\":\"Returns the roles of `user`.\"},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"stateVariables\":{\"_NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR\":{\"details\":\"`bytes4(keccak256(bytes(\\\"NewOwnerIsZeroAddress()\\\")))`.\"},\"_NO_HANDOVER_REQUEST_ERROR_SELECTOR\":{\"details\":\"`bytes4(keccak256(bytes(\\\"NoHandoverRequest()\\\")))`.\"},\"_OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE\":{\"details\":\"`keccak256(bytes(\\\"OwnershipHandoverCanceled(address)\\\"))`.\"},\"_OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE\":{\"details\":\"`keccak256(bytes(\\\"OwnershipHandoverRequested(address)\\\"))`.\"},\"_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE\":{\"details\":\"`keccak256(bytes(\\\"OwnershipTransferred(address,address)\\\"))`.\"},\"_OWNER_SLOT_NOT\":{\"details\":\"The owner slot is given by: `not(_OWNER_SLOT_NOT)`. It is intentionally choosen to be a high value to avoid collision with lower slots. The choice of manual storage layout is to enable compatibility with both regular and upgradeable contracts. The role slot of `user` is given by: ```     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))     let roleSlot := keccak256(0x00, 0x20) ``` This automatically ignores the upper bits of the `user` in case they are not clean, as well as keep the `keccak256` under 32-bytes.\"},\"_ROLES_UPDATED_EVENT_SIGNATURE\":{\"details\":\"`keccak256(bytes(\\\"RolesUpdated(address,uint256)\\\"))`.\"},\"_UNAUTHORIZED_ERROR_SELECTOR\":{\"details\":\"`bytes4(keccak256(bytes(\\\"Unauthorized()\\\")))`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Simple single owner and multiroles authorization mixin.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\":\"OwnedRoles\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Simple single owner and multiroles authorization mixin.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\\n/// @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\\n/// for compatibility, the nomenclature for the 2-step ownership handover and roles\\n/// may be unique to this codebase.\\nabstract contract OwnedRoles {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.\\n    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be\\n    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\\n    /// despite it not being as lightweight as a single argument event.\\n    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\\n\\n    /// @dev An ownership handover to `pendingOwner` has been requested.\\n    event OwnershipHandoverRequested(address indexed pendingOwner);\\n\\n    /// @dev The ownership handover to `pendingOwner` has been canceled.\\n    event OwnershipHandoverCanceled(address indexed pendingOwner);\\n\\n    /// @dev The `user`'s roles is updated to `roles`.\\n    /// Each bit of `roles` represents whether the role is set.\\n    event RolesUpdated(address indexed user, uint256 indexed roles);\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipTransferred(address,address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =\\n        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverRequested(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =\\n        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverCanceled(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =\\n        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;\\n\\n    /// @dev `keccak256(bytes(\\\"RolesUpdated(address,uint256)\\\"))`.\\n    uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =\\n        0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The caller is not authorized to call the function.\\n    error Unauthorized();\\n\\n    /// @dev The `newOwner` cannot be the zero address.\\n    error NewOwnerIsZeroAddress();\\n\\n    /// @dev The `pendingOwner` does not have a valid handover request.\\n    error NoHandoverRequest();\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"Unauthorized()\\\")))`.\\n    uint256 private constant _UNAUTHORIZED_ERROR_SELECTOR = 0x82b42900;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NewOwnerIsZeroAddress()\\\")))`.\\n    uint256 private constant _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR = 0x7448fbae;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NoHandoverRequest()\\\")))`.\\n    uint256 private constant _NO_HANDOVER_REQUEST_ERROR_SELECTOR = 0x6f5e8818;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Storage\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\\n    /// It is intentionally choosen to be a high value\\n    /// to avoid collision with lower slots.\\n    /// The choice of manual storage layout is to enable compatibility\\n    /// with both regular and upgradeable contracts.\\n    ///\\n    /// The role slot of `user` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n    ///     let roleSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// This automatically ignores the upper bits of the `user` in case\\n    /// they are not clean, as well as keep the `keccak256` under 32-bytes.\\n    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;\\n\\n    /// The ownership handover slot of `newOwner` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\\n    ///     let handoverSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// It stores the expiry timestamp of the two-step ownership handover.\\n    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Initializes the owner directly without authorization guard.\\n    /// This function must be called upon initialization,\\n    /// regardless of whether the contract is upgradeable or not.\\n    /// This is to enable generalization to both regular and upgradeable contracts,\\n    /// and to save gas in case the initial owner is not the caller.\\n    /// For performance reasons, this function will not check if there\\n    /// is an existing owner.\\n    function _initializeOwner(address newOwner) internal virtual {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)\\n        }\\n    }\\n\\n    /// @dev Sets the owner directly without authorization guard.\\n    function _setOwner(address newOwner) internal virtual {\\n        assembly {\\n            let ownerSlot := not(_OWNER_SLOT_NOT)\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)\\n            // Store the new value.\\n            sstore(ownerSlot, newOwner)\\n        }\\n    }\\n\\n    /// @dev Grants the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn on.\\n    function _grantRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value and `or` it with `roles`.\\n            let newRoles := or(sload(roleSlot), roles)\\n            // Store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// @dev Removes the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn off.\\n    function _removeRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value.\\n            let currentRoles := sload(roleSlot)\\n            // Use `and` to compute the intersection of `currentRoles` and `roles`,\\n            // `xor` it with `currentRoles` to flip the bits in the intersection.\\n            let newRoles := xor(currentRoles, and(currentRoles, roles))\\n            // Then, store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Update Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Allows the owner to transfer the ownership to `newOwner`.\\n    function transferOwnership(address newOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Reverts if the `newOwner` is the zero address.\\n            if iszero(newOwner) {\\n                mstore(0x00, _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), newOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to renounce their ownership.\\n    function renounceOwnership() public payable virtual onlyOwner {\\n        assembly {\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), 0)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), 0)\\n        }\\n    }\\n\\n    /// @dev Request a two-step ownership handover to the caller.\\n    /// The request will be automatically expire in 48 hours (172800 seconds) by default.\\n    function requestOwnershipHandover() public payable virtual {\\n        unchecked {\\n            uint256 expires = block.timestamp + ownershipHandoverValidFor();\\n            assembly {\\n                // Compute and set the handover slot to 1.\\n                mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n                sstore(keccak256(0x00, 0x20), expires)\\n                // Emit the {OwnershipHandoverRequested} event.\\n                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())\\n            }\\n        }\\n    }\\n\\n    /// @dev Cancels the two-step ownership handover to the caller, if any.\\n    function cancelOwnershipHandover() public payable virtual {\\n        assembly {\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n            sstore(keccak256(0x00, 0x20), 0)\\n            // Emit the {OwnershipHandoverCanceled} event.\\n            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())\\n        }\\n    }\\n\\n    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\\n    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.\\n    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            pendingOwner := shr(96, shl(96, pendingOwner))\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            let handoverSlot := keccak256(0x00, 0x20)\\n            // If the handover does not exist, or has expired.\\n            if gt(timestamp(), sload(handoverSlot)) {\\n                mstore(0x00, _NO_HANDOVER_REQUEST_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Set the handover slot to 0.\\n            sstore(handoverSlot, 0)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), pendingOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), pendingOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to grant `user` `roles`.\\n    /// If the `user` already has a role, then it will be an no-op for the role.\\n    function grantRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _grantRoles(user, roles);\\n    }\\n\\n    /// @dev Allows the owner to remove `user` `roles`.\\n    /// If the `user` does not have a role, then it will be an no-op for the role.\\n    function revokeRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _removeRoles(user, roles);\\n    }\\n\\n    /// @dev Allow the caller to remove their own roles.\\n    /// If the caller does not have a role, then it will be an no-op for the role.\\n    function renounceRoles(uint256 roles) public payable virtual {\\n        _removeRoles(msg.sender, roles);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Read Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Returns the owner of the contract.\\n    function owner() public view virtual returns (address result) {\\n        assembly {\\n            result := sload(not(_OWNER_SLOT_NOT))\\n        }\\n    }\\n\\n    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\\n    function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) {\\n        assembly {\\n            // Compute the handover slot.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            // Load the handover slot.\\n            result := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Returns how long a two-step ownership handover is valid for in seconds.\\n    function ownershipHandoverValidFor() public view virtual returns (uint64) {\\n        return 48 * 3600;\\n    }\\n\\n    /// @dev Returns whether `user` has any of `roles`.\\n    function hasAnyRole(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value, and set the result to whether the\\n            // `and` intersection of the value and `roles` is not zero.\\n            result := iszero(iszero(and(sload(keccak256(0x00, 0x20)), roles)))\\n        }\\n    }\\n\\n    /// @dev Returns whether `user` has all of `roles`.\\n    function hasAllRoles(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Whether the stored value is contains all the set bits in `roles`.\\n            result := eq(and(sload(keccak256(0x00, 0x20)), roles), roles)\\n        }\\n    }\\n\\n    /// @dev Returns the roles of `user`.\\n    function rolesOf(address user) public view virtual returns (uint256 roles) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value.\\n            roles := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function rolesFromOrdinals(uint8[] memory ordinals) public pure returns (uint256 roles) {\\n        assembly {\\n            // Skip the length slot.\\n            let o := add(ordinals, 0x20)\\n            // `shl` 5 is equivalent to multiplying by 0x20.\\n            let end := add(o, shl(5, mload(ordinals)))\\n            // prettier-ignore\\n            for {} iszero(eq(o, end)) { o := add(o, 0x20) } {\\n                roles := or(roles, shl(and(mload(o), 0xff), 1))\\n            }\\n        }\\n    }\\n\\n    /// @dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function ordinalsFromRoles(uint256 roles) public pure returns (uint8[] memory ordinals) {\\n        assembly {\\n            // Grab the pointer to the free memory.\\n            let ptr := add(mload(0x40), 0x20)\\n            // The absence of lookup tables, De Bruijn, etc., here is intentional for\\n            // smaller bytecode, as this function is not meant to be called on-chain.\\n            // prettier-ignore\\n            for { let i := 0 } 1 { i := add(i, 1) } {\\n                mstore(ptr, i)\\n                // `shr` 5 is equivalent to multiplying by 0x20.\\n                // Push back into the ordinals array if the bit is set.\\n                ptr := add(ptr, shl(5, and(roles, 1)))\\n                roles := shr(1, roles)\\n                // prettier-ignore\\n                if iszero(roles) { break }\\n            }\\n            // Set `ordinals` to the start of the free memory.\\n            ordinals := mload(0x40)\\n            // Allocate the memory.\\n            mstore(0x40, ptr)\\n            // Store the length of `ordinals`.\\n            mstore(ordinals, shr(5, sub(ptr, add(ordinals, 0x20))))\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Modifiers\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Marks a function as only callable by the owner.\\n    modifier onlyOwner() virtual {\\n        assembly {\\n            // If the caller is not the stored owner, revert.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`.\\n    modifier onlyRoles(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by the owner or by an account\\n    /// with `roles`. Checks for ownership first, then lazily checks for roles.\\n    modifier onlyOwnerOrRoles(uint256 roles) virtual {\\n        assembly {\\n            // If the caller is not the stored owner.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                // Compute the role slot.\\n                mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n                // Load the stored value, and if the `and` intersection\\n                // of the value and `roles` is zero, revert.\\n                if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`\\n    /// or the owner. Checks for roles first, then lazily checks for ownership.\\n    modifier onlyRolesOrOwner(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                // If the caller is not the stored owner.\\n                if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Role Constants\\n    /// -----------------------------------------------------------------------\\n\\n    uint256 internal constant _ROLE_0 = 1 << 0;\\n    uint256 internal constant _ROLE_1 = 1 << 1;\\n    uint256 internal constant _ROLE_2 = 1 << 2;\\n    uint256 internal constant _ROLE_3 = 1 << 3;\\n    uint256 internal constant _ROLE_4 = 1 << 4;\\n    uint256 internal constant _ROLE_5 = 1 << 5;\\n    uint256 internal constant _ROLE_6 = 1 << 6;\\n    uint256 internal constant _ROLE_7 = 1 << 7;\\n    uint256 internal constant _ROLE_8 = 1 << 8;\\n    uint256 internal constant _ROLE_9 = 1 << 9;\\n    uint256 internal constant _ROLE_10 = 1 << 10;\\n    uint256 internal constant _ROLE_11 = 1 << 11;\\n    uint256 internal constant _ROLE_12 = 1 << 12;\\n    uint256 internal constant _ROLE_13 = 1 << 13;\\n    uint256 internal constant _ROLE_14 = 1 << 14;\\n    uint256 internal constant _ROLE_15 = 1 << 15;\\n    uint256 internal constant _ROLE_16 = 1 << 16;\\n    uint256 internal constant _ROLE_17 = 1 << 17;\\n    uint256 internal constant _ROLE_18 = 1 << 18;\\n    uint256 internal constant _ROLE_19 = 1 << 19;\\n    uint256 internal constant _ROLE_20 = 1 << 20;\\n    uint256 internal constant _ROLE_21 = 1 << 21;\\n    uint256 internal constant _ROLE_22 = 1 << 22;\\n    uint256 internal constant _ROLE_23 = 1 << 23;\\n    uint256 internal constant _ROLE_24 = 1 << 24;\\n    uint256 internal constant _ROLE_25 = 1 << 25;\\n    uint256 internal constant _ROLE_26 = 1 << 26;\\n    uint256 internal constant _ROLE_27 = 1 << 27;\\n    uint256 internal constant _ROLE_28 = 1 << 28;\\n    uint256 internal constant _ROLE_29 = 1 << 29;\\n    uint256 internal constant _ROLE_30 = 1 << 30;\\n    uint256 internal constant _ROLE_31 = 1 << 31;\\n    uint256 internal constant _ROLE_32 = 1 << 32;\\n    uint256 internal constant _ROLE_33 = 1 << 33;\\n    uint256 internal constant _ROLE_34 = 1 << 34;\\n    uint256 internal constant _ROLE_35 = 1 << 35;\\n    uint256 internal constant _ROLE_36 = 1 << 36;\\n    uint256 internal constant _ROLE_37 = 1 << 37;\\n    uint256 internal constant _ROLE_38 = 1 << 38;\\n    uint256 internal constant _ROLE_39 = 1 << 39;\\n    uint256 internal constant _ROLE_40 = 1 << 40;\\n    uint256 internal constant _ROLE_41 = 1 << 41;\\n    uint256 internal constant _ROLE_42 = 1 << 42;\\n    uint256 internal constant _ROLE_43 = 1 << 43;\\n    uint256 internal constant _ROLE_44 = 1 << 44;\\n    uint256 internal constant _ROLE_45 = 1 << 45;\\n    uint256 internal constant _ROLE_46 = 1 << 46;\\n    uint256 internal constant _ROLE_47 = 1 << 47;\\n    uint256 internal constant _ROLE_48 = 1 << 48;\\n    uint256 internal constant _ROLE_49 = 1 << 49;\\n    uint256 internal constant _ROLE_50 = 1 << 50;\\n    uint256 internal constant _ROLE_51 = 1 << 51;\\n    uint256 internal constant _ROLE_52 = 1 << 52;\\n    uint256 internal constant _ROLE_53 = 1 << 53;\\n    uint256 internal constant _ROLE_54 = 1 << 54;\\n    uint256 internal constant _ROLE_55 = 1 << 55;\\n    uint256 internal constant _ROLE_56 = 1 << 56;\\n    uint256 internal constant _ROLE_57 = 1 << 57;\\n    uint256 internal constant _ROLE_58 = 1 << 58;\\n    uint256 internal constant _ROLE_59 = 1 << 59;\\n    uint256 internal constant _ROLE_60 = 1 << 60;\\n    uint256 internal constant _ROLE_61 = 1 << 61;\\n    uint256 internal constant _ROLE_62 = 1 << 62;\\n    uint256 internal constant _ROLE_63 = 1 << 63;\\n    uint256 internal constant _ROLE_64 = 1 << 64;\\n    uint256 internal constant _ROLE_65 = 1 << 65;\\n    uint256 internal constant _ROLE_66 = 1 << 66;\\n    uint256 internal constant _ROLE_67 = 1 << 67;\\n    uint256 internal constant _ROLE_68 = 1 << 68;\\n    uint256 internal constant _ROLE_69 = 1 << 69;\\n    uint256 internal constant _ROLE_70 = 1 << 70;\\n    uint256 internal constant _ROLE_71 = 1 << 71;\\n    uint256 internal constant _ROLE_72 = 1 << 72;\\n    uint256 internal constant _ROLE_73 = 1 << 73;\\n    uint256 internal constant _ROLE_74 = 1 << 74;\\n    uint256 internal constant _ROLE_75 = 1 << 75;\\n    uint256 internal constant _ROLE_76 = 1 << 76;\\n    uint256 internal constant _ROLE_77 = 1 << 77;\\n    uint256 internal constant _ROLE_78 = 1 << 78;\\n    uint256 internal constant _ROLE_79 = 1 << 79;\\n    uint256 internal constant _ROLE_80 = 1 << 80;\\n    uint256 internal constant _ROLE_81 = 1 << 81;\\n    uint256 internal constant _ROLE_82 = 1 << 82;\\n    uint256 internal constant _ROLE_83 = 1 << 83;\\n    uint256 internal constant _ROLE_84 = 1 << 84;\\n    uint256 internal constant _ROLE_85 = 1 << 85;\\n    uint256 internal constant _ROLE_86 = 1 << 86;\\n    uint256 internal constant _ROLE_87 = 1 << 87;\\n    uint256 internal constant _ROLE_88 = 1 << 88;\\n    uint256 internal constant _ROLE_89 = 1 << 89;\\n    uint256 internal constant _ROLE_90 = 1 << 90;\\n    uint256 internal constant _ROLE_91 = 1 << 91;\\n    uint256 internal constant _ROLE_92 = 1 << 92;\\n    uint256 internal constant _ROLE_93 = 1 << 93;\\n    uint256 internal constant _ROLE_94 = 1 << 94;\\n    uint256 internal constant _ROLE_95 = 1 << 95;\\n    uint256 internal constant _ROLE_96 = 1 << 96;\\n    uint256 internal constant _ROLE_97 = 1 << 97;\\n    uint256 internal constant _ROLE_98 = 1 << 98;\\n    uint256 internal constant _ROLE_99 = 1 << 99;\\n    uint256 internal constant _ROLE_100 = 1 << 100;\\n    uint256 internal constant _ROLE_101 = 1 << 101;\\n    uint256 internal constant _ROLE_102 = 1 << 102;\\n    uint256 internal constant _ROLE_103 = 1 << 103;\\n    uint256 internal constant _ROLE_104 = 1 << 104;\\n    uint256 internal constant _ROLE_105 = 1 << 105;\\n    uint256 internal constant _ROLE_106 = 1 << 106;\\n    uint256 internal constant _ROLE_107 = 1 << 107;\\n    uint256 internal constant _ROLE_108 = 1 << 108;\\n    uint256 internal constant _ROLE_109 = 1 << 109;\\n    uint256 internal constant _ROLE_110 = 1 << 110;\\n    uint256 internal constant _ROLE_111 = 1 << 111;\\n    uint256 internal constant _ROLE_112 = 1 << 112;\\n    uint256 internal constant _ROLE_113 = 1 << 113;\\n    uint256 internal constant _ROLE_114 = 1 << 114;\\n    uint256 internal constant _ROLE_115 = 1 << 115;\\n    uint256 internal constant _ROLE_116 = 1 << 116;\\n    uint256 internal constant _ROLE_117 = 1 << 117;\\n    uint256 internal constant _ROLE_118 = 1 << 118;\\n    uint256 internal constant _ROLE_119 = 1 << 119;\\n    uint256 internal constant _ROLE_120 = 1 << 120;\\n    uint256 internal constant _ROLE_121 = 1 << 121;\\n    uint256 internal constant _ROLE_122 = 1 << 122;\\n    uint256 internal constant _ROLE_123 = 1 << 123;\\n    uint256 internal constant _ROLE_124 = 1 << 124;\\n    uint256 internal constant _ROLE_125 = 1 << 125;\\n    uint256 internal constant _ROLE_126 = 1 << 126;\\n    uint256 internal constant _ROLE_127 = 1 << 127;\\n    uint256 internal constant _ROLE_128 = 1 << 128;\\n    uint256 internal constant _ROLE_129 = 1 << 129;\\n    uint256 internal constant _ROLE_130 = 1 << 130;\\n    uint256 internal constant _ROLE_131 = 1 << 131;\\n    uint256 internal constant _ROLE_132 = 1 << 132;\\n    uint256 internal constant _ROLE_133 = 1 << 133;\\n    uint256 internal constant _ROLE_134 = 1 << 134;\\n    uint256 internal constant _ROLE_135 = 1 << 135;\\n    uint256 internal constant _ROLE_136 = 1 << 136;\\n    uint256 internal constant _ROLE_137 = 1 << 137;\\n    uint256 internal constant _ROLE_138 = 1 << 138;\\n    uint256 internal constant _ROLE_139 = 1 << 139;\\n    uint256 internal constant _ROLE_140 = 1 << 140;\\n    uint256 internal constant _ROLE_141 = 1 << 141;\\n    uint256 internal constant _ROLE_142 = 1 << 142;\\n    uint256 internal constant _ROLE_143 = 1 << 143;\\n    uint256 internal constant _ROLE_144 = 1 << 144;\\n    uint256 internal constant _ROLE_145 = 1 << 145;\\n    uint256 internal constant _ROLE_146 = 1 << 146;\\n    uint256 internal constant _ROLE_147 = 1 << 147;\\n    uint256 internal constant _ROLE_148 = 1 << 148;\\n    uint256 internal constant _ROLE_149 = 1 << 149;\\n    uint256 internal constant _ROLE_150 = 1 << 150;\\n    uint256 internal constant _ROLE_151 = 1 << 151;\\n    uint256 internal constant _ROLE_152 = 1 << 152;\\n    uint256 internal constant _ROLE_153 = 1 << 153;\\n    uint256 internal constant _ROLE_154 = 1 << 154;\\n    uint256 internal constant _ROLE_155 = 1 << 155;\\n    uint256 internal constant _ROLE_156 = 1 << 156;\\n    uint256 internal constant _ROLE_157 = 1 << 157;\\n    uint256 internal constant _ROLE_158 = 1 << 158;\\n    uint256 internal constant _ROLE_159 = 1 << 159;\\n    uint256 internal constant _ROLE_160 = 1 << 160;\\n    uint256 internal constant _ROLE_161 = 1 << 161;\\n    uint256 internal constant _ROLE_162 = 1 << 162;\\n    uint256 internal constant _ROLE_163 = 1 << 163;\\n    uint256 internal constant _ROLE_164 = 1 << 164;\\n    uint256 internal constant _ROLE_165 = 1 << 165;\\n    uint256 internal constant _ROLE_166 = 1 << 166;\\n    uint256 internal constant _ROLE_167 = 1 << 167;\\n    uint256 internal constant _ROLE_168 = 1 << 168;\\n    uint256 internal constant _ROLE_169 = 1 << 169;\\n    uint256 internal constant _ROLE_170 = 1 << 170;\\n    uint256 internal constant _ROLE_171 = 1 << 171;\\n    uint256 internal constant _ROLE_172 = 1 << 172;\\n    uint256 internal constant _ROLE_173 = 1 << 173;\\n    uint256 internal constant _ROLE_174 = 1 << 174;\\n    uint256 internal constant _ROLE_175 = 1 << 175;\\n    uint256 internal constant _ROLE_176 = 1 << 176;\\n    uint256 internal constant _ROLE_177 = 1 << 177;\\n    uint256 internal constant _ROLE_178 = 1 << 178;\\n    uint256 internal constant _ROLE_179 = 1 << 179;\\n    uint256 internal constant _ROLE_180 = 1 << 180;\\n    uint256 internal constant _ROLE_181 = 1 << 181;\\n    uint256 internal constant _ROLE_182 = 1 << 182;\\n    uint256 internal constant _ROLE_183 = 1 << 183;\\n    uint256 internal constant _ROLE_184 = 1 << 184;\\n    uint256 internal constant _ROLE_185 = 1 << 185;\\n    uint256 internal constant _ROLE_186 = 1 << 186;\\n    uint256 internal constant _ROLE_187 = 1 << 187;\\n    uint256 internal constant _ROLE_188 = 1 << 188;\\n    uint256 internal constant _ROLE_189 = 1 << 189;\\n    uint256 internal constant _ROLE_190 = 1 << 190;\\n    uint256 internal constant _ROLE_191 = 1 << 191;\\n    uint256 internal constant _ROLE_192 = 1 << 192;\\n    uint256 internal constant _ROLE_193 = 1 << 193;\\n    uint256 internal constant _ROLE_194 = 1 << 194;\\n    uint256 internal constant _ROLE_195 = 1 << 195;\\n    uint256 internal constant _ROLE_196 = 1 << 196;\\n    uint256 internal constant _ROLE_197 = 1 << 197;\\n    uint256 internal constant _ROLE_198 = 1 << 198;\\n    uint256 internal constant _ROLE_199 = 1 << 199;\\n    uint256 internal constant _ROLE_200 = 1 << 200;\\n    uint256 internal constant _ROLE_201 = 1 << 201;\\n    uint256 internal constant _ROLE_202 = 1 << 202;\\n    uint256 internal constant _ROLE_203 = 1 << 203;\\n    uint256 internal constant _ROLE_204 = 1 << 204;\\n    uint256 internal constant _ROLE_205 = 1 << 205;\\n    uint256 internal constant _ROLE_206 = 1 << 206;\\n    uint256 internal constant _ROLE_207 = 1 << 207;\\n    uint256 internal constant _ROLE_208 = 1 << 208;\\n    uint256 internal constant _ROLE_209 = 1 << 209;\\n    uint256 internal constant _ROLE_210 = 1 << 210;\\n    uint256 internal constant _ROLE_211 = 1 << 211;\\n    uint256 internal constant _ROLE_212 = 1 << 212;\\n    uint256 internal constant _ROLE_213 = 1 << 213;\\n    uint256 internal constant _ROLE_214 = 1 << 214;\\n    uint256 internal constant _ROLE_215 = 1 << 215;\\n    uint256 internal constant _ROLE_216 = 1 << 216;\\n    uint256 internal constant _ROLE_217 = 1 << 217;\\n    uint256 internal constant _ROLE_218 = 1 << 218;\\n    uint256 internal constant _ROLE_219 = 1 << 219;\\n    uint256 internal constant _ROLE_220 = 1 << 220;\\n    uint256 internal constant _ROLE_221 = 1 << 221;\\n    uint256 internal constant _ROLE_222 = 1 << 222;\\n    uint256 internal constant _ROLE_223 = 1 << 223;\\n    uint256 internal constant _ROLE_224 = 1 << 224;\\n    uint256 internal constant _ROLE_225 = 1 << 225;\\n    uint256 internal constant _ROLE_226 = 1 << 226;\\n    uint256 internal constant _ROLE_227 = 1 << 227;\\n    uint256 internal constant _ROLE_228 = 1 << 228;\\n    uint256 internal constant _ROLE_229 = 1 << 229;\\n    uint256 internal constant _ROLE_230 = 1 << 230;\\n    uint256 internal constant _ROLE_231 = 1 << 231;\\n    uint256 internal constant _ROLE_232 = 1 << 232;\\n    uint256 internal constant _ROLE_233 = 1 << 233;\\n    uint256 internal constant _ROLE_234 = 1 << 234;\\n    uint256 internal constant _ROLE_235 = 1 << 235;\\n    uint256 internal constant _ROLE_236 = 1 << 236;\\n    uint256 internal constant _ROLE_237 = 1 << 237;\\n    uint256 internal constant _ROLE_238 = 1 << 238;\\n    uint256 internal constant _ROLE_239 = 1 << 239;\\n    uint256 internal constant _ROLE_240 = 1 << 240;\\n    uint256 internal constant _ROLE_241 = 1 << 241;\\n    uint256 internal constant _ROLE_242 = 1 << 242;\\n    uint256 internal constant _ROLE_243 = 1 << 243;\\n    uint256 internal constant _ROLE_244 = 1 << 244;\\n    uint256 internal constant _ROLE_245 = 1 << 245;\\n    uint256 internal constant _ROLE_246 = 1 << 246;\\n    uint256 internal constant _ROLE_247 = 1 << 247;\\n    uint256 internal constant _ROLE_248 = 1 << 248;\\n    uint256 internal constant _ROLE_249 = 1 << 249;\\n    uint256 internal constant _ROLE_250 = 1 << 250;\\n    uint256 internal constant _ROLE_251 = 1 << 251;\\n    uint256 internal constant _ROLE_252 = 1 << 252;\\n    uint256 internal constant _ROLE_253 = 1 << 253;\\n    uint256 internal constant _ROLE_254 = 1 << 254;\\n    uint256 internal constant _ROLE_255 = 1 << 255;\\n}\\n\",\"keccak256\":\"0x27a1c151d748174587f74b79b7c42274ecaa722d100e473d750a8b4704addcfd\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Simple single owner and multiroles authorization mixin.",
            "version": 1
          }
        }
      },
      "@turbo-eth/solbase-sol/src/utils/Base64.sol": {
        "Base64": {
          "abi": [],
          "devdoc": {
            "author": "SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204b39918ca69559d89bf41689d507a057758508a66852f9131d5fd12ce5c6955864736f6c634300080f0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B CODECOPY SWAP2 DUP13 0xA6 SWAP6 MSIZE 0xD8 SWAP12 DELEGATECALL AND DUP10 0xD5 SMOD LOG0 JUMPI PUSH22 0x8508A66852F9131D5FD12CE5C6955864736F6C634300 ADDMOD 0xF STOP CALLER ",
              "sourceMap": "307:7008:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;307:7008:3;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204b39918ca69559d89bf41689d507a057758508a66852f9131d5fd12ce5c6955864736f6c634300080f0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B CODECOPY SWAP2 DUP13 0xA6 SWAP6 MSIZE 0xD8 SWAP12 DELEGATECALL AND DUP10 0xD5 SMOD LOG0 JUMPI PUSH22 0x8508A66852F9131D5FD12CE5C6955864736F6C634300 ADDMOD 0xF STOP CALLER ",
              "sourceMap": "307:7008:3:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "decode(string memory)": "infinite",
                "encode(bytes memory)": "infinite",
                "encode(bytes memory,bool)": "infinite",
                "encode(bytes memory,bool,bool)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to encode and decode strings in Base64.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@turbo-eth/solbase-sol/src/utils/Base64.sol\":\"Base64\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@turbo-eth/solbase-sol/src/utils/Base64.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Library to encode and decode strings in Base64.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\\nlibrary Base64 {\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// See: https://datatracker.ietf.org/doc/html/rfc4648\\n    /// @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\\n    /// @param noPadding Whether to strip away the padding.\\n    function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                // Multiply by 4/3 rounded up.\\n                // The `shl(2, ...)` is equivalent to multiplying by 4.\\n                let encodedLength := shl(2, div(add(dataLength, 2), 3))\\n\\n                // Set `result` to point to the start of the free memory.\\n                result := mload(0x40)\\n\\n                // Store the table into the scratch space.\\n                // Offsetted by -1 byte so that the `mload` will load the character.\\n                // We will rewrite the free memory pointer at `0x40` later with\\n                // the allocated size.\\n                // The magic constant 0x0230 will translate \\\"-_\\\" + \\\"+/\\\".\\n                mstore(0x1f, \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef\\\")\\n                mstore(0x3f, sub(\\\"ghijklmnopqrstuvwxyz0123456789-_\\\", mul(iszero(fileSafe), 0x0230)))\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n                let end := add(ptr, encodedLength)\\n\\n                // Run over the input, 3 bytes at a time.\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    data := add(data, 3) // Advance 3 bytes.\\n                    let input := mload(data)\\n\\n                    // Write 4 bytes. Optimized for fewer stack operations.\\n                    mstore8(    ptr    , mload(and(shr(18, input), 0x3F)))\\n                    mstore8(add(ptr, 1), mload(and(shr(12, input), 0x3F)))\\n                    mstore8(add(ptr, 2), mload(and(shr( 6, input), 0x3F)))\\n                    mstore8(add(ptr, 3), mload(and(        input , 0x3F)))\\n                    \\n                    ptr := add(ptr, 4) // Advance 4 bytes.\\n                    // prettier-ignore\\n                    if iszero(lt(ptr, end)) { break }\\n                }\\n\\n                let r := mod(dataLength, 3)\\n\\n                switch noPadding\\n                case 0 {\\n                    // Offset `ptr` and pad with '='. We can simply write over the end.\\n                    mstore8(sub(ptr, iszero(iszero(r))), 0x3d) // Pad at `ptr - 1` if `r > 0`.\\n                    mstore8(sub(ptr, shl(1, eq(r, 1))), 0x3d) // Pad at `ptr - 2` if `r == 1`.\\n                    // Write the length of the string.\\n                    mstore(result, encodedLength)\\n                }\\n                default {\\n                    // Write the length of the string.\\n                    mstore(result, sub(encodedLength, add(iszero(iszero(r)), eq(r, 1))))\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(end, 31), not(31)))\\n            }\\n        }\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, false, false)`.\\n    function encode(bytes memory data) internal pure returns (string memory result) {\\n        result = encode(data, false, false);\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, fileSafe, false)`.\\n    function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) {\\n        result = encode(data, fileSafe, false);\\n    }\\n\\n    /// @dev Decodes base64 encoded `data`.\\n    ///\\n    /// Supports:\\n    /// - RFC 4648 (both standard and file-safe mode).\\n    /// - RFC 3501 (63: ',').\\n    ///\\n    /// Does not support:\\n    /// - Line breaks.\\n    ///\\n    /// Note: For performance reasons,\\n    /// this function will NOT revert on invalid `data` inputs.\\n    /// Outputs for invalid inputs will simply be undefined behaviour.\\n    /// It is the user's responsibility to ensure that the `data`\\n    /// is a valid base64 encoded string.\\n    function decode(string memory data) internal pure returns (bytes memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                let end := add(data, dataLength)\\n                let decodedLength := mul(shr(2, dataLength), 3)\\n\\n                switch and(dataLength, 3)\\n                case 0 {\\n                    // If padded.\\n                    decodedLength := sub(\\n                        decodedLength,\\n                        add(eq(and(mload(end), 0xFF), 0x3d), eq(and(mload(end), 0xFFFF), 0x3d3d))\\n                    )\\n                }\\n                default {\\n                    // If non-padded.\\n                    decodedLength := add(decodedLength, sub(and(dataLength, 3), 1))\\n                }\\n\\n                result := mload(0x40)\\n\\n                // Write the length of the string.\\n                mstore(result, decodedLength)\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n\\n                // Load the table into the scratch space.\\n                // Constants are optimized for smaller bytecode with zero gas overhead.\\n                // `m` also doubles as the mask of the upper 6 bits.\\n                let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc\\n                mstore(0x5b, m)\\n                mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064)\\n                mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4)\\n\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    // Read 4 bytes.\\n                    data := add(data, 4)\\n                    let input := mload(data)\\n\\n                    // Write 3 bytes.\\n                    mstore(ptr, or(\\n                        and(m, mload(byte(28, input))),\\n                        shr(6, or(\\n                            and(m, mload(byte(29, input))),\\n                            shr(6, or(\\n                                and(m, mload(byte(30, input))),\\n                                shr(6, mload(byte(31, input)))\\n                            ))\\n                        ))\\n                    ))\\n\\n                    ptr := add(ptr, 3)\\n                    \\n                    // prettier-ignore\\n                    if iszero(lt(data, end)) { break }\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 32 + 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(add(result, decodedLength), 63), not(31)))\\n\\n                // Restore the zero slot.\\n                mstore(0x60, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xeed3c8ce53e43c0aecded4dbb14327519335596e4c742f8bc775c224538cd23e\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Library to encode and decode strings in Base64.",
            "version": 1
          }
        }
      },
      "contracts/ERC721K.sol": {
        "ERC721K": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyMinted",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidRecipient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NewOwnerIsZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoHandoverRequest",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotAuthorized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotMinted",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnsafeRecipient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "WrongFrom",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "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": "address",
                  "name": "erc721Storage",
                  "type": "address"
                }
              ],
              "name": "ERC721StorageUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverCanceled",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "oldOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "RolesUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "cancelOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "completeOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "contractURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getERC721Storage",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "grantRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAllRoles",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAnyRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "ordinalsFromRoles",
              "outputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "result",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "ownershipHandoverExpiresAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "result",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ownershipHandoverValidFor",
              "outputs": [
                {
                  "internalType": "uint64",
                  "name": "",
                  "type": "uint64"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "renounceRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "revokeRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "name": "rolesFromOrdinals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                }
              ],
              "name": "rolesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "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": "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": "address",
                  "name": "erc721Storage",
                  "type": "address"
                }
              ],
              "name": "setStorage",
              "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": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Kames Geraghty",
            "errors": {
              "NewOwnerIsZeroAddress()": [
                {
                  "details": "The `newOwner` cannot be the zero address."
                }
              ],
              "NoHandoverRequest()": [
                {
                  "details": "The `pendingOwner` does not have a valid handover request."
                }
              ],
              "Unauthorized()": [
                {
                  "details": "The caller is not authorized to call the function."
                }
              ]
            },
            "kind": "dev",
            "methods": {
              "cancelOwnershipHandover()": {
                "details": "Cancels the two-step ownership handover to the caller, if any."
              },
              "completeOwnershipHandover(address)": {
                "details": "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
              },
              "constructor": {
                "params": {
                  "_erc721Storage_": "address - Metadata instance",
                  "name_": "string - Name of ERC721 token",
                  "symbol_": "string - Symbol of ERC721 token"
                }
              },
              "grantRoles(address,uint256)": {
                "details": "Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role."
              },
              "hasAllRoles(address,uint256)": {
                "details": "Returns whether `user` has all of `roles`."
              },
              "hasAnyRole(address,uint256)": {
                "details": "Returns whether `user` has any of `roles`."
              },
              "ordinalsFromRoles(uint256)": {
                "details": "Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "owner()": {
                "details": "Returns the owner of the contract."
              },
              "ownershipHandoverExpiresAt(address)": {
                "details": "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
              },
              "ownershipHandoverValidFor()": {
                "details": "Returns how long a two-step ownership handover is valid for in seconds."
              },
              "renounceOwnership()": {
                "details": "Allows the owner to renounce their ownership."
              },
              "renounceRoles(uint256)": {
                "details": "Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role."
              },
              "requestOwnershipHandover()": {
                "details": "Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default."
              },
              "revokeRoles(address,uint256)": {
                "details": "Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role."
              },
              "rolesFromOrdinals(uint8[])": {
                "details": "Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "rolesOf(address)": {
                "details": "Returns the roles of `user`."
              },
              "transferOwnership(address)": {
                "details": "Allows the owner to transfer the ownership to `newOwner`."
              }
            },
            "title": "ERC721K",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "cancelOwnershipHandover()": "54d1f13d",
              "completeOwnershipHandover(address)": "f04e283e",
              "contractURI()": "e8a3d485",
              "getApproved(uint256)": "081812fc",
              "getERC721Storage()": "87a89ee6",
              "grantRoles(address,uint256)": "1c10893f",
              "hasAllRoles(address,uint256)": "1cd64df4",
              "hasAnyRole(address,uint256)": "514e62fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ordinalsFromRoles(uint256)": "7359e41f",
              "owner()": "8da5cb5b",
              "ownerOf(uint256)": "6352211e",
              "ownershipHandoverExpiresAt(address)": "fee81cf4",
              "ownershipHandoverValidFor()": "d7533f02",
              "renounceOwnership()": "715018a6",
              "renounceRoles(uint256)": "183a4f6e",
              "requestOwnershipHandover()": "25692962",
              "revokeRoles(address,uint256)": "4a4ee7b1",
              "rolesFromOrdinals(uint8[])": "13a661ed",
              "rolesOf(address)": "2de94807",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "setStorage(address)": "9137c1a7",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsafeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongFrom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"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\":\"address\",\"name\":\"erc721Storage\",\"type\":\"address\"}],\"name\":\"ERC721StorageUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"RolesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERC721Storage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"grantRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAllRoles\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAnyRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"ordinalsFromRoles\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownershipHandoverValidFor\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"renounceRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"revokeRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"name\":\"rolesFromOrdinals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rolesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"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\":\"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\":\"address\",\"name\":\"erc721Storage\",\"type\":\"address\"}],\"name\":\"setStorage\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Kames Geraghty\",\"errors\":{\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"kind\":\"dev\",\"methods\":{\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"constructor\":{\"params\":{\"_erc721Storage_\":\"address - Metadata instance\",\"name_\":\"string - Name of ERC721 token\",\"symbol_\":\"string - Symbol of ERC721 token\"}},\"grantRoles(address,uint256)\":{\"details\":\"Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role.\"},\"hasAllRoles(address,uint256)\":{\"details\":\"Returns whether `user` has all of `roles`.\"},\"hasAnyRole(address,uint256)\":{\"details\":\"Returns whether `user` has any of `roles`.\"},\"ordinalsFromRoles(uint256)\":{\"details\":\"Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"ownershipHandoverValidFor()\":{\"details\":\"Returns how long a two-step ownership handover is valid for in seconds.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"renounceRoles(uint256)\":{\"details\":\"Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default.\"},\"revokeRoles(address,uint256)\":{\"details\":\"Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role.\"},\"rolesFromOrdinals(uint8[])\":{\"details\":\"Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"rolesOf(address)\":{\"details\":\"Returns the roles of `user`.\"},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"title\":\"ERC721K\",\"version\":1},\"userdoc\":{\"errors\":{\"NotMinted()\":[{\"notice\":\"----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------\"}]},\"events\":{\"Transfer(address,address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- Events -----------------------------------------------------------------------\"}},\"kind\":\"user\",\"methods\":{\"approve(address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC721 Logic -----------------------------------------------------------------------\"},\"constructor\":{\"notice\":\"ERC721K Construction\"},\"getApproved(uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC721 Approval Storage -----------------------------------------------------------------------\"},\"name()\":{\"notice\":\"----------------------------------------------------------------------- Metadata Storage/Logic -----------------------------------------------------------------------\"},\"supportsInterface(bytes4)\":{\"notice\":\"----------------------------------------------------------------------- ERC165 Logic -----------------------------------------------------------------------\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC721K.sol\":\"ERC721K\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Simple single owner and multiroles authorization mixin.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\\n/// @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\\n/// for compatibility, the nomenclature for the 2-step ownership handover and roles\\n/// may be unique to this codebase.\\nabstract contract OwnedRoles {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.\\n    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be\\n    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\\n    /// despite it not being as lightweight as a single argument event.\\n    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\\n\\n    /// @dev An ownership handover to `pendingOwner` has been requested.\\n    event OwnershipHandoverRequested(address indexed pendingOwner);\\n\\n    /// @dev The ownership handover to `pendingOwner` has been canceled.\\n    event OwnershipHandoverCanceled(address indexed pendingOwner);\\n\\n    /// @dev The `user`'s roles is updated to `roles`.\\n    /// Each bit of `roles` represents whether the role is set.\\n    event RolesUpdated(address indexed user, uint256 indexed roles);\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipTransferred(address,address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =\\n        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverRequested(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =\\n        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverCanceled(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =\\n        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;\\n\\n    /// @dev `keccak256(bytes(\\\"RolesUpdated(address,uint256)\\\"))`.\\n    uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =\\n        0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The caller is not authorized to call the function.\\n    error Unauthorized();\\n\\n    /// @dev The `newOwner` cannot be the zero address.\\n    error NewOwnerIsZeroAddress();\\n\\n    /// @dev The `pendingOwner` does not have a valid handover request.\\n    error NoHandoverRequest();\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"Unauthorized()\\\")))`.\\n    uint256 private constant _UNAUTHORIZED_ERROR_SELECTOR = 0x82b42900;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NewOwnerIsZeroAddress()\\\")))`.\\n    uint256 private constant _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR = 0x7448fbae;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NoHandoverRequest()\\\")))`.\\n    uint256 private constant _NO_HANDOVER_REQUEST_ERROR_SELECTOR = 0x6f5e8818;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Storage\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\\n    /// It is intentionally choosen to be a high value\\n    /// to avoid collision with lower slots.\\n    /// The choice of manual storage layout is to enable compatibility\\n    /// with both regular and upgradeable contracts.\\n    ///\\n    /// The role slot of `user` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n    ///     let roleSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// This automatically ignores the upper bits of the `user` in case\\n    /// they are not clean, as well as keep the `keccak256` under 32-bytes.\\n    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;\\n\\n    /// The ownership handover slot of `newOwner` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\\n    ///     let handoverSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// It stores the expiry timestamp of the two-step ownership handover.\\n    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Initializes the owner directly without authorization guard.\\n    /// This function must be called upon initialization,\\n    /// regardless of whether the contract is upgradeable or not.\\n    /// This is to enable generalization to both regular and upgradeable contracts,\\n    /// and to save gas in case the initial owner is not the caller.\\n    /// For performance reasons, this function will not check if there\\n    /// is an existing owner.\\n    function _initializeOwner(address newOwner) internal virtual {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)\\n        }\\n    }\\n\\n    /// @dev Sets the owner directly without authorization guard.\\n    function _setOwner(address newOwner) internal virtual {\\n        assembly {\\n            let ownerSlot := not(_OWNER_SLOT_NOT)\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)\\n            // Store the new value.\\n            sstore(ownerSlot, newOwner)\\n        }\\n    }\\n\\n    /// @dev Grants the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn on.\\n    function _grantRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value and `or` it with `roles`.\\n            let newRoles := or(sload(roleSlot), roles)\\n            // Store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// @dev Removes the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn off.\\n    function _removeRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value.\\n            let currentRoles := sload(roleSlot)\\n            // Use `and` to compute the intersection of `currentRoles` and `roles`,\\n            // `xor` it with `currentRoles` to flip the bits in the intersection.\\n            let newRoles := xor(currentRoles, and(currentRoles, roles))\\n            // Then, store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Update Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Allows the owner to transfer the ownership to `newOwner`.\\n    function transferOwnership(address newOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Reverts if the `newOwner` is the zero address.\\n            if iszero(newOwner) {\\n                mstore(0x00, _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), newOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to renounce their ownership.\\n    function renounceOwnership() public payable virtual onlyOwner {\\n        assembly {\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), 0)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), 0)\\n        }\\n    }\\n\\n    /// @dev Request a two-step ownership handover to the caller.\\n    /// The request will be automatically expire in 48 hours (172800 seconds) by default.\\n    function requestOwnershipHandover() public payable virtual {\\n        unchecked {\\n            uint256 expires = block.timestamp + ownershipHandoverValidFor();\\n            assembly {\\n                // Compute and set the handover slot to 1.\\n                mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n                sstore(keccak256(0x00, 0x20), expires)\\n                // Emit the {OwnershipHandoverRequested} event.\\n                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())\\n            }\\n        }\\n    }\\n\\n    /// @dev Cancels the two-step ownership handover to the caller, if any.\\n    function cancelOwnershipHandover() public payable virtual {\\n        assembly {\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n            sstore(keccak256(0x00, 0x20), 0)\\n            // Emit the {OwnershipHandoverCanceled} event.\\n            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())\\n        }\\n    }\\n\\n    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\\n    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.\\n    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            pendingOwner := shr(96, shl(96, pendingOwner))\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            let handoverSlot := keccak256(0x00, 0x20)\\n            // If the handover does not exist, or has expired.\\n            if gt(timestamp(), sload(handoverSlot)) {\\n                mstore(0x00, _NO_HANDOVER_REQUEST_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Set the handover slot to 0.\\n            sstore(handoverSlot, 0)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), pendingOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), pendingOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to grant `user` `roles`.\\n    /// If the `user` already has a role, then it will be an no-op for the role.\\n    function grantRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _grantRoles(user, roles);\\n    }\\n\\n    /// @dev Allows the owner to remove `user` `roles`.\\n    /// If the `user` does not have a role, then it will be an no-op for the role.\\n    function revokeRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _removeRoles(user, roles);\\n    }\\n\\n    /// @dev Allow the caller to remove their own roles.\\n    /// If the caller does not have a role, then it will be an no-op for the role.\\n    function renounceRoles(uint256 roles) public payable virtual {\\n        _removeRoles(msg.sender, roles);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Read Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Returns the owner of the contract.\\n    function owner() public view virtual returns (address result) {\\n        assembly {\\n            result := sload(not(_OWNER_SLOT_NOT))\\n        }\\n    }\\n\\n    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\\n    function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) {\\n        assembly {\\n            // Compute the handover slot.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            // Load the handover slot.\\n            result := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Returns how long a two-step ownership handover is valid for in seconds.\\n    function ownershipHandoverValidFor() public view virtual returns (uint64) {\\n        return 48 * 3600;\\n    }\\n\\n    /// @dev Returns whether `user` has any of `roles`.\\n    function hasAnyRole(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value, and set the result to whether the\\n            // `and` intersection of the value and `roles` is not zero.\\n            result := iszero(iszero(and(sload(keccak256(0x00, 0x20)), roles)))\\n        }\\n    }\\n\\n    /// @dev Returns whether `user` has all of `roles`.\\n    function hasAllRoles(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Whether the stored value is contains all the set bits in `roles`.\\n            result := eq(and(sload(keccak256(0x00, 0x20)), roles), roles)\\n        }\\n    }\\n\\n    /// @dev Returns the roles of `user`.\\n    function rolesOf(address user) public view virtual returns (uint256 roles) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value.\\n            roles := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function rolesFromOrdinals(uint8[] memory ordinals) public pure returns (uint256 roles) {\\n        assembly {\\n            // Skip the length slot.\\n            let o := add(ordinals, 0x20)\\n            // `shl` 5 is equivalent to multiplying by 0x20.\\n            let end := add(o, shl(5, mload(ordinals)))\\n            // prettier-ignore\\n            for {} iszero(eq(o, end)) { o := add(o, 0x20) } {\\n                roles := or(roles, shl(and(mload(o), 0xff), 1))\\n            }\\n        }\\n    }\\n\\n    /// @dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function ordinalsFromRoles(uint256 roles) public pure returns (uint8[] memory ordinals) {\\n        assembly {\\n            // Grab the pointer to the free memory.\\n            let ptr := add(mload(0x40), 0x20)\\n            // The absence of lookup tables, De Bruijn, etc., here is intentional for\\n            // smaller bytecode, as this function is not meant to be called on-chain.\\n            // prettier-ignore\\n            for { let i := 0 } 1 { i := add(i, 1) } {\\n                mstore(ptr, i)\\n                // `shr` 5 is equivalent to multiplying by 0x20.\\n                // Push back into the ordinals array if the bit is set.\\n                ptr := add(ptr, shl(5, and(roles, 1)))\\n                roles := shr(1, roles)\\n                // prettier-ignore\\n                if iszero(roles) { break }\\n            }\\n            // Set `ordinals` to the start of the free memory.\\n            ordinals := mload(0x40)\\n            // Allocate the memory.\\n            mstore(0x40, ptr)\\n            // Store the length of `ordinals`.\\n            mstore(ordinals, shr(5, sub(ptr, add(ordinals, 0x20))))\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Modifiers\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Marks a function as only callable by the owner.\\n    modifier onlyOwner() virtual {\\n        assembly {\\n            // If the caller is not the stored owner, revert.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`.\\n    modifier onlyRoles(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by the owner or by an account\\n    /// with `roles`. Checks for ownership first, then lazily checks for roles.\\n    modifier onlyOwnerOrRoles(uint256 roles) virtual {\\n        assembly {\\n            // If the caller is not the stored owner.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                // Compute the role slot.\\n                mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n                // Load the stored value, and if the `and` intersection\\n                // of the value and `roles` is zero, revert.\\n                if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`\\n    /// or the owner. Checks for roles first, then lazily checks for ownership.\\n    modifier onlyRolesOrOwner(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                // If the caller is not the stored owner.\\n                if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Role Constants\\n    /// -----------------------------------------------------------------------\\n\\n    uint256 internal constant _ROLE_0 = 1 << 0;\\n    uint256 internal constant _ROLE_1 = 1 << 1;\\n    uint256 internal constant _ROLE_2 = 1 << 2;\\n    uint256 internal constant _ROLE_3 = 1 << 3;\\n    uint256 internal constant _ROLE_4 = 1 << 4;\\n    uint256 internal constant _ROLE_5 = 1 << 5;\\n    uint256 internal constant _ROLE_6 = 1 << 6;\\n    uint256 internal constant _ROLE_7 = 1 << 7;\\n    uint256 internal constant _ROLE_8 = 1 << 8;\\n    uint256 internal constant _ROLE_9 = 1 << 9;\\n    uint256 internal constant _ROLE_10 = 1 << 10;\\n    uint256 internal constant _ROLE_11 = 1 << 11;\\n    uint256 internal constant _ROLE_12 = 1 << 12;\\n    uint256 internal constant _ROLE_13 = 1 << 13;\\n    uint256 internal constant _ROLE_14 = 1 << 14;\\n    uint256 internal constant _ROLE_15 = 1 << 15;\\n    uint256 internal constant _ROLE_16 = 1 << 16;\\n    uint256 internal constant _ROLE_17 = 1 << 17;\\n    uint256 internal constant _ROLE_18 = 1 << 18;\\n    uint256 internal constant _ROLE_19 = 1 << 19;\\n    uint256 internal constant _ROLE_20 = 1 << 20;\\n    uint256 internal constant _ROLE_21 = 1 << 21;\\n    uint256 internal constant _ROLE_22 = 1 << 22;\\n    uint256 internal constant _ROLE_23 = 1 << 23;\\n    uint256 internal constant _ROLE_24 = 1 << 24;\\n    uint256 internal constant _ROLE_25 = 1 << 25;\\n    uint256 internal constant _ROLE_26 = 1 << 26;\\n    uint256 internal constant _ROLE_27 = 1 << 27;\\n    uint256 internal constant _ROLE_28 = 1 << 28;\\n    uint256 internal constant _ROLE_29 = 1 << 29;\\n    uint256 internal constant _ROLE_30 = 1 << 30;\\n    uint256 internal constant _ROLE_31 = 1 << 31;\\n    uint256 internal constant _ROLE_32 = 1 << 32;\\n    uint256 internal constant _ROLE_33 = 1 << 33;\\n    uint256 internal constant _ROLE_34 = 1 << 34;\\n    uint256 internal constant _ROLE_35 = 1 << 35;\\n    uint256 internal constant _ROLE_36 = 1 << 36;\\n    uint256 internal constant _ROLE_37 = 1 << 37;\\n    uint256 internal constant _ROLE_38 = 1 << 38;\\n    uint256 internal constant _ROLE_39 = 1 << 39;\\n    uint256 internal constant _ROLE_40 = 1 << 40;\\n    uint256 internal constant _ROLE_41 = 1 << 41;\\n    uint256 internal constant _ROLE_42 = 1 << 42;\\n    uint256 internal constant _ROLE_43 = 1 << 43;\\n    uint256 internal constant _ROLE_44 = 1 << 44;\\n    uint256 internal constant _ROLE_45 = 1 << 45;\\n    uint256 internal constant _ROLE_46 = 1 << 46;\\n    uint256 internal constant _ROLE_47 = 1 << 47;\\n    uint256 internal constant _ROLE_48 = 1 << 48;\\n    uint256 internal constant _ROLE_49 = 1 << 49;\\n    uint256 internal constant _ROLE_50 = 1 << 50;\\n    uint256 internal constant _ROLE_51 = 1 << 51;\\n    uint256 internal constant _ROLE_52 = 1 << 52;\\n    uint256 internal constant _ROLE_53 = 1 << 53;\\n    uint256 internal constant _ROLE_54 = 1 << 54;\\n    uint256 internal constant _ROLE_55 = 1 << 55;\\n    uint256 internal constant _ROLE_56 = 1 << 56;\\n    uint256 internal constant _ROLE_57 = 1 << 57;\\n    uint256 internal constant _ROLE_58 = 1 << 58;\\n    uint256 internal constant _ROLE_59 = 1 << 59;\\n    uint256 internal constant _ROLE_60 = 1 << 60;\\n    uint256 internal constant _ROLE_61 = 1 << 61;\\n    uint256 internal constant _ROLE_62 = 1 << 62;\\n    uint256 internal constant _ROLE_63 = 1 << 63;\\n    uint256 internal constant _ROLE_64 = 1 << 64;\\n    uint256 internal constant _ROLE_65 = 1 << 65;\\n    uint256 internal constant _ROLE_66 = 1 << 66;\\n    uint256 internal constant _ROLE_67 = 1 << 67;\\n    uint256 internal constant _ROLE_68 = 1 << 68;\\n    uint256 internal constant _ROLE_69 = 1 << 69;\\n    uint256 internal constant _ROLE_70 = 1 << 70;\\n    uint256 internal constant _ROLE_71 = 1 << 71;\\n    uint256 internal constant _ROLE_72 = 1 << 72;\\n    uint256 internal constant _ROLE_73 = 1 << 73;\\n    uint256 internal constant _ROLE_74 = 1 << 74;\\n    uint256 internal constant _ROLE_75 = 1 << 75;\\n    uint256 internal constant _ROLE_76 = 1 << 76;\\n    uint256 internal constant _ROLE_77 = 1 << 77;\\n    uint256 internal constant _ROLE_78 = 1 << 78;\\n    uint256 internal constant _ROLE_79 = 1 << 79;\\n    uint256 internal constant _ROLE_80 = 1 << 80;\\n    uint256 internal constant _ROLE_81 = 1 << 81;\\n    uint256 internal constant _ROLE_82 = 1 << 82;\\n    uint256 internal constant _ROLE_83 = 1 << 83;\\n    uint256 internal constant _ROLE_84 = 1 << 84;\\n    uint256 internal constant _ROLE_85 = 1 << 85;\\n    uint256 internal constant _ROLE_86 = 1 << 86;\\n    uint256 internal constant _ROLE_87 = 1 << 87;\\n    uint256 internal constant _ROLE_88 = 1 << 88;\\n    uint256 internal constant _ROLE_89 = 1 << 89;\\n    uint256 internal constant _ROLE_90 = 1 << 90;\\n    uint256 internal constant _ROLE_91 = 1 << 91;\\n    uint256 internal constant _ROLE_92 = 1 << 92;\\n    uint256 internal constant _ROLE_93 = 1 << 93;\\n    uint256 internal constant _ROLE_94 = 1 << 94;\\n    uint256 internal constant _ROLE_95 = 1 << 95;\\n    uint256 internal constant _ROLE_96 = 1 << 96;\\n    uint256 internal constant _ROLE_97 = 1 << 97;\\n    uint256 internal constant _ROLE_98 = 1 << 98;\\n    uint256 internal constant _ROLE_99 = 1 << 99;\\n    uint256 internal constant _ROLE_100 = 1 << 100;\\n    uint256 internal constant _ROLE_101 = 1 << 101;\\n    uint256 internal constant _ROLE_102 = 1 << 102;\\n    uint256 internal constant _ROLE_103 = 1 << 103;\\n    uint256 internal constant _ROLE_104 = 1 << 104;\\n    uint256 internal constant _ROLE_105 = 1 << 105;\\n    uint256 internal constant _ROLE_106 = 1 << 106;\\n    uint256 internal constant _ROLE_107 = 1 << 107;\\n    uint256 internal constant _ROLE_108 = 1 << 108;\\n    uint256 internal constant _ROLE_109 = 1 << 109;\\n    uint256 internal constant _ROLE_110 = 1 << 110;\\n    uint256 internal constant _ROLE_111 = 1 << 111;\\n    uint256 internal constant _ROLE_112 = 1 << 112;\\n    uint256 internal constant _ROLE_113 = 1 << 113;\\n    uint256 internal constant _ROLE_114 = 1 << 114;\\n    uint256 internal constant _ROLE_115 = 1 << 115;\\n    uint256 internal constant _ROLE_116 = 1 << 116;\\n    uint256 internal constant _ROLE_117 = 1 << 117;\\n    uint256 internal constant _ROLE_118 = 1 << 118;\\n    uint256 internal constant _ROLE_119 = 1 << 119;\\n    uint256 internal constant _ROLE_120 = 1 << 120;\\n    uint256 internal constant _ROLE_121 = 1 << 121;\\n    uint256 internal constant _ROLE_122 = 1 << 122;\\n    uint256 internal constant _ROLE_123 = 1 << 123;\\n    uint256 internal constant _ROLE_124 = 1 << 124;\\n    uint256 internal constant _ROLE_125 = 1 << 125;\\n    uint256 internal constant _ROLE_126 = 1 << 126;\\n    uint256 internal constant _ROLE_127 = 1 << 127;\\n    uint256 internal constant _ROLE_128 = 1 << 128;\\n    uint256 internal constant _ROLE_129 = 1 << 129;\\n    uint256 internal constant _ROLE_130 = 1 << 130;\\n    uint256 internal constant _ROLE_131 = 1 << 131;\\n    uint256 internal constant _ROLE_132 = 1 << 132;\\n    uint256 internal constant _ROLE_133 = 1 << 133;\\n    uint256 internal constant _ROLE_134 = 1 << 134;\\n    uint256 internal constant _ROLE_135 = 1 << 135;\\n    uint256 internal constant _ROLE_136 = 1 << 136;\\n    uint256 internal constant _ROLE_137 = 1 << 137;\\n    uint256 internal constant _ROLE_138 = 1 << 138;\\n    uint256 internal constant _ROLE_139 = 1 << 139;\\n    uint256 internal constant _ROLE_140 = 1 << 140;\\n    uint256 internal constant _ROLE_141 = 1 << 141;\\n    uint256 internal constant _ROLE_142 = 1 << 142;\\n    uint256 internal constant _ROLE_143 = 1 << 143;\\n    uint256 internal constant _ROLE_144 = 1 << 144;\\n    uint256 internal constant _ROLE_145 = 1 << 145;\\n    uint256 internal constant _ROLE_146 = 1 << 146;\\n    uint256 internal constant _ROLE_147 = 1 << 147;\\n    uint256 internal constant _ROLE_148 = 1 << 148;\\n    uint256 internal constant _ROLE_149 = 1 << 149;\\n    uint256 internal constant _ROLE_150 = 1 << 150;\\n    uint256 internal constant _ROLE_151 = 1 << 151;\\n    uint256 internal constant _ROLE_152 = 1 << 152;\\n    uint256 internal constant _ROLE_153 = 1 << 153;\\n    uint256 internal constant _ROLE_154 = 1 << 154;\\n    uint256 internal constant _ROLE_155 = 1 << 155;\\n    uint256 internal constant _ROLE_156 = 1 << 156;\\n    uint256 internal constant _ROLE_157 = 1 << 157;\\n    uint256 internal constant _ROLE_158 = 1 << 158;\\n    uint256 internal constant _ROLE_159 = 1 << 159;\\n    uint256 internal constant _ROLE_160 = 1 << 160;\\n    uint256 internal constant _ROLE_161 = 1 << 161;\\n    uint256 internal constant _ROLE_162 = 1 << 162;\\n    uint256 internal constant _ROLE_163 = 1 << 163;\\n    uint256 internal constant _ROLE_164 = 1 << 164;\\n    uint256 internal constant _ROLE_165 = 1 << 165;\\n    uint256 internal constant _ROLE_166 = 1 << 166;\\n    uint256 internal constant _ROLE_167 = 1 << 167;\\n    uint256 internal constant _ROLE_168 = 1 << 168;\\n    uint256 internal constant _ROLE_169 = 1 << 169;\\n    uint256 internal constant _ROLE_170 = 1 << 170;\\n    uint256 internal constant _ROLE_171 = 1 << 171;\\n    uint256 internal constant _ROLE_172 = 1 << 172;\\n    uint256 internal constant _ROLE_173 = 1 << 173;\\n    uint256 internal constant _ROLE_174 = 1 << 174;\\n    uint256 internal constant _ROLE_175 = 1 << 175;\\n    uint256 internal constant _ROLE_176 = 1 << 176;\\n    uint256 internal constant _ROLE_177 = 1 << 177;\\n    uint256 internal constant _ROLE_178 = 1 << 178;\\n    uint256 internal constant _ROLE_179 = 1 << 179;\\n    uint256 internal constant _ROLE_180 = 1 << 180;\\n    uint256 internal constant _ROLE_181 = 1 << 181;\\n    uint256 internal constant _ROLE_182 = 1 << 182;\\n    uint256 internal constant _ROLE_183 = 1 << 183;\\n    uint256 internal constant _ROLE_184 = 1 << 184;\\n    uint256 internal constant _ROLE_185 = 1 << 185;\\n    uint256 internal constant _ROLE_186 = 1 << 186;\\n    uint256 internal constant _ROLE_187 = 1 << 187;\\n    uint256 internal constant _ROLE_188 = 1 << 188;\\n    uint256 internal constant _ROLE_189 = 1 << 189;\\n    uint256 internal constant _ROLE_190 = 1 << 190;\\n    uint256 internal constant _ROLE_191 = 1 << 191;\\n    uint256 internal constant _ROLE_192 = 1 << 192;\\n    uint256 internal constant _ROLE_193 = 1 << 193;\\n    uint256 internal constant _ROLE_194 = 1 << 194;\\n    uint256 internal constant _ROLE_195 = 1 << 195;\\n    uint256 internal constant _ROLE_196 = 1 << 196;\\n    uint256 internal constant _ROLE_197 = 1 << 197;\\n    uint256 internal constant _ROLE_198 = 1 << 198;\\n    uint256 internal constant _ROLE_199 = 1 << 199;\\n    uint256 internal constant _ROLE_200 = 1 << 200;\\n    uint256 internal constant _ROLE_201 = 1 << 201;\\n    uint256 internal constant _ROLE_202 = 1 << 202;\\n    uint256 internal constant _ROLE_203 = 1 << 203;\\n    uint256 internal constant _ROLE_204 = 1 << 204;\\n    uint256 internal constant _ROLE_205 = 1 << 205;\\n    uint256 internal constant _ROLE_206 = 1 << 206;\\n    uint256 internal constant _ROLE_207 = 1 << 207;\\n    uint256 internal constant _ROLE_208 = 1 << 208;\\n    uint256 internal constant _ROLE_209 = 1 << 209;\\n    uint256 internal constant _ROLE_210 = 1 << 210;\\n    uint256 internal constant _ROLE_211 = 1 << 211;\\n    uint256 internal constant _ROLE_212 = 1 << 212;\\n    uint256 internal constant _ROLE_213 = 1 << 213;\\n    uint256 internal constant _ROLE_214 = 1 << 214;\\n    uint256 internal constant _ROLE_215 = 1 << 215;\\n    uint256 internal constant _ROLE_216 = 1 << 216;\\n    uint256 internal constant _ROLE_217 = 1 << 217;\\n    uint256 internal constant _ROLE_218 = 1 << 218;\\n    uint256 internal constant _ROLE_219 = 1 << 219;\\n    uint256 internal constant _ROLE_220 = 1 << 220;\\n    uint256 internal constant _ROLE_221 = 1 << 221;\\n    uint256 internal constant _ROLE_222 = 1 << 222;\\n    uint256 internal constant _ROLE_223 = 1 << 223;\\n    uint256 internal constant _ROLE_224 = 1 << 224;\\n    uint256 internal constant _ROLE_225 = 1 << 225;\\n    uint256 internal constant _ROLE_226 = 1 << 226;\\n    uint256 internal constant _ROLE_227 = 1 << 227;\\n    uint256 internal constant _ROLE_228 = 1 << 228;\\n    uint256 internal constant _ROLE_229 = 1 << 229;\\n    uint256 internal constant _ROLE_230 = 1 << 230;\\n    uint256 internal constant _ROLE_231 = 1 << 231;\\n    uint256 internal constant _ROLE_232 = 1 << 232;\\n    uint256 internal constant _ROLE_233 = 1 << 233;\\n    uint256 internal constant _ROLE_234 = 1 << 234;\\n    uint256 internal constant _ROLE_235 = 1 << 235;\\n    uint256 internal constant _ROLE_236 = 1 << 236;\\n    uint256 internal constant _ROLE_237 = 1 << 237;\\n    uint256 internal constant _ROLE_238 = 1 << 238;\\n    uint256 internal constant _ROLE_239 = 1 << 239;\\n    uint256 internal constant _ROLE_240 = 1 << 240;\\n    uint256 internal constant _ROLE_241 = 1 << 241;\\n    uint256 internal constant _ROLE_242 = 1 << 242;\\n    uint256 internal constant _ROLE_243 = 1 << 243;\\n    uint256 internal constant _ROLE_244 = 1 << 244;\\n    uint256 internal constant _ROLE_245 = 1 << 245;\\n    uint256 internal constant _ROLE_246 = 1 << 246;\\n    uint256 internal constant _ROLE_247 = 1 << 247;\\n    uint256 internal constant _ROLE_248 = 1 << 248;\\n    uint256 internal constant _ROLE_249 = 1 << 249;\\n    uint256 internal constant _ROLE_250 = 1 << 250;\\n    uint256 internal constant _ROLE_251 = 1 << 251;\\n    uint256 internal constant _ROLE_252 = 1 << 252;\\n    uint256 internal constant _ROLE_253 = 1 << 253;\\n    uint256 internal constant _ROLE_254 = 1 << 254;\\n    uint256 internal constant _ROLE_255 = 1 << 255;\\n}\\n\",\"keccak256\":\"0x27a1c151d748174587f74b79b7c42274ecaa722d100e473d750a8b4704addcfd\",\"license\":\"MIT\"},\"@turbo-eth/solbase-sol/src/utils/Base64.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Library to encode and decode strings in Base64.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\\nlibrary Base64 {\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// See: https://datatracker.ietf.org/doc/html/rfc4648\\n    /// @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\\n    /// @param noPadding Whether to strip away the padding.\\n    function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                // Multiply by 4/3 rounded up.\\n                // The `shl(2, ...)` is equivalent to multiplying by 4.\\n                let encodedLength := shl(2, div(add(dataLength, 2), 3))\\n\\n                // Set `result` to point to the start of the free memory.\\n                result := mload(0x40)\\n\\n                // Store the table into the scratch space.\\n                // Offsetted by -1 byte so that the `mload` will load the character.\\n                // We will rewrite the free memory pointer at `0x40` later with\\n                // the allocated size.\\n                // The magic constant 0x0230 will translate \\\"-_\\\" + \\\"+/\\\".\\n                mstore(0x1f, \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef\\\")\\n                mstore(0x3f, sub(\\\"ghijklmnopqrstuvwxyz0123456789-_\\\", mul(iszero(fileSafe), 0x0230)))\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n                let end := add(ptr, encodedLength)\\n\\n                // Run over the input, 3 bytes at a time.\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    data := add(data, 3) // Advance 3 bytes.\\n                    let input := mload(data)\\n\\n                    // Write 4 bytes. Optimized for fewer stack operations.\\n                    mstore8(    ptr    , mload(and(shr(18, input), 0x3F)))\\n                    mstore8(add(ptr, 1), mload(and(shr(12, input), 0x3F)))\\n                    mstore8(add(ptr, 2), mload(and(shr( 6, input), 0x3F)))\\n                    mstore8(add(ptr, 3), mload(and(        input , 0x3F)))\\n                    \\n                    ptr := add(ptr, 4) // Advance 4 bytes.\\n                    // prettier-ignore\\n                    if iszero(lt(ptr, end)) { break }\\n                }\\n\\n                let r := mod(dataLength, 3)\\n\\n                switch noPadding\\n                case 0 {\\n                    // Offset `ptr` and pad with '='. We can simply write over the end.\\n                    mstore8(sub(ptr, iszero(iszero(r))), 0x3d) // Pad at `ptr - 1` if `r > 0`.\\n                    mstore8(sub(ptr, shl(1, eq(r, 1))), 0x3d) // Pad at `ptr - 2` if `r == 1`.\\n                    // Write the length of the string.\\n                    mstore(result, encodedLength)\\n                }\\n                default {\\n                    // Write the length of the string.\\n                    mstore(result, sub(encodedLength, add(iszero(iszero(r)), eq(r, 1))))\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(end, 31), not(31)))\\n            }\\n        }\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, false, false)`.\\n    function encode(bytes memory data) internal pure returns (string memory result) {\\n        result = encode(data, false, false);\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, fileSafe, false)`.\\n    function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) {\\n        result = encode(data, fileSafe, false);\\n    }\\n\\n    /// @dev Decodes base64 encoded `data`.\\n    ///\\n    /// Supports:\\n    /// - RFC 4648 (both standard and file-safe mode).\\n    /// - RFC 3501 (63: ',').\\n    ///\\n    /// Does not support:\\n    /// - Line breaks.\\n    ///\\n    /// Note: For performance reasons,\\n    /// this function will NOT revert on invalid `data` inputs.\\n    /// Outputs for invalid inputs will simply be undefined behaviour.\\n    /// It is the user's responsibility to ensure that the `data`\\n    /// is a valid base64 encoded string.\\n    function decode(string memory data) internal pure returns (bytes memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                let end := add(data, dataLength)\\n                let decodedLength := mul(shr(2, dataLength), 3)\\n\\n                switch and(dataLength, 3)\\n                case 0 {\\n                    // If padded.\\n                    decodedLength := sub(\\n                        decodedLength,\\n                        add(eq(and(mload(end), 0xFF), 0x3d), eq(and(mload(end), 0xFFFF), 0x3d3d))\\n                    )\\n                }\\n                default {\\n                    // If non-padded.\\n                    decodedLength := add(decodedLength, sub(and(dataLength, 3), 1))\\n                }\\n\\n                result := mload(0x40)\\n\\n                // Write the length of the string.\\n                mstore(result, decodedLength)\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n\\n                // Load the table into the scratch space.\\n                // Constants are optimized for smaller bytecode with zero gas overhead.\\n                // `m` also doubles as the mask of the upper 6 bits.\\n                let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc\\n                mstore(0x5b, m)\\n                mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064)\\n                mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4)\\n\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    // Read 4 bytes.\\n                    data := add(data, 4)\\n                    let input := mload(data)\\n\\n                    // Write 3 bytes.\\n                    mstore(ptr, or(\\n                        and(m, mload(byte(28, input))),\\n                        shr(6, or(\\n                            and(m, mload(byte(29, input))),\\n                            shr(6, or(\\n                                and(m, mload(byte(30, input))),\\n                                shr(6, mload(byte(31, input)))\\n                            ))\\n                        ))\\n                    ))\\n\\n                    ptr := add(ptr, 3)\\n                    \\n                    // prettier-ignore\\n                    if iszero(lt(data, end)) { break }\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 32 + 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(add(result, decodedLength), 63), not(31)))\\n\\n                // Restore the zero slot.\\n                mstore(0x60, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xeed3c8ce53e43c0aecded4dbb14327519335596e4c742f8bc775c224538cd23e\",\"license\":\"MIT\"},\"contracts/ERC721K.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\nimport { ERC721 } from \\\"./helpers/ERC721.sol\\\";\\nimport { OwnedRoles } from \\\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\\\";\\nimport { ERC721Storage } from \\\"./ERC721Storage.sol\\\";\\n\\n/**\\n * @title ERC721K\\n * @author Kames Geraghty\\n */\\nabstract contract ERC721K is ERC721, OwnedRoles {\\n  /// @notice ID counter for ERC721 tokens\\n  uint256 internal _idCounter;\\n\\n  /// @notice ENSReverseRecords instance\\n  address internal _erc721Storage;\\n\\n  event ERC721StorageUpdated(address erc721Storage);\\n\\n  /**\\n   * @notice ERC721K Construction\\n   * @param name_ string - Name of ERC721 token\\n   * @param symbol_ string - Symbol of ERC721 token\\n   * @param _erc721Storage_ address - Metadata instance\\n   */\\n  constructor(\\n    string memory name_,\\n    string memory symbol_,\\n    address _erc721Storage_\\n  ) ERC721(name_, symbol_) {\\n    _erc721Storage = _erc721Storage_;\\n    _initializeOwner(msg.sender);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* EIP Functions                                                                     */\\n  /* ===================================================================================== */\\n  function supportsInterface(bytes4 interfaceId)\\n    public\\n    view\\n    virtual\\n    override(ERC721)\\n    returns (bool)\\n  {\\n    return super.supportsInterface(interfaceId);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* Virtual Functions                                                                     */\\n  /* ===================================================================================== */\\n  function _tokenData(uint256 tokenId)\\n    internal\\n    view\\n    virtual\\n    returns (bytes memory imageBytes, bytes memory traitsBytes);\\n\\n  /* ===================================================================================== */\\n  /* External Functions                                                                    */\\n  /* ===================================================================================== */\\n\\n  function contractURI() external view returns (string memory) {\\n    return ERC721Storage(_erc721Storage).constructContractURI();\\n  }\\n\\n  function totalSupply() external view returns (uint256) {\\n    return _idCounter;\\n  }\\n\\n  function getERC721Storage() external view returns (address) {\\n    return _erc721Storage;\\n  }\\n\\n  function tokenURI(uint256 tokenId) public view override returns (string memory) {\\n    (bytes memory imageBytes, bytes memory traitsBytes) = _tokenData(tokenId);\\n    return ERC721Storage(_erc721Storage).constructTokenURI(tokenId, imageBytes, traitsBytes);\\n  }\\n\\n  /* ====================================== */\\n  /* Writes\\n  /* ====================================== */\\n\\n  function setStorage(address erc721Storage) external onlyOwner {\\n    _erc721Storage = erc721Storage;\\n    emit ERC721StorageUpdated(erc721Storage);\\n  }\\n}\\n\",\"keccak256\":\"0x4c2f02ed5e4b30eb0b433a3f6a7ee24ff0790dea6150aa7064d622e32819f9c5\",\"license\":\"MIT\"},\"contracts/ERC721Storage.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.8.15;\\n\\nimport { Base64 } from \\\"@turbo-eth/solbase-sol/src/utils/Base64.sol\\\";\\nimport { OwnedRoles } from \\\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\\\";\\nimport { IERC721KImage } from \\\"./interfaces/IERC721KImage.sol\\\";\\nimport { IERC721KTraits } from \\\"./interfaces/IERC721KTraits.sol\\\";\\n\\n/**\\n * @title ERC721Storage\\n * @author Kames Geraghty\\n */\\nabstract contract ERC721Storage is OwnedRoles {\\n  address internal svgRenderInstance;\\n  address internal traitsFetchInstance;\\n  ContractURI internal _contractURI;\\n\\n  struct ContractURI {\\n    string name;\\n    string description;\\n    string image;\\n    string externalLink;\\n    string sellerFeeBasisPoints;\\n    string feeRecipient;\\n  }\\n\\n  event SvgRenderUpdated(address svgRender);\\n\\n  event TraitsFetchUpdated(address traitsFetch);\\n\\n  event ContractURIUpdated(ContractURI contractURI);\\n\\n  constructor(\\n    address svgRender_Instance,\\n    address traitsFetchInstance_,\\n    ContractURI memory _contractURI_\\n  ) OwnedRoles() {\\n    svgRenderInstance = svgRender_Instance;\\n    traitsFetchInstance = traitsFetchInstance_;\\n    _contractURI = _contractURI_;\\n    _initializeOwner(msg.sender);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* Virtual Functions                                                                     */\\n  /* ===================================================================================== */\\n\\n  function _parseName(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  function _parseDescription(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  /* ===================================================================================== */\\n  /* External Functions                                                                    */\\n  /* ===================================================================================== */\\n  function getERC721KRender() external view returns (address) {\\n    return svgRenderInstance;\\n  }\\n\\n  function getERC72KTraits() external view returns (address) {\\n    return traitsFetchInstance;\\n  }\\n\\n  function getContractDescription() external view returns (ContractURI memory) {\\n    return _contractURI;\\n  }\\n\\n  function render(bytes memory input) external view returns (string memory) {\\n    return IERC721KImage(svgRenderInstance).render(input);\\n  }\\n\\n  function constructTokenURI(\\n    uint256 tokenId,\\n    bytes memory input0,\\n    bytes memory input1\\n  ) external view virtual returns (string memory uri) {\\n    string memory image_ = IERC721KImage(svgRenderInstance).render(input0);\\n    string memory traits_ = IERC721KTraits(traitsFetchInstance).fetch(input1);\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _parseName(tokenId),\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _parseDescription(tokenId),\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                image_,\\n                '\\\",',\\n                '\\\"attributes\\\": [',\\n                traits_,\\n                \\\"]\\\",\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function constructContractURI() external view virtual returns (string memory uri) {\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _contractURI.name,\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _contractURI.description,\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                _contractURI.image,\\n                '\\\",',\\n                '\\\"externalLink\\\":',\\n                '\\\"',\\n                _contractURI.externalLink,\\n                '\\\",',\\n                '\\\"sellerFeeBasisPoints\\\":',\\n                '\\\"',\\n                _contractURI.sellerFeeBasisPoints,\\n                '\\\",',\\n                '\\\"feeRecipient\\\":',\\n                '\\\"',\\n                _contractURI.feeRecipient,\\n                '\\\"',\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function setSvgRender(address svgRender) external onlyOwner {\\n    svgRenderInstance = svgRender;\\n    emit SvgRenderUpdated(svgRender);\\n  }\\n\\n  function setTraitsFetch(address traitsFetch) external onlyOwner {\\n    traitsFetchInstance = traitsFetch;\\n    emit TraitsFetchUpdated(traitsFetch);\\n  }\\n\\n  function setContractURI(ContractURI memory contractURI) external onlyOwner {\\n    _contractURI = contractURI;\\n    emit ContractURIUpdated(contractURI);\\n  }\\n}\\n\",\"keccak256\":\"0x7705c2b846d59c00cd26341f54be5397e3cb37e1955e6fc6bd9daf85e86035ca\",\"license\":\"GPL-3.0\"},\"contracts/helpers/ERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Modern, minimalist, and gas-optimized ERC721 implementation.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721 {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 indexed id);\\n\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    error NotMinted();\\n\\n    error ZeroAddress();\\n\\n    error NotAuthorized();\\n\\n    error WrongFrom();\\n\\n    error InvalidRecipient();\\n\\n    error UnsafeRecipient();\\n\\n    error AlreadyMinted();\\n\\n    /// -----------------------------------------------------------------------\\n    /// Metadata Storage/Logic\\n    /// -----------------------------------------------------------------------\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    function tokenURI(uint256 id) public view virtual returns (string memory);\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Balance/Owner Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) internal _ownerOf;\\n\\n    mapping(address => uint256) internal _balanceOf;\\n\\n    function ownerOf(uint256 id) public view virtual returns (address owner) {\\n        if ((owner = _ownerOf[id]) == address(0)) revert NotMinted();\\n    }\\n\\n    function balanceOf(address owner) public view virtual returns (uint256) {\\n        if (owner == address(0)) revert ZeroAddress();\\n        return _balanceOf[owner];\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Approval Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) public getApproved;\\n\\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Constructor\\n    /// -----------------------------------------------------------------------\\n\\n    constructor(string memory _name, string memory _symbol) {\\n        name = _name;\\n        symbol = _symbol;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function approve(address spender, uint256 id) public virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) revert NotAuthorized();\\n\\n        getApproved[id] = spender;\\n\\n        emit Approval(owner, spender, id);\\n    }\\n\\n    function setApprovalForAll(address operator, bool approved) public virtual {\\n        isApprovedForAll[msg.sender][operator] = approved;\\n\\n        emit ApprovalForAll(msg.sender, operator, approved);\\n    }\\n\\n    function transferFrom(address from, address to, uint256 id) public virtual {\\n        if (from != _ownerOf[id]) revert WrongFrom();\\n\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[id])\\n            revert NotAuthorized();\\n\\n        // Underflow of the sender's balance is impossible because we check for\\n        // ownership above and the recipient's balance can't realistically overflow.\\n        unchecked {\\n            _balanceOf[from]--;\\n\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(from, to, id);\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC165 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\\n        return\\n            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165\\n            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721\\n            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Mint/Burn Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _mint(address to, uint256 id) internal virtual {\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (_ownerOf[id] != address(0)) revert AlreadyMinted();\\n\\n        // Counter overflow is incredibly unrealistic.\\n        unchecked {\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        emit Transfer(address(0), to, id);\\n    }\\n\\n    function _burn(uint256 id) internal virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (owner == address(0)) revert NotMinted();\\n\\n        // Ownership check above ensures no underflow.\\n        unchecked {\\n            _balanceOf[owner]--;\\n        }\\n\\n        delete _ownerOf[id];\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(owner, address(0), id);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Safe Mint Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _safeMint(address to, uint256 id) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function _safeMint(address to, uint256 id, bytes memory data) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n}\\n\\n/// @notice A generic interface for a contract which properly accepts ERC721 tokens.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721TokenReceiver {\\n    function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {\\n        return ERC721TokenReceiver.onERC721Received.selector;\\n    }\\n}\\n\",\"keccak256\":\"0x7032b7724daa41f1c7d6aab0b4247bb10c94b1f82089afe5a2bf468a39be3555\",\"license\":\"MIT\"},\"contracts/interfaces/IERC721KImage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KImage {\\n  function render(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x8474249915bfc50221f4431b8853338ae27e8847ac3ef563dda437dd809a8846\",\"license\":\"MIT\"},\"contracts/interfaces/IERC721KTraits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KTraits {\\n  enum DisplayType {\\n    Base,\\n    Generic,\\n    BoostNumber,\\n    BoostPercent,\\n    Number,\\n    Date\\n  }\\n\\n  function fetch(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xeea24a181f0175f89ed357503946fbbb39c92a1b2b4764268d4613a773f3c9ea\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3193,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "name",
                "offset": 0,
                "slot": "0",
                "type": "t_string_storage"
              },
              {
                "astId": 3195,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "symbol",
                "offset": 0,
                "slot": "1",
                "type": "t_string_storage"
              },
              {
                "astId": 3207,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "_ownerOf",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_uint256,t_address)"
              },
              {
                "astId": 3211,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "_balanceOf",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 3261,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "getApproved",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_uint256,t_address)"
              },
              {
                "astId": 3267,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "isApprovedForAll",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_bool))"
              },
              {
                "astId": 2718,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "_idCounter",
                "offset": 0,
                "slot": "6",
                "type": "t_uint256"
              },
              {
                "astId": 2721,
                "contract": "contracts/ERC721K.sol:ERC721K",
                "label": "_erc721Storage",
                "offset": 0,
                "slot": "7",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_bool))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => bool))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_bool)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_uint256,t_address)": {
                "encoding": "mapping",
                "key": "t_uint256",
                "label": "mapping(uint256 => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NotMinted()": [
                {
                  "notice": "----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------"
                }
              ]
            },
            "events": {
              "Transfer(address,address,uint256)": {
                "notice": "----------------------------------------------------------------------- Events -----------------------------------------------------------------------"
              }
            },
            "kind": "user",
            "methods": {
              "approve(address,uint256)": {
                "notice": "----------------------------------------------------------------------- ERC721 Logic -----------------------------------------------------------------------"
              },
              "constructor": {
                "notice": "ERC721K Construction"
              },
              "getApproved(uint256)": {
                "notice": "----------------------------------------------------------------------- ERC721 Approval Storage -----------------------------------------------------------------------"
              },
              "name()": {
                "notice": "----------------------------------------------------------------------- Metadata Storage/Logic -----------------------------------------------------------------------"
              },
              "supportsInterface(bytes4)": {
                "notice": "----------------------------------------------------------------------- ERC165 Logic -----------------------------------------------------------------------"
              }
            },
            "version": 1
          }
        }
      },
      "contracts/ERC721Storage.sol": {
        "ERC721Storage": {
          "abi": [
            {
              "inputs": [],
              "name": "NewOwnerIsZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoHandoverRequest",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "contractURI",
                  "type": "tuple"
                }
              ],
              "name": "ContractURIUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverCanceled",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "oldOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "RolesUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "svgRender",
                  "type": "address"
                }
              ],
              "name": "SvgRenderUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "traitsFetch",
                  "type": "address"
                }
              ],
              "name": "TraitsFetchUpdated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "cancelOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "completeOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "constructContractURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "input0",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "input1",
                  "type": "bytes"
                }
              ],
              "name": "constructTokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getContractDescription",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getERC721KRender",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getERC72KTraits",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "grantRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAllRoles",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAnyRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "ordinalsFromRoles",
              "outputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "result",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "ownershipHandoverExpiresAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "result",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ownershipHandoverValidFor",
              "outputs": [
                {
                  "internalType": "uint64",
                  "name": "",
                  "type": "uint64"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "input",
                  "type": "bytes"
                }
              ],
              "name": "render",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "renounceRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "revokeRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "name": "rolesFromOrdinals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                }
              ],
              "name": "rolesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "contractURI",
                  "type": "tuple"
                }
              ],
              "name": "setContractURI",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "svgRender",
                  "type": "address"
                }
              ],
              "name": "setSvgRender",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "traitsFetch",
                  "type": "address"
                }
              ],
              "name": "setTraitsFetch",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "Kames Geraghty",
            "errors": {
              "NewOwnerIsZeroAddress()": [
                {
                  "details": "The `newOwner` cannot be the zero address."
                }
              ],
              "NoHandoverRequest()": [
                {
                  "details": "The `pendingOwner` does not have a valid handover request."
                }
              ],
              "Unauthorized()": [
                {
                  "details": "The caller is not authorized to call the function."
                }
              ]
            },
            "kind": "dev",
            "methods": {
              "cancelOwnershipHandover()": {
                "details": "Cancels the two-step ownership handover to the caller, if any."
              },
              "completeOwnershipHandover(address)": {
                "details": "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
              },
              "grantRoles(address,uint256)": {
                "details": "Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role."
              },
              "hasAllRoles(address,uint256)": {
                "details": "Returns whether `user` has all of `roles`."
              },
              "hasAnyRole(address,uint256)": {
                "details": "Returns whether `user` has any of `roles`."
              },
              "ordinalsFromRoles(uint256)": {
                "details": "Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "owner()": {
                "details": "Returns the owner of the contract."
              },
              "ownershipHandoverExpiresAt(address)": {
                "details": "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
              },
              "ownershipHandoverValidFor()": {
                "details": "Returns how long a two-step ownership handover is valid for in seconds."
              },
              "renounceOwnership()": {
                "details": "Allows the owner to renounce their ownership."
              },
              "renounceRoles(uint256)": {
                "details": "Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role."
              },
              "requestOwnershipHandover()": {
                "details": "Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default."
              },
              "revokeRoles(address,uint256)": {
                "details": "Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role."
              },
              "rolesFromOrdinals(uint8[])": {
                "details": "Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "rolesOf(address)": {
                "details": "Returns the roles of `user`."
              },
              "transferOwnership(address)": {
                "details": "Allows the owner to transfer the ownership to `newOwner`."
              }
            },
            "title": "ERC721Storage",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "cancelOwnershipHandover()": "54d1f13d",
              "completeOwnershipHandover(address)": "f04e283e",
              "constructContractURI()": "725fa09c",
              "constructTokenURI(uint256,bytes,bytes)": "f0679616",
              "getContractDescription()": "d12bcb12",
              "getERC721KRender()": "a4cd8696",
              "getERC72KTraits()": "25c28b4a",
              "grantRoles(address,uint256)": "1c10893f",
              "hasAllRoles(address,uint256)": "1cd64df4",
              "hasAnyRole(address,uint256)": "514e62fc",
              "ordinalsFromRoles(uint256)": "7359e41f",
              "owner()": "8da5cb5b",
              "ownershipHandoverExpiresAt(address)": "fee81cf4",
              "ownershipHandoverValidFor()": "d7533f02",
              "render(bytes)": "316df61e",
              "renounceOwnership()": "715018a6",
              "renounceRoles(uint256)": "183a4f6e",
              "requestOwnershipHandover()": "25692962",
              "revokeRoles(address,uint256)": "4a4ee7b1",
              "rolesFromOrdinals(uint8[])": "13a661ed",
              "rolesOf(address)": "2de94807",
              "setContractURI((string,string,string,string,string,string))": "57e30f44",
              "setSvgRender(address)": "ae70ed13",
              "setTraitsFetch(address)": "3ee6fa92",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"contractURI\",\"type\":\"tuple\"}],\"name\":\"ContractURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"RolesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"svgRender\",\"type\":\"address\"}],\"name\":\"SvgRenderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"traitsFetch\",\"type\":\"address\"}],\"name\":\"TraitsFetchUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"constructContractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"input0\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"input1\",\"type\":\"bytes\"}],\"name\":\"constructTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractDescription\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERC721KRender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERC72KTraits\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"grantRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAllRoles\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAnyRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"ordinalsFromRoles\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownershipHandoverValidFor\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"render\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"renounceRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"revokeRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"name\":\"rolesFromOrdinals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rolesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"contractURI\",\"type\":\"tuple\"}],\"name\":\"setContractURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"svgRender\",\"type\":\"address\"}],\"name\":\"setSvgRender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"traitsFetch\",\"type\":\"address\"}],\"name\":\"setTraitsFetch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Kames Geraghty\",\"errors\":{\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"kind\":\"dev\",\"methods\":{\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"grantRoles(address,uint256)\":{\"details\":\"Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role.\"},\"hasAllRoles(address,uint256)\":{\"details\":\"Returns whether `user` has all of `roles`.\"},\"hasAnyRole(address,uint256)\":{\"details\":\"Returns whether `user` has any of `roles`.\"},\"ordinalsFromRoles(uint256)\":{\"details\":\"Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"ownershipHandoverValidFor()\":{\"details\":\"Returns how long a two-step ownership handover is valid for in seconds.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"renounceRoles(uint256)\":{\"details\":\"Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default.\"},\"revokeRoles(address,uint256)\":{\"details\":\"Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role.\"},\"rolesFromOrdinals(uint8[])\":{\"details\":\"Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"rolesOf(address)\":{\"details\":\"Returns the roles of `user`.\"},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"title\":\"ERC721Storage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC721Storage.sol\":\"ERC721Storage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Simple single owner and multiroles authorization mixin.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\\n/// @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\\n/// for compatibility, the nomenclature for the 2-step ownership handover and roles\\n/// may be unique to this codebase.\\nabstract contract OwnedRoles {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.\\n    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be\\n    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\\n    /// despite it not being as lightweight as a single argument event.\\n    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\\n\\n    /// @dev An ownership handover to `pendingOwner` has been requested.\\n    event OwnershipHandoverRequested(address indexed pendingOwner);\\n\\n    /// @dev The ownership handover to `pendingOwner` has been canceled.\\n    event OwnershipHandoverCanceled(address indexed pendingOwner);\\n\\n    /// @dev The `user`'s roles is updated to `roles`.\\n    /// Each bit of `roles` represents whether the role is set.\\n    event RolesUpdated(address indexed user, uint256 indexed roles);\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipTransferred(address,address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =\\n        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverRequested(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =\\n        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverCanceled(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =\\n        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;\\n\\n    /// @dev `keccak256(bytes(\\\"RolesUpdated(address,uint256)\\\"))`.\\n    uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =\\n        0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The caller is not authorized to call the function.\\n    error Unauthorized();\\n\\n    /// @dev The `newOwner` cannot be the zero address.\\n    error NewOwnerIsZeroAddress();\\n\\n    /// @dev The `pendingOwner` does not have a valid handover request.\\n    error NoHandoverRequest();\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"Unauthorized()\\\")))`.\\n    uint256 private constant _UNAUTHORIZED_ERROR_SELECTOR = 0x82b42900;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NewOwnerIsZeroAddress()\\\")))`.\\n    uint256 private constant _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR = 0x7448fbae;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NoHandoverRequest()\\\")))`.\\n    uint256 private constant _NO_HANDOVER_REQUEST_ERROR_SELECTOR = 0x6f5e8818;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Storage\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\\n    /// It is intentionally choosen to be a high value\\n    /// to avoid collision with lower slots.\\n    /// The choice of manual storage layout is to enable compatibility\\n    /// with both regular and upgradeable contracts.\\n    ///\\n    /// The role slot of `user` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n    ///     let roleSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// This automatically ignores the upper bits of the `user` in case\\n    /// they are not clean, as well as keep the `keccak256` under 32-bytes.\\n    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;\\n\\n    /// The ownership handover slot of `newOwner` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\\n    ///     let handoverSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// It stores the expiry timestamp of the two-step ownership handover.\\n    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Initializes the owner directly without authorization guard.\\n    /// This function must be called upon initialization,\\n    /// regardless of whether the contract is upgradeable or not.\\n    /// This is to enable generalization to both regular and upgradeable contracts,\\n    /// and to save gas in case the initial owner is not the caller.\\n    /// For performance reasons, this function will not check if there\\n    /// is an existing owner.\\n    function _initializeOwner(address newOwner) internal virtual {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)\\n        }\\n    }\\n\\n    /// @dev Sets the owner directly without authorization guard.\\n    function _setOwner(address newOwner) internal virtual {\\n        assembly {\\n            let ownerSlot := not(_OWNER_SLOT_NOT)\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)\\n            // Store the new value.\\n            sstore(ownerSlot, newOwner)\\n        }\\n    }\\n\\n    /// @dev Grants the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn on.\\n    function _grantRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value and `or` it with `roles`.\\n            let newRoles := or(sload(roleSlot), roles)\\n            // Store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// @dev Removes the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn off.\\n    function _removeRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value.\\n            let currentRoles := sload(roleSlot)\\n            // Use `and` to compute the intersection of `currentRoles` and `roles`,\\n            // `xor` it with `currentRoles` to flip the bits in the intersection.\\n            let newRoles := xor(currentRoles, and(currentRoles, roles))\\n            // Then, store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Update Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Allows the owner to transfer the ownership to `newOwner`.\\n    function transferOwnership(address newOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Reverts if the `newOwner` is the zero address.\\n            if iszero(newOwner) {\\n                mstore(0x00, _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), newOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to renounce their ownership.\\n    function renounceOwnership() public payable virtual onlyOwner {\\n        assembly {\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), 0)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), 0)\\n        }\\n    }\\n\\n    /// @dev Request a two-step ownership handover to the caller.\\n    /// The request will be automatically expire in 48 hours (172800 seconds) by default.\\n    function requestOwnershipHandover() public payable virtual {\\n        unchecked {\\n            uint256 expires = block.timestamp + ownershipHandoverValidFor();\\n            assembly {\\n                // Compute and set the handover slot to 1.\\n                mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n                sstore(keccak256(0x00, 0x20), expires)\\n                // Emit the {OwnershipHandoverRequested} event.\\n                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())\\n            }\\n        }\\n    }\\n\\n    /// @dev Cancels the two-step ownership handover to the caller, if any.\\n    function cancelOwnershipHandover() public payable virtual {\\n        assembly {\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n            sstore(keccak256(0x00, 0x20), 0)\\n            // Emit the {OwnershipHandoverCanceled} event.\\n            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())\\n        }\\n    }\\n\\n    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\\n    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.\\n    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            pendingOwner := shr(96, shl(96, pendingOwner))\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            let handoverSlot := keccak256(0x00, 0x20)\\n            // If the handover does not exist, or has expired.\\n            if gt(timestamp(), sload(handoverSlot)) {\\n                mstore(0x00, _NO_HANDOVER_REQUEST_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Set the handover slot to 0.\\n            sstore(handoverSlot, 0)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), pendingOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), pendingOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to grant `user` `roles`.\\n    /// If the `user` already has a role, then it will be an no-op for the role.\\n    function grantRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _grantRoles(user, roles);\\n    }\\n\\n    /// @dev Allows the owner to remove `user` `roles`.\\n    /// If the `user` does not have a role, then it will be an no-op for the role.\\n    function revokeRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _removeRoles(user, roles);\\n    }\\n\\n    /// @dev Allow the caller to remove their own roles.\\n    /// If the caller does not have a role, then it will be an no-op for the role.\\n    function renounceRoles(uint256 roles) public payable virtual {\\n        _removeRoles(msg.sender, roles);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Read Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Returns the owner of the contract.\\n    function owner() public view virtual returns (address result) {\\n        assembly {\\n            result := sload(not(_OWNER_SLOT_NOT))\\n        }\\n    }\\n\\n    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\\n    function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) {\\n        assembly {\\n            // Compute the handover slot.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            // Load the handover slot.\\n            result := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Returns how long a two-step ownership handover is valid for in seconds.\\n    function ownershipHandoverValidFor() public view virtual returns (uint64) {\\n        return 48 * 3600;\\n    }\\n\\n    /// @dev Returns whether `user` has any of `roles`.\\n    function hasAnyRole(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value, and set the result to whether the\\n            // `and` intersection of the value and `roles` is not zero.\\n            result := iszero(iszero(and(sload(keccak256(0x00, 0x20)), roles)))\\n        }\\n    }\\n\\n    /// @dev Returns whether `user` has all of `roles`.\\n    function hasAllRoles(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Whether the stored value is contains all the set bits in `roles`.\\n            result := eq(and(sload(keccak256(0x00, 0x20)), roles), roles)\\n        }\\n    }\\n\\n    /// @dev Returns the roles of `user`.\\n    function rolesOf(address user) public view virtual returns (uint256 roles) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value.\\n            roles := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function rolesFromOrdinals(uint8[] memory ordinals) public pure returns (uint256 roles) {\\n        assembly {\\n            // Skip the length slot.\\n            let o := add(ordinals, 0x20)\\n            // `shl` 5 is equivalent to multiplying by 0x20.\\n            let end := add(o, shl(5, mload(ordinals)))\\n            // prettier-ignore\\n            for {} iszero(eq(o, end)) { o := add(o, 0x20) } {\\n                roles := or(roles, shl(and(mload(o), 0xff), 1))\\n            }\\n        }\\n    }\\n\\n    /// @dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function ordinalsFromRoles(uint256 roles) public pure returns (uint8[] memory ordinals) {\\n        assembly {\\n            // Grab the pointer to the free memory.\\n            let ptr := add(mload(0x40), 0x20)\\n            // The absence of lookup tables, De Bruijn, etc., here is intentional for\\n            // smaller bytecode, as this function is not meant to be called on-chain.\\n            // prettier-ignore\\n            for { let i := 0 } 1 { i := add(i, 1) } {\\n                mstore(ptr, i)\\n                // `shr` 5 is equivalent to multiplying by 0x20.\\n                // Push back into the ordinals array if the bit is set.\\n                ptr := add(ptr, shl(5, and(roles, 1)))\\n                roles := shr(1, roles)\\n                // prettier-ignore\\n                if iszero(roles) { break }\\n            }\\n            // Set `ordinals` to the start of the free memory.\\n            ordinals := mload(0x40)\\n            // Allocate the memory.\\n            mstore(0x40, ptr)\\n            // Store the length of `ordinals`.\\n            mstore(ordinals, shr(5, sub(ptr, add(ordinals, 0x20))))\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Modifiers\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Marks a function as only callable by the owner.\\n    modifier onlyOwner() virtual {\\n        assembly {\\n            // If the caller is not the stored owner, revert.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`.\\n    modifier onlyRoles(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by the owner or by an account\\n    /// with `roles`. Checks for ownership first, then lazily checks for roles.\\n    modifier onlyOwnerOrRoles(uint256 roles) virtual {\\n        assembly {\\n            // If the caller is not the stored owner.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                // Compute the role slot.\\n                mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n                // Load the stored value, and if the `and` intersection\\n                // of the value and `roles` is zero, revert.\\n                if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`\\n    /// or the owner. Checks for roles first, then lazily checks for ownership.\\n    modifier onlyRolesOrOwner(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                // If the caller is not the stored owner.\\n                if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Role Constants\\n    /// -----------------------------------------------------------------------\\n\\n    uint256 internal constant _ROLE_0 = 1 << 0;\\n    uint256 internal constant _ROLE_1 = 1 << 1;\\n    uint256 internal constant _ROLE_2 = 1 << 2;\\n    uint256 internal constant _ROLE_3 = 1 << 3;\\n    uint256 internal constant _ROLE_4 = 1 << 4;\\n    uint256 internal constant _ROLE_5 = 1 << 5;\\n    uint256 internal constant _ROLE_6 = 1 << 6;\\n    uint256 internal constant _ROLE_7 = 1 << 7;\\n    uint256 internal constant _ROLE_8 = 1 << 8;\\n    uint256 internal constant _ROLE_9 = 1 << 9;\\n    uint256 internal constant _ROLE_10 = 1 << 10;\\n    uint256 internal constant _ROLE_11 = 1 << 11;\\n    uint256 internal constant _ROLE_12 = 1 << 12;\\n    uint256 internal constant _ROLE_13 = 1 << 13;\\n    uint256 internal constant _ROLE_14 = 1 << 14;\\n    uint256 internal constant _ROLE_15 = 1 << 15;\\n    uint256 internal constant _ROLE_16 = 1 << 16;\\n    uint256 internal constant _ROLE_17 = 1 << 17;\\n    uint256 internal constant _ROLE_18 = 1 << 18;\\n    uint256 internal constant _ROLE_19 = 1 << 19;\\n    uint256 internal constant _ROLE_20 = 1 << 20;\\n    uint256 internal constant _ROLE_21 = 1 << 21;\\n    uint256 internal constant _ROLE_22 = 1 << 22;\\n    uint256 internal constant _ROLE_23 = 1 << 23;\\n    uint256 internal constant _ROLE_24 = 1 << 24;\\n    uint256 internal constant _ROLE_25 = 1 << 25;\\n    uint256 internal constant _ROLE_26 = 1 << 26;\\n    uint256 internal constant _ROLE_27 = 1 << 27;\\n    uint256 internal constant _ROLE_28 = 1 << 28;\\n    uint256 internal constant _ROLE_29 = 1 << 29;\\n    uint256 internal constant _ROLE_30 = 1 << 30;\\n    uint256 internal constant _ROLE_31 = 1 << 31;\\n    uint256 internal constant _ROLE_32 = 1 << 32;\\n    uint256 internal constant _ROLE_33 = 1 << 33;\\n    uint256 internal constant _ROLE_34 = 1 << 34;\\n    uint256 internal constant _ROLE_35 = 1 << 35;\\n    uint256 internal constant _ROLE_36 = 1 << 36;\\n    uint256 internal constant _ROLE_37 = 1 << 37;\\n    uint256 internal constant _ROLE_38 = 1 << 38;\\n    uint256 internal constant _ROLE_39 = 1 << 39;\\n    uint256 internal constant _ROLE_40 = 1 << 40;\\n    uint256 internal constant _ROLE_41 = 1 << 41;\\n    uint256 internal constant _ROLE_42 = 1 << 42;\\n    uint256 internal constant _ROLE_43 = 1 << 43;\\n    uint256 internal constant _ROLE_44 = 1 << 44;\\n    uint256 internal constant _ROLE_45 = 1 << 45;\\n    uint256 internal constant _ROLE_46 = 1 << 46;\\n    uint256 internal constant _ROLE_47 = 1 << 47;\\n    uint256 internal constant _ROLE_48 = 1 << 48;\\n    uint256 internal constant _ROLE_49 = 1 << 49;\\n    uint256 internal constant _ROLE_50 = 1 << 50;\\n    uint256 internal constant _ROLE_51 = 1 << 51;\\n    uint256 internal constant _ROLE_52 = 1 << 52;\\n    uint256 internal constant _ROLE_53 = 1 << 53;\\n    uint256 internal constant _ROLE_54 = 1 << 54;\\n    uint256 internal constant _ROLE_55 = 1 << 55;\\n    uint256 internal constant _ROLE_56 = 1 << 56;\\n    uint256 internal constant _ROLE_57 = 1 << 57;\\n    uint256 internal constant _ROLE_58 = 1 << 58;\\n    uint256 internal constant _ROLE_59 = 1 << 59;\\n    uint256 internal constant _ROLE_60 = 1 << 60;\\n    uint256 internal constant _ROLE_61 = 1 << 61;\\n    uint256 internal constant _ROLE_62 = 1 << 62;\\n    uint256 internal constant _ROLE_63 = 1 << 63;\\n    uint256 internal constant _ROLE_64 = 1 << 64;\\n    uint256 internal constant _ROLE_65 = 1 << 65;\\n    uint256 internal constant _ROLE_66 = 1 << 66;\\n    uint256 internal constant _ROLE_67 = 1 << 67;\\n    uint256 internal constant _ROLE_68 = 1 << 68;\\n    uint256 internal constant _ROLE_69 = 1 << 69;\\n    uint256 internal constant _ROLE_70 = 1 << 70;\\n    uint256 internal constant _ROLE_71 = 1 << 71;\\n    uint256 internal constant _ROLE_72 = 1 << 72;\\n    uint256 internal constant _ROLE_73 = 1 << 73;\\n    uint256 internal constant _ROLE_74 = 1 << 74;\\n    uint256 internal constant _ROLE_75 = 1 << 75;\\n    uint256 internal constant _ROLE_76 = 1 << 76;\\n    uint256 internal constant _ROLE_77 = 1 << 77;\\n    uint256 internal constant _ROLE_78 = 1 << 78;\\n    uint256 internal constant _ROLE_79 = 1 << 79;\\n    uint256 internal constant _ROLE_80 = 1 << 80;\\n    uint256 internal constant _ROLE_81 = 1 << 81;\\n    uint256 internal constant _ROLE_82 = 1 << 82;\\n    uint256 internal constant _ROLE_83 = 1 << 83;\\n    uint256 internal constant _ROLE_84 = 1 << 84;\\n    uint256 internal constant _ROLE_85 = 1 << 85;\\n    uint256 internal constant _ROLE_86 = 1 << 86;\\n    uint256 internal constant _ROLE_87 = 1 << 87;\\n    uint256 internal constant _ROLE_88 = 1 << 88;\\n    uint256 internal constant _ROLE_89 = 1 << 89;\\n    uint256 internal constant _ROLE_90 = 1 << 90;\\n    uint256 internal constant _ROLE_91 = 1 << 91;\\n    uint256 internal constant _ROLE_92 = 1 << 92;\\n    uint256 internal constant _ROLE_93 = 1 << 93;\\n    uint256 internal constant _ROLE_94 = 1 << 94;\\n    uint256 internal constant _ROLE_95 = 1 << 95;\\n    uint256 internal constant _ROLE_96 = 1 << 96;\\n    uint256 internal constant _ROLE_97 = 1 << 97;\\n    uint256 internal constant _ROLE_98 = 1 << 98;\\n    uint256 internal constant _ROLE_99 = 1 << 99;\\n    uint256 internal constant _ROLE_100 = 1 << 100;\\n    uint256 internal constant _ROLE_101 = 1 << 101;\\n    uint256 internal constant _ROLE_102 = 1 << 102;\\n    uint256 internal constant _ROLE_103 = 1 << 103;\\n    uint256 internal constant _ROLE_104 = 1 << 104;\\n    uint256 internal constant _ROLE_105 = 1 << 105;\\n    uint256 internal constant _ROLE_106 = 1 << 106;\\n    uint256 internal constant _ROLE_107 = 1 << 107;\\n    uint256 internal constant _ROLE_108 = 1 << 108;\\n    uint256 internal constant _ROLE_109 = 1 << 109;\\n    uint256 internal constant _ROLE_110 = 1 << 110;\\n    uint256 internal constant _ROLE_111 = 1 << 111;\\n    uint256 internal constant _ROLE_112 = 1 << 112;\\n    uint256 internal constant _ROLE_113 = 1 << 113;\\n    uint256 internal constant _ROLE_114 = 1 << 114;\\n    uint256 internal constant _ROLE_115 = 1 << 115;\\n    uint256 internal constant _ROLE_116 = 1 << 116;\\n    uint256 internal constant _ROLE_117 = 1 << 117;\\n    uint256 internal constant _ROLE_118 = 1 << 118;\\n    uint256 internal constant _ROLE_119 = 1 << 119;\\n    uint256 internal constant _ROLE_120 = 1 << 120;\\n    uint256 internal constant _ROLE_121 = 1 << 121;\\n    uint256 internal constant _ROLE_122 = 1 << 122;\\n    uint256 internal constant _ROLE_123 = 1 << 123;\\n    uint256 internal constant _ROLE_124 = 1 << 124;\\n    uint256 internal constant _ROLE_125 = 1 << 125;\\n    uint256 internal constant _ROLE_126 = 1 << 126;\\n    uint256 internal constant _ROLE_127 = 1 << 127;\\n    uint256 internal constant _ROLE_128 = 1 << 128;\\n    uint256 internal constant _ROLE_129 = 1 << 129;\\n    uint256 internal constant _ROLE_130 = 1 << 130;\\n    uint256 internal constant _ROLE_131 = 1 << 131;\\n    uint256 internal constant _ROLE_132 = 1 << 132;\\n    uint256 internal constant _ROLE_133 = 1 << 133;\\n    uint256 internal constant _ROLE_134 = 1 << 134;\\n    uint256 internal constant _ROLE_135 = 1 << 135;\\n    uint256 internal constant _ROLE_136 = 1 << 136;\\n    uint256 internal constant _ROLE_137 = 1 << 137;\\n    uint256 internal constant _ROLE_138 = 1 << 138;\\n    uint256 internal constant _ROLE_139 = 1 << 139;\\n    uint256 internal constant _ROLE_140 = 1 << 140;\\n    uint256 internal constant _ROLE_141 = 1 << 141;\\n    uint256 internal constant _ROLE_142 = 1 << 142;\\n    uint256 internal constant _ROLE_143 = 1 << 143;\\n    uint256 internal constant _ROLE_144 = 1 << 144;\\n    uint256 internal constant _ROLE_145 = 1 << 145;\\n    uint256 internal constant _ROLE_146 = 1 << 146;\\n    uint256 internal constant _ROLE_147 = 1 << 147;\\n    uint256 internal constant _ROLE_148 = 1 << 148;\\n    uint256 internal constant _ROLE_149 = 1 << 149;\\n    uint256 internal constant _ROLE_150 = 1 << 150;\\n    uint256 internal constant _ROLE_151 = 1 << 151;\\n    uint256 internal constant _ROLE_152 = 1 << 152;\\n    uint256 internal constant _ROLE_153 = 1 << 153;\\n    uint256 internal constant _ROLE_154 = 1 << 154;\\n    uint256 internal constant _ROLE_155 = 1 << 155;\\n    uint256 internal constant _ROLE_156 = 1 << 156;\\n    uint256 internal constant _ROLE_157 = 1 << 157;\\n    uint256 internal constant _ROLE_158 = 1 << 158;\\n    uint256 internal constant _ROLE_159 = 1 << 159;\\n    uint256 internal constant _ROLE_160 = 1 << 160;\\n    uint256 internal constant _ROLE_161 = 1 << 161;\\n    uint256 internal constant _ROLE_162 = 1 << 162;\\n    uint256 internal constant _ROLE_163 = 1 << 163;\\n    uint256 internal constant _ROLE_164 = 1 << 164;\\n    uint256 internal constant _ROLE_165 = 1 << 165;\\n    uint256 internal constant _ROLE_166 = 1 << 166;\\n    uint256 internal constant _ROLE_167 = 1 << 167;\\n    uint256 internal constant _ROLE_168 = 1 << 168;\\n    uint256 internal constant _ROLE_169 = 1 << 169;\\n    uint256 internal constant _ROLE_170 = 1 << 170;\\n    uint256 internal constant _ROLE_171 = 1 << 171;\\n    uint256 internal constant _ROLE_172 = 1 << 172;\\n    uint256 internal constant _ROLE_173 = 1 << 173;\\n    uint256 internal constant _ROLE_174 = 1 << 174;\\n    uint256 internal constant _ROLE_175 = 1 << 175;\\n    uint256 internal constant _ROLE_176 = 1 << 176;\\n    uint256 internal constant _ROLE_177 = 1 << 177;\\n    uint256 internal constant _ROLE_178 = 1 << 178;\\n    uint256 internal constant _ROLE_179 = 1 << 179;\\n    uint256 internal constant _ROLE_180 = 1 << 180;\\n    uint256 internal constant _ROLE_181 = 1 << 181;\\n    uint256 internal constant _ROLE_182 = 1 << 182;\\n    uint256 internal constant _ROLE_183 = 1 << 183;\\n    uint256 internal constant _ROLE_184 = 1 << 184;\\n    uint256 internal constant _ROLE_185 = 1 << 185;\\n    uint256 internal constant _ROLE_186 = 1 << 186;\\n    uint256 internal constant _ROLE_187 = 1 << 187;\\n    uint256 internal constant _ROLE_188 = 1 << 188;\\n    uint256 internal constant _ROLE_189 = 1 << 189;\\n    uint256 internal constant _ROLE_190 = 1 << 190;\\n    uint256 internal constant _ROLE_191 = 1 << 191;\\n    uint256 internal constant _ROLE_192 = 1 << 192;\\n    uint256 internal constant _ROLE_193 = 1 << 193;\\n    uint256 internal constant _ROLE_194 = 1 << 194;\\n    uint256 internal constant _ROLE_195 = 1 << 195;\\n    uint256 internal constant _ROLE_196 = 1 << 196;\\n    uint256 internal constant _ROLE_197 = 1 << 197;\\n    uint256 internal constant _ROLE_198 = 1 << 198;\\n    uint256 internal constant _ROLE_199 = 1 << 199;\\n    uint256 internal constant _ROLE_200 = 1 << 200;\\n    uint256 internal constant _ROLE_201 = 1 << 201;\\n    uint256 internal constant _ROLE_202 = 1 << 202;\\n    uint256 internal constant _ROLE_203 = 1 << 203;\\n    uint256 internal constant _ROLE_204 = 1 << 204;\\n    uint256 internal constant _ROLE_205 = 1 << 205;\\n    uint256 internal constant _ROLE_206 = 1 << 206;\\n    uint256 internal constant _ROLE_207 = 1 << 207;\\n    uint256 internal constant _ROLE_208 = 1 << 208;\\n    uint256 internal constant _ROLE_209 = 1 << 209;\\n    uint256 internal constant _ROLE_210 = 1 << 210;\\n    uint256 internal constant _ROLE_211 = 1 << 211;\\n    uint256 internal constant _ROLE_212 = 1 << 212;\\n    uint256 internal constant _ROLE_213 = 1 << 213;\\n    uint256 internal constant _ROLE_214 = 1 << 214;\\n    uint256 internal constant _ROLE_215 = 1 << 215;\\n    uint256 internal constant _ROLE_216 = 1 << 216;\\n    uint256 internal constant _ROLE_217 = 1 << 217;\\n    uint256 internal constant _ROLE_218 = 1 << 218;\\n    uint256 internal constant _ROLE_219 = 1 << 219;\\n    uint256 internal constant _ROLE_220 = 1 << 220;\\n    uint256 internal constant _ROLE_221 = 1 << 221;\\n    uint256 internal constant _ROLE_222 = 1 << 222;\\n    uint256 internal constant _ROLE_223 = 1 << 223;\\n    uint256 internal constant _ROLE_224 = 1 << 224;\\n    uint256 internal constant _ROLE_225 = 1 << 225;\\n    uint256 internal constant _ROLE_226 = 1 << 226;\\n    uint256 internal constant _ROLE_227 = 1 << 227;\\n    uint256 internal constant _ROLE_228 = 1 << 228;\\n    uint256 internal constant _ROLE_229 = 1 << 229;\\n    uint256 internal constant _ROLE_230 = 1 << 230;\\n    uint256 internal constant _ROLE_231 = 1 << 231;\\n    uint256 internal constant _ROLE_232 = 1 << 232;\\n    uint256 internal constant _ROLE_233 = 1 << 233;\\n    uint256 internal constant _ROLE_234 = 1 << 234;\\n    uint256 internal constant _ROLE_235 = 1 << 235;\\n    uint256 internal constant _ROLE_236 = 1 << 236;\\n    uint256 internal constant _ROLE_237 = 1 << 237;\\n    uint256 internal constant _ROLE_238 = 1 << 238;\\n    uint256 internal constant _ROLE_239 = 1 << 239;\\n    uint256 internal constant _ROLE_240 = 1 << 240;\\n    uint256 internal constant _ROLE_241 = 1 << 241;\\n    uint256 internal constant _ROLE_242 = 1 << 242;\\n    uint256 internal constant _ROLE_243 = 1 << 243;\\n    uint256 internal constant _ROLE_244 = 1 << 244;\\n    uint256 internal constant _ROLE_245 = 1 << 245;\\n    uint256 internal constant _ROLE_246 = 1 << 246;\\n    uint256 internal constant _ROLE_247 = 1 << 247;\\n    uint256 internal constant _ROLE_248 = 1 << 248;\\n    uint256 internal constant _ROLE_249 = 1 << 249;\\n    uint256 internal constant _ROLE_250 = 1 << 250;\\n    uint256 internal constant _ROLE_251 = 1 << 251;\\n    uint256 internal constant _ROLE_252 = 1 << 252;\\n    uint256 internal constant _ROLE_253 = 1 << 253;\\n    uint256 internal constant _ROLE_254 = 1 << 254;\\n    uint256 internal constant _ROLE_255 = 1 << 255;\\n}\\n\",\"keccak256\":\"0x27a1c151d748174587f74b79b7c42274ecaa722d100e473d750a8b4704addcfd\",\"license\":\"MIT\"},\"@turbo-eth/solbase-sol/src/utils/Base64.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Library to encode and decode strings in Base64.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\\nlibrary Base64 {\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// See: https://datatracker.ietf.org/doc/html/rfc4648\\n    /// @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\\n    /// @param noPadding Whether to strip away the padding.\\n    function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                // Multiply by 4/3 rounded up.\\n                // The `shl(2, ...)` is equivalent to multiplying by 4.\\n                let encodedLength := shl(2, div(add(dataLength, 2), 3))\\n\\n                // Set `result` to point to the start of the free memory.\\n                result := mload(0x40)\\n\\n                // Store the table into the scratch space.\\n                // Offsetted by -1 byte so that the `mload` will load the character.\\n                // We will rewrite the free memory pointer at `0x40` later with\\n                // the allocated size.\\n                // The magic constant 0x0230 will translate \\\"-_\\\" + \\\"+/\\\".\\n                mstore(0x1f, \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef\\\")\\n                mstore(0x3f, sub(\\\"ghijklmnopqrstuvwxyz0123456789-_\\\", mul(iszero(fileSafe), 0x0230)))\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n                let end := add(ptr, encodedLength)\\n\\n                // Run over the input, 3 bytes at a time.\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    data := add(data, 3) // Advance 3 bytes.\\n                    let input := mload(data)\\n\\n                    // Write 4 bytes. Optimized for fewer stack operations.\\n                    mstore8(    ptr    , mload(and(shr(18, input), 0x3F)))\\n                    mstore8(add(ptr, 1), mload(and(shr(12, input), 0x3F)))\\n                    mstore8(add(ptr, 2), mload(and(shr( 6, input), 0x3F)))\\n                    mstore8(add(ptr, 3), mload(and(        input , 0x3F)))\\n                    \\n                    ptr := add(ptr, 4) // Advance 4 bytes.\\n                    // prettier-ignore\\n                    if iszero(lt(ptr, end)) { break }\\n                }\\n\\n                let r := mod(dataLength, 3)\\n\\n                switch noPadding\\n                case 0 {\\n                    // Offset `ptr` and pad with '='. We can simply write over the end.\\n                    mstore8(sub(ptr, iszero(iszero(r))), 0x3d) // Pad at `ptr - 1` if `r > 0`.\\n                    mstore8(sub(ptr, shl(1, eq(r, 1))), 0x3d) // Pad at `ptr - 2` if `r == 1`.\\n                    // Write the length of the string.\\n                    mstore(result, encodedLength)\\n                }\\n                default {\\n                    // Write the length of the string.\\n                    mstore(result, sub(encodedLength, add(iszero(iszero(r)), eq(r, 1))))\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(end, 31), not(31)))\\n            }\\n        }\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, false, false)`.\\n    function encode(bytes memory data) internal pure returns (string memory result) {\\n        result = encode(data, false, false);\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, fileSafe, false)`.\\n    function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) {\\n        result = encode(data, fileSafe, false);\\n    }\\n\\n    /// @dev Decodes base64 encoded `data`.\\n    ///\\n    /// Supports:\\n    /// - RFC 4648 (both standard and file-safe mode).\\n    /// - RFC 3501 (63: ',').\\n    ///\\n    /// Does not support:\\n    /// - Line breaks.\\n    ///\\n    /// Note: For performance reasons,\\n    /// this function will NOT revert on invalid `data` inputs.\\n    /// Outputs for invalid inputs will simply be undefined behaviour.\\n    /// It is the user's responsibility to ensure that the `data`\\n    /// is a valid base64 encoded string.\\n    function decode(string memory data) internal pure returns (bytes memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                let end := add(data, dataLength)\\n                let decodedLength := mul(shr(2, dataLength), 3)\\n\\n                switch and(dataLength, 3)\\n                case 0 {\\n                    // If padded.\\n                    decodedLength := sub(\\n                        decodedLength,\\n                        add(eq(and(mload(end), 0xFF), 0x3d), eq(and(mload(end), 0xFFFF), 0x3d3d))\\n                    )\\n                }\\n                default {\\n                    // If non-padded.\\n                    decodedLength := add(decodedLength, sub(and(dataLength, 3), 1))\\n                }\\n\\n                result := mload(0x40)\\n\\n                // Write the length of the string.\\n                mstore(result, decodedLength)\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n\\n                // Load the table into the scratch space.\\n                // Constants are optimized for smaller bytecode with zero gas overhead.\\n                // `m` also doubles as the mask of the upper 6 bits.\\n                let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc\\n                mstore(0x5b, m)\\n                mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064)\\n                mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4)\\n\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    // Read 4 bytes.\\n                    data := add(data, 4)\\n                    let input := mload(data)\\n\\n                    // Write 3 bytes.\\n                    mstore(ptr, or(\\n                        and(m, mload(byte(28, input))),\\n                        shr(6, or(\\n                            and(m, mload(byte(29, input))),\\n                            shr(6, or(\\n                                and(m, mload(byte(30, input))),\\n                                shr(6, mload(byte(31, input)))\\n                            ))\\n                        ))\\n                    ))\\n\\n                    ptr := add(ptr, 3)\\n                    \\n                    // prettier-ignore\\n                    if iszero(lt(data, end)) { break }\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 32 + 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(add(result, decodedLength), 63), not(31)))\\n\\n                // Restore the zero slot.\\n                mstore(0x60, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xeed3c8ce53e43c0aecded4dbb14327519335596e4c742f8bc775c224538cd23e\",\"license\":\"MIT\"},\"contracts/ERC721Storage.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.8.15;\\n\\nimport { Base64 } from \\\"@turbo-eth/solbase-sol/src/utils/Base64.sol\\\";\\nimport { OwnedRoles } from \\\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\\\";\\nimport { IERC721KImage } from \\\"./interfaces/IERC721KImage.sol\\\";\\nimport { IERC721KTraits } from \\\"./interfaces/IERC721KTraits.sol\\\";\\n\\n/**\\n * @title ERC721Storage\\n * @author Kames Geraghty\\n */\\nabstract contract ERC721Storage is OwnedRoles {\\n  address internal svgRenderInstance;\\n  address internal traitsFetchInstance;\\n  ContractURI internal _contractURI;\\n\\n  struct ContractURI {\\n    string name;\\n    string description;\\n    string image;\\n    string externalLink;\\n    string sellerFeeBasisPoints;\\n    string feeRecipient;\\n  }\\n\\n  event SvgRenderUpdated(address svgRender);\\n\\n  event TraitsFetchUpdated(address traitsFetch);\\n\\n  event ContractURIUpdated(ContractURI contractURI);\\n\\n  constructor(\\n    address svgRender_Instance,\\n    address traitsFetchInstance_,\\n    ContractURI memory _contractURI_\\n  ) OwnedRoles() {\\n    svgRenderInstance = svgRender_Instance;\\n    traitsFetchInstance = traitsFetchInstance_;\\n    _contractURI = _contractURI_;\\n    _initializeOwner(msg.sender);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* Virtual Functions                                                                     */\\n  /* ===================================================================================== */\\n\\n  function _parseName(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  function _parseDescription(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  /* ===================================================================================== */\\n  /* External Functions                                                                    */\\n  /* ===================================================================================== */\\n  function getERC721KRender() external view returns (address) {\\n    return svgRenderInstance;\\n  }\\n\\n  function getERC72KTraits() external view returns (address) {\\n    return traitsFetchInstance;\\n  }\\n\\n  function getContractDescription() external view returns (ContractURI memory) {\\n    return _contractURI;\\n  }\\n\\n  function render(bytes memory input) external view returns (string memory) {\\n    return IERC721KImage(svgRenderInstance).render(input);\\n  }\\n\\n  function constructTokenURI(\\n    uint256 tokenId,\\n    bytes memory input0,\\n    bytes memory input1\\n  ) external view virtual returns (string memory uri) {\\n    string memory image_ = IERC721KImage(svgRenderInstance).render(input0);\\n    string memory traits_ = IERC721KTraits(traitsFetchInstance).fetch(input1);\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _parseName(tokenId),\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _parseDescription(tokenId),\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                image_,\\n                '\\\",',\\n                '\\\"attributes\\\": [',\\n                traits_,\\n                \\\"]\\\",\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function constructContractURI() external view virtual returns (string memory uri) {\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _contractURI.name,\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _contractURI.description,\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                _contractURI.image,\\n                '\\\",',\\n                '\\\"externalLink\\\":',\\n                '\\\"',\\n                _contractURI.externalLink,\\n                '\\\",',\\n                '\\\"sellerFeeBasisPoints\\\":',\\n                '\\\"',\\n                _contractURI.sellerFeeBasisPoints,\\n                '\\\",',\\n                '\\\"feeRecipient\\\":',\\n                '\\\"',\\n                _contractURI.feeRecipient,\\n                '\\\"',\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function setSvgRender(address svgRender) external onlyOwner {\\n    svgRenderInstance = svgRender;\\n    emit SvgRenderUpdated(svgRender);\\n  }\\n\\n  function setTraitsFetch(address traitsFetch) external onlyOwner {\\n    traitsFetchInstance = traitsFetch;\\n    emit TraitsFetchUpdated(traitsFetch);\\n  }\\n\\n  function setContractURI(ContractURI memory contractURI) external onlyOwner {\\n    _contractURI = contractURI;\\n    emit ContractURIUpdated(contractURI);\\n  }\\n}\\n\",\"keccak256\":\"0x7705c2b846d59c00cd26341f54be5397e3cb37e1955e6fc6bd9daf85e86035ca\",\"license\":\"GPL-3.0\"},\"contracts/interfaces/IERC721KImage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KImage {\\n  function render(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x8474249915bfc50221f4431b8853338ae27e8847ac3ef563dda437dd809a8846\",\"license\":\"MIT\"},\"contracts/interfaces/IERC721KTraits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KTraits {\\n  enum DisplayType {\\n    Base,\\n    Generic,\\n    BoostNumber,\\n    BoostPercent,\\n    Number,\\n    Date\\n  }\\n\\n  function fetch(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xeea24a181f0175f89ed357503946fbbb39c92a1b2b4764268d4613a773f3c9ea\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 2859,
                "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                "label": "svgRenderInstance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 2861,
                "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                "label": "traitsFetchInstance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2864,
                "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                "label": "_contractURI",
                "offset": 0,
                "slot": "2",
                "type": "t_struct(ContractURI)2877_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_struct(ContractURI)2877_storage": {
                "encoding": "inplace",
                "label": "struct ERC721Storage.ContractURI",
                "members": [
                  {
                    "astId": 2866,
                    "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                    "label": "name",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2868,
                    "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                    "label": "description",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2870,
                    "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                    "label": "image",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2872,
                    "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                    "label": "externalLink",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2874,
                    "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                    "label": "sellerFeeBasisPoints",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2876,
                    "contract": "contracts/ERC721Storage.sol:ERC721Storage",
                    "label": "feeRecipient",
                    "offset": 0,
                    "slot": "5",
                    "type": "t_string_storage"
                  }
                ],
                "numberOfBytes": "192"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "contracts/helpers/ERC721.sol": {
        "ERC721": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyMinted",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidRecipient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotAuthorized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotMinted",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnsafeRecipient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "WrongFrom",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "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": "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": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsafeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongFrom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"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\":\"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\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"NotMinted()\":[{\"notice\":\"----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------\"}]},\"events\":{\"Transfer(address,address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- Events -----------------------------------------------------------------------\"}},\"kind\":\"user\",\"methods\":{\"approve(address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC721 Logic -----------------------------------------------------------------------\"},\"constructor\":{\"notice\":\"----------------------------------------------------------------------- Constructor -----------------------------------------------------------------------\"},\"getApproved(uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC721 Approval Storage -----------------------------------------------------------------------\"},\"name()\":{\"notice\":\"----------------------------------------------------------------------- Metadata Storage/Logic -----------------------------------------------------------------------\"},\"supportsInterface(bytes4)\":{\"notice\":\"----------------------------------------------------------------------- ERC165 Logic -----------------------------------------------------------------------\"}},\"notice\":\"Modern, minimalist, and gas-optimized ERC721 implementation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/helpers/ERC721.sol\":\"ERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/helpers/ERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Modern, minimalist, and gas-optimized ERC721 implementation.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721 {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 indexed id);\\n\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    error NotMinted();\\n\\n    error ZeroAddress();\\n\\n    error NotAuthorized();\\n\\n    error WrongFrom();\\n\\n    error InvalidRecipient();\\n\\n    error UnsafeRecipient();\\n\\n    error AlreadyMinted();\\n\\n    /// -----------------------------------------------------------------------\\n    /// Metadata Storage/Logic\\n    /// -----------------------------------------------------------------------\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    function tokenURI(uint256 id) public view virtual returns (string memory);\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Balance/Owner Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) internal _ownerOf;\\n\\n    mapping(address => uint256) internal _balanceOf;\\n\\n    function ownerOf(uint256 id) public view virtual returns (address owner) {\\n        if ((owner = _ownerOf[id]) == address(0)) revert NotMinted();\\n    }\\n\\n    function balanceOf(address owner) public view virtual returns (uint256) {\\n        if (owner == address(0)) revert ZeroAddress();\\n        return _balanceOf[owner];\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Approval Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) public getApproved;\\n\\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Constructor\\n    /// -----------------------------------------------------------------------\\n\\n    constructor(string memory _name, string memory _symbol) {\\n        name = _name;\\n        symbol = _symbol;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function approve(address spender, uint256 id) public virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) revert NotAuthorized();\\n\\n        getApproved[id] = spender;\\n\\n        emit Approval(owner, spender, id);\\n    }\\n\\n    function setApprovalForAll(address operator, bool approved) public virtual {\\n        isApprovedForAll[msg.sender][operator] = approved;\\n\\n        emit ApprovalForAll(msg.sender, operator, approved);\\n    }\\n\\n    function transferFrom(address from, address to, uint256 id) public virtual {\\n        if (from != _ownerOf[id]) revert WrongFrom();\\n\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[id])\\n            revert NotAuthorized();\\n\\n        // Underflow of the sender's balance is impossible because we check for\\n        // ownership above and the recipient's balance can't realistically overflow.\\n        unchecked {\\n            _balanceOf[from]--;\\n\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(from, to, id);\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC165 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\\n        return\\n            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165\\n            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721\\n            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Mint/Burn Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _mint(address to, uint256 id) internal virtual {\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (_ownerOf[id] != address(0)) revert AlreadyMinted();\\n\\n        // Counter overflow is incredibly unrealistic.\\n        unchecked {\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        emit Transfer(address(0), to, id);\\n    }\\n\\n    function _burn(uint256 id) internal virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (owner == address(0)) revert NotMinted();\\n\\n        // Ownership check above ensures no underflow.\\n        unchecked {\\n            _balanceOf[owner]--;\\n        }\\n\\n        delete _ownerOf[id];\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(owner, address(0), id);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Safe Mint Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _safeMint(address to, uint256 id) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function _safeMint(address to, uint256 id, bytes memory data) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n}\\n\\n/// @notice A generic interface for a contract which properly accepts ERC721 tokens.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721TokenReceiver {\\n    function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {\\n        return ERC721TokenReceiver.onERC721Received.selector;\\n    }\\n}\\n\",\"keccak256\":\"0x7032b7724daa41f1c7d6aab0b4247bb10c94b1f82089afe5a2bf468a39be3555\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3193,
                "contract": "contracts/helpers/ERC721.sol:ERC721",
                "label": "name",
                "offset": 0,
                "slot": "0",
                "type": "t_string_storage"
              },
              {
                "astId": 3195,
                "contract": "contracts/helpers/ERC721.sol:ERC721",
                "label": "symbol",
                "offset": 0,
                "slot": "1",
                "type": "t_string_storage"
              },
              {
                "astId": 3207,
                "contract": "contracts/helpers/ERC721.sol:ERC721",
                "label": "_ownerOf",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_uint256,t_address)"
              },
              {
                "astId": 3211,
                "contract": "contracts/helpers/ERC721.sol:ERC721",
                "label": "_balanceOf",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 3261,
                "contract": "contracts/helpers/ERC721.sol:ERC721",
                "label": "getApproved",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_uint256,t_address)"
              },
              {
                "astId": 3267,
                "contract": "contracts/helpers/ERC721.sol:ERC721",
                "label": "isApprovedForAll",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_bool))"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_bool))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => bool))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_bool)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_uint256,t_address)": {
                "encoding": "mapping",
                "key": "t_uint256",
                "label": "mapping(uint256 => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NotMinted()": [
                {
                  "notice": "----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------"
                }
              ]
            },
            "events": {
              "Transfer(address,address,uint256)": {
                "notice": "----------------------------------------------------------------------- Events -----------------------------------------------------------------------"
              }
            },
            "kind": "user",
            "methods": {
              "approve(address,uint256)": {
                "notice": "----------------------------------------------------------------------- ERC721 Logic -----------------------------------------------------------------------"
              },
              "constructor": {
                "notice": "----------------------------------------------------------------------- Constructor -----------------------------------------------------------------------"
              },
              "getApproved(uint256)": {
                "notice": "----------------------------------------------------------------------- ERC721 Approval Storage -----------------------------------------------------------------------"
              },
              "name()": {
                "notice": "----------------------------------------------------------------------- Metadata Storage/Logic -----------------------------------------------------------------------"
              },
              "supportsInterface(bytes4)": {
                "notice": "----------------------------------------------------------------------- ERC165 Logic -----------------------------------------------------------------------"
              }
            },
            "notice": "Modern, minimalist, and gas-optimized ERC721 implementation.",
            "version": 1
          }
        },
        "ERC721TokenReceiver": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "name": "onERC721Received",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "author": "SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "onERC721Received(address,address,uint256,bytes)": "150b7a02"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A generic interface for a contract which properly accepts ERC721 tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/helpers/ERC721.sol\":\"ERC721TokenReceiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/helpers/ERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Modern, minimalist, and gas-optimized ERC721 implementation.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721 {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 indexed id);\\n\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    error NotMinted();\\n\\n    error ZeroAddress();\\n\\n    error NotAuthorized();\\n\\n    error WrongFrom();\\n\\n    error InvalidRecipient();\\n\\n    error UnsafeRecipient();\\n\\n    error AlreadyMinted();\\n\\n    /// -----------------------------------------------------------------------\\n    /// Metadata Storage/Logic\\n    /// -----------------------------------------------------------------------\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    function tokenURI(uint256 id) public view virtual returns (string memory);\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Balance/Owner Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) internal _ownerOf;\\n\\n    mapping(address => uint256) internal _balanceOf;\\n\\n    function ownerOf(uint256 id) public view virtual returns (address owner) {\\n        if ((owner = _ownerOf[id]) == address(0)) revert NotMinted();\\n    }\\n\\n    function balanceOf(address owner) public view virtual returns (uint256) {\\n        if (owner == address(0)) revert ZeroAddress();\\n        return _balanceOf[owner];\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Approval Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) public getApproved;\\n\\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Constructor\\n    /// -----------------------------------------------------------------------\\n\\n    constructor(string memory _name, string memory _symbol) {\\n        name = _name;\\n        symbol = _symbol;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function approve(address spender, uint256 id) public virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) revert NotAuthorized();\\n\\n        getApproved[id] = spender;\\n\\n        emit Approval(owner, spender, id);\\n    }\\n\\n    function setApprovalForAll(address operator, bool approved) public virtual {\\n        isApprovedForAll[msg.sender][operator] = approved;\\n\\n        emit ApprovalForAll(msg.sender, operator, approved);\\n    }\\n\\n    function transferFrom(address from, address to, uint256 id) public virtual {\\n        if (from != _ownerOf[id]) revert WrongFrom();\\n\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[id])\\n            revert NotAuthorized();\\n\\n        // Underflow of the sender's balance is impossible because we check for\\n        // ownership above and the recipient's balance can't realistically overflow.\\n        unchecked {\\n            _balanceOf[from]--;\\n\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(from, to, id);\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC165 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\\n        return\\n            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165\\n            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721\\n            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Mint/Burn Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _mint(address to, uint256 id) internal virtual {\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (_ownerOf[id] != address(0)) revert AlreadyMinted();\\n\\n        // Counter overflow is incredibly unrealistic.\\n        unchecked {\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        emit Transfer(address(0), to, id);\\n    }\\n\\n    function _burn(uint256 id) internal virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (owner == address(0)) revert NotMinted();\\n\\n        // Ownership check above ensures no underflow.\\n        unchecked {\\n            _balanceOf[owner]--;\\n        }\\n\\n        delete _ownerOf[id];\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(owner, address(0), id);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Safe Mint Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _safeMint(address to, uint256 id) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function _safeMint(address to, uint256 id, bytes memory data) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n}\\n\\n/// @notice A generic interface for a contract which properly accepts ERC721 tokens.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721TokenReceiver {\\n    function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {\\n        return ERC721TokenReceiver.onERC721Received.selector;\\n    }\\n}\\n\",\"keccak256\":\"0x7032b7724daa41f1c7d6aab0b4247bb10c94b1f82089afe5a2bf468a39be3555\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "A generic interface for a contract which properly accepts ERC721 tokens.",
            "version": 1
          }
        }
      },
      "contracts/interfaces/IERC721KImage.sol": {
        "IERC721KImage": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "input",
                  "type": "bytes"
                }
              ],
              "name": "render",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "render(bytes)": "316df61e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"render\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IERC721KImage.sol\":\"IERC721KImage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IERC721KImage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KImage {\\n  function render(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x8474249915bfc50221f4431b8853338ae27e8847ac3ef563dda437dd809a8846\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "contracts/interfaces/IERC721KTraits.sol": {
        "IERC721KTraits": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "input",
                  "type": "bytes"
                }
              ],
              "name": "fetch",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "fetch(bytes)": "f6559a6b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"fetch\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IERC721KTraits.sol\":\"IERC721KTraits\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IERC721KTraits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KTraits {\\n  enum DisplayType {\\n    Base,\\n    Generic,\\n    BoostNumber,\\n    BoostPercent,\\n    Number,\\n    Date\\n  }\\n\\n  function fetch(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xeea24a181f0175f89ed357503946fbbb39c92a1b2b4764268d4613a773f3c9ea\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "contracts/mocks/MockERC721K.sol": {
        "MockERC721K": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "erc721Storage",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyMinted",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidRecipient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NewOwnerIsZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoHandoverRequest",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotAuthorized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotMinted",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnsafeRecipient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "WrongFrom",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "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": "address",
                  "name": "erc721Storage",
                  "type": "address"
                }
              ],
              "name": "ERC721StorageUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverCanceled",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "oldOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "RolesUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "cancelOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "completeOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "contractURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getERC721Storage",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "grantRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAllRoles",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAnyRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "ordinalsFromRoles",
              "outputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "result",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "ownershipHandoverExpiresAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "result",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ownershipHandoverValidFor",
              "outputs": [
                {
                  "internalType": "uint64",
                  "name": "",
                  "type": "uint64"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "renounceRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "revokeRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "name": "rolesFromOrdinals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                }
              ],
              "name": "rolesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "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": "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": "address",
                  "name": "erc721Storage",
                  "type": "address"
                }
              ],
              "name": "setStorage",
              "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": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "devdoc": {
            "errors": {
              "NewOwnerIsZeroAddress()": [
                {
                  "details": "The `newOwner` cannot be the zero address."
                }
              ],
              "NoHandoverRequest()": [
                {
                  "details": "The `pendingOwner` does not have a valid handover request."
                }
              ],
              "Unauthorized()": [
                {
                  "details": "The caller is not authorized to call the function."
                }
              ]
            },
            "kind": "dev",
            "methods": {
              "cancelOwnershipHandover()": {
                "details": "Cancels the two-step ownership handover to the caller, if any."
              },
              "completeOwnershipHandover(address)": {
                "details": "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
              },
              "grantRoles(address,uint256)": {
                "details": "Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role."
              },
              "hasAllRoles(address,uint256)": {
                "details": "Returns whether `user` has all of `roles`."
              },
              "hasAnyRole(address,uint256)": {
                "details": "Returns whether `user` has any of `roles`."
              },
              "ordinalsFromRoles(uint256)": {
                "details": "Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "owner()": {
                "details": "Returns the owner of the contract."
              },
              "ownershipHandoverExpiresAt(address)": {
                "details": "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
              },
              "ownershipHandoverValidFor()": {
                "details": "Returns how long a two-step ownership handover is valid for in seconds."
              },
              "renounceOwnership()": {
                "details": "Allows the owner to renounce their ownership."
              },
              "renounceRoles(uint256)": {
                "details": "Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role."
              },
              "requestOwnershipHandover()": {
                "details": "Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default."
              },
              "revokeRoles(address,uint256)": {
                "details": "Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role."
              },
              "rolesFromOrdinals(uint8[])": {
                "details": "Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "rolesOf(address)": {
                "details": "Returns the roles of `user`."
              },
              "transferOwnership(address)": {
                "details": "Allows the owner to transfer the ownership to `newOwner`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_2749": {
                  "entryPoint": null,
                  "id": 2749,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_3284": {
                  "entryPoint": null,
                  "id": 3284,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_3789": {
                  "entryPoint": null,
                  "id": 3789,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_initializeOwner_1119": {
                  "entryPoint": 139,
                  "id": 1119,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_string_fromMemory": {
                  "entryPoint": 221,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_fromMemory": {
                  "entryPoint": 404,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "array_dataslot_string_storage": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "clean_up_bytearray_end_slots_string_storage": {
                  "entryPoint": 605,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": {
                  "entryPoint": 688,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "extract_used_part_and_set_length_of_short_byte_array": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "panic_error_0x41": {
                  "entryPoint": 199,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:4356:11",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:11",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "46:95:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "63:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "70:3:11",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "75:10:11",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "66:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "66:20:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "56:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "56:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "56:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "103:1:11",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "106:4:11",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "96:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "96:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "96:15:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "127:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "130:4:11",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "120:15:11"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14:127:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "210:821:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "259:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "268:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "271:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "261:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "261:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "261:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "238:6:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "246:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "234:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "234:17:11"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "253:3:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "230:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "230:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "223:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "223:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "220:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "284:23:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "300:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "294:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "294:13:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "288:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "316:28:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "334:2:11",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "338:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "330:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "330:10:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "342:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "326:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "326:18:11"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "320:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "367:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "369:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "369:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "369:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "359:2:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "363:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "356:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "356:10:11"
                              },
                              "nodeType": "YulIf",
                              "src": "353:36:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "398:17:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "412:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "408:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "408:7:11"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "402:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "424:23:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "444:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "438:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "438:9:11"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "428:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "456:71:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "478:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "502:2:11"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "506:4:11",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "498:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "498:13:11"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "513:2:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "494:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "494:22:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "518:2:11",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "490:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "490:31:11"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "523:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "486:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "486:40:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "474:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "474:53:11"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "460:10:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "586:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "588:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "588:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "588:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "545:10:11"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "557:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "542:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "542:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "565:10:11"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "577:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "562:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "562:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "539:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "539:46:11"
                              },
                              "nodeType": "YulIf",
                              "src": "536:72:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "624:2:11",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "628:10:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "617:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "617:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "617:22:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "655:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "663:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "648:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "648:18:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "648:18:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "675:14:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "685:4:11",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "679:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "735:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "744:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "747:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "737:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "737:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "737:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "712:6:11"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "720:2:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "708:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "708:15:11"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "725:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "704:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "704:24:11"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "730:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "701:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "701:33:11"
                              },
                              "nodeType": "YulIf",
                              "src": "698:53:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "760:10:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "769:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "764:1:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "825:87:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "854:6:11"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "862:1:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "850:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "850:14:11"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "866:2:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "846:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "846:23:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "885:6:11"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "893:1:11"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "881:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "881:14:11"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "897:2:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "877:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "877:23:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "871:5:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "871:30:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "839:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "839:63:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "839:63:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "790:1:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "793:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "787:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "787:9:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "797:19:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "799:15:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "808:1:11"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "811:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "804:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "804:10:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "799:1:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "783:3:11",
                                "statements": []
                              },
                              "src": "779:133:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "942:59:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "971:6:11"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "979:2:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "967:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "967:15:11"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "984:2:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "963:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "963:24:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "989:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "956:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "956:35:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "956:35:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "927:1:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "930:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "924:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "924:9:11"
                              },
                              "nodeType": "YulIf",
                              "src": "921:80:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1010:15:11",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1019:6:11"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "1010:5:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "184:6:11",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "192:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "200:5:11",
                            "type": ""
                          }
                        ],
                        "src": "146:885:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1171:594:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1217:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1226:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1229:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1219:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1219:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1219:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1192:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1201:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1188:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1188:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1213:2:11",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1184:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1184:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1181:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1242:30:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1262:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1256:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1256:16:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1246:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1281:28:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1299:2:11",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1303:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1295:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1295:10:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1307:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1291:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1291:18:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1285:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1336:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1345:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1348:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1338:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1338:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1338:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1324:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1332:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1321:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1321:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1318:34:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1361:71:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1404:9:11"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1415:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1400:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1400:22:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1424:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1371:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1371:61:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1361:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1441:41:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1467:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1478:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1463:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1463:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1457:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1457:25:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1445:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1511:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1520:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1523:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1513:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1513:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1513:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1497:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1507:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1494:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1494:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1491:36:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1536:73:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1579:9:11"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1590:8:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1575:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1575:24:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1601:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1546:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1546:63:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1536:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1618:38:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1641:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1652:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1637:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1637:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1631:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1631:25:11"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1622:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1719:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1728:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1731:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1721:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1721:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1721:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1678:5:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1689:5:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1704:3:11",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1709:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1700:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1700:11:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1713:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "1696:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1696:19:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1685:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1685:31:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1675:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1675:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1668:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1668:50:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1665:70:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1744:15:11",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1754:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1744:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1121:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1132:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1144:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1152:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1160:6:11",
                            "type": ""
                          }
                        ],
                        "src": "1036:729:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1825:325:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1835:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1849:1:11",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1852:4:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1845:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1845:12:11"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1835:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1866:38:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1896:4:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1902:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1892:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1892:12:11"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "1870:18:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1943:31:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1945:27:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "1959:6:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1967:4:11",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "1955:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1955:17:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1945:6:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1923:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1916:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1916:26:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1913:61:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2033:111:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2054:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2061:3:11",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2066:10:11",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "2057:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2057:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2047:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2047:31:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2047:31:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2098:1:11",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2101:4:11",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2091:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2091:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2091:15:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2126:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2129:4:11",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2119:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2119:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2119:15:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1989:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "2012:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2020:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2009:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2009:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "1986:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1986:38:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1983:161:11"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "1805:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "1814:6:11",
                            "type": ""
                          }
                        ],
                        "src": "1770:380:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2211:65:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2228:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2231:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2221:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2221:14:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2221:14:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2244:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2262:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2265:4:11",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "2252:9:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2252:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "2244:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_dataslot_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "2194:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "2202:4:11",
                            "type": ""
                          }
                        ],
                        "src": "2155:121:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2362:464:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2395:425:11",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2409:11:11",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "2419:1:11",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulTypedName",
                                        "src": "2413:2:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2440:2:11"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "2444:5:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2433:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2433:17:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2433:17:11"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2463:31:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2485:2:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2489:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "2475:9:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2475:19:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulTypedName",
                                        "src": "2467:4:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2507:57:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "2530:4:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2540:1:11",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "startIndex",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2547:10:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2559:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2543:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2543:19:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "2536:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2536:27:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2526:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2526:38:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "deleteStart",
                                        "nodeType": "YulTypedName",
                                        "src": "2511:11:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "2601:23:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2603:19:11",
                                          "value": {
                                            "name": "data",
                                            "nodeType": "YulIdentifier",
                                            "src": "2618:4:11"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "deleteStart",
                                              "nodeType": "YulIdentifier",
                                              "src": "2603:11:11"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "startIndex",
                                          "nodeType": "YulIdentifier",
                                          "src": "2583:10:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2595:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "2580:2:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2580:20:11"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "2577:47:11"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2637:41:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "2651:4:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2661:1:11",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "len",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2668:3:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2673:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2664:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2664:12:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "2657:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2657:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2647:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2647:31:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulTypedName",
                                        "src": "2641:2:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2691:24:11",
                                    "value": {
                                      "name": "deleteStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "2704:11:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "start",
                                        "nodeType": "YulTypedName",
                                        "src": "2695:5:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "2789:21:11",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "start",
                                                "nodeType": "YulIdentifier",
                                                "src": "2798:5:11"
                                              },
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "2805:2:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "2791:6:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2791:17:11"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2791:17:11"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "start",
                                          "nodeType": "YulIdentifier",
                                          "src": "2739:5:11"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "2746:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "2736:2:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2736:13:11"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "2750:26:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2752:22:11",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "start",
                                                "nodeType": "YulIdentifier",
                                                "src": "2765:5:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2772:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2761:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2761:13:11"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "start",
                                              "nodeType": "YulIdentifier",
                                              "src": "2752:5:11"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "2732:3:11",
                                      "statements": []
                                    },
                                    "src": "2728:82:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "len",
                                    "nodeType": "YulIdentifier",
                                    "src": "2378:3:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2383:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2375:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2375:11:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2372:448:11"
                            }
                          ]
                        },
                        "name": "clean_up_bytearray_end_slots_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "2334:5:11",
                            "type": ""
                          },
                          {
                            "name": "len",
                            "nodeType": "YulTypedName",
                            "src": "2341:3:11",
                            "type": ""
                          },
                          {
                            "name": "startIndex",
                            "nodeType": "YulTypedName",
                            "src": "2346:10:11",
                            "type": ""
                          }
                        ],
                        "src": "2281:545:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2916:81:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2926:65:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "2941:4:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2959:1:11",
                                                    "type": "",
                                                    "value": "3"
                                                  },
                                                  {
                                                    "name": "len",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2962:3:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2955:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2955:11:11"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2972:1:11",
                                                    "type": "",
                                                    "value": "0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "not",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2968:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2968:6:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shr",
                                              "nodeType": "YulIdentifier",
                                              "src": "2951:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2951:24:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "2947:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2947:29:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2937:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2937:40:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2983:1:11",
                                        "type": "",
                                        "value": "1"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "2986:3:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2979:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2979:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "2934:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2934:57:11"
                              },
                              "variableNames": [
                                {
                                  "name": "used",
                                  "nodeType": "YulIdentifier",
                                  "src": "2926:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "extract_used_part_and_set_length_of_short_byte_array",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "2893:4:11",
                            "type": ""
                          },
                          {
                            "name": "len",
                            "nodeType": "YulTypedName",
                            "src": "2899:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "used",
                            "nodeType": "YulTypedName",
                            "src": "2907:4:11",
                            "type": ""
                          }
                        ],
                        "src": "2831:166:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3098:1256:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3108:24:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "3128:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3122:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3122:10:11"
                              },
                              "variables": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulTypedName",
                                  "src": "3112:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3175:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "3177:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3177:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3177:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "3147:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3163:2:11",
                                            "type": "",
                                            "value": "64"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3167:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "3159:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3159:10:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3171:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3155:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3155:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3144:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3144:30:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3141:56:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "slot",
                                    "nodeType": "YulIdentifier",
                                    "src": "3250:4:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "slot",
                                            "nodeType": "YulIdentifier",
                                            "src": "3288:4:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "3282:5:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3282:11:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "extract_byte_array_length",
                                      "nodeType": "YulIdentifier",
                                      "src": "3256:25:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3256:38:11"
                                  },
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "3296:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "clean_up_bytearray_end_slots_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "3206:43:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3206:97:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3206:97:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3312:18:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3329:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "srcOffset",
                                  "nodeType": "YulTypedName",
                                  "src": "3316:9:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3339:23:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3358:4:11",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "srcOffset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3343:11:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3371:24:11",
                              "value": {
                                "name": "srcOffset_1",
                                "nodeType": "YulIdentifier",
                                "src": "3384:11:11"
                              },
                              "variableNames": [
                                {
                                  "name": "srcOffset",
                                  "nodeType": "YulIdentifier",
                                  "src": "3371:9:11"
                                }
                              ]
                            },
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "3441:656:11",
                                    "statements": [
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "3455:35:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "newLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "3474:6:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3486:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "not",
                                                "nodeType": "YulIdentifier",
                                                "src": "3482:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3482:7:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3470:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3470:20:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "loopEnd",
                                            "nodeType": "YulTypedName",
                                            "src": "3459:7:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "3503:49:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "3547:4:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "array_dataslot_string_storage",
                                            "nodeType": "YulIdentifier",
                                            "src": "3517:29:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3517:35:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "dstPtr",
                                            "nodeType": "YulTypedName",
                                            "src": "3507:6:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "3565:10:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3574:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "i",
                                            "nodeType": "YulTypedName",
                                            "src": "3569:1:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "3652:172:11",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3677:6:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "src",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3695:3:11"
                                                          },
                                                          {
                                                            "name": "srcOffset",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3700:9:11"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3691:3:11"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "3691:19:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "3685:5:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3685:26:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3670:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3670:42:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "3670:42:11"
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "3729:24:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3743:6:11"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "3751:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3739:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3739:14:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "dstPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3729:6:11"
                                                }
                                              ]
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "3770:40:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "srcOffset",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3787:9:11"
                                                  },
                                                  {
                                                    "name": "srcOffset_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3798:11:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3783:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3783:27:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "srcOffset",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3770:9:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "3599:1:11"
                                            },
                                            {
                                              "name": "loopEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "3602:7:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "3596:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3596:14:11"
                                        },
                                        "nodeType": "YulForLoop",
                                        "post": {
                                          "nodeType": "YulBlock",
                                          "src": "3611:28:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "3613:24:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "i",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3622:1:11"
                                                  },
                                                  {
                                                    "name": "srcOffset_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3625:11:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3618:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3618:19:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3613:1:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "pre": {
                                          "nodeType": "YulBlock",
                                          "src": "3592:3:11",
                                          "statements": []
                                        },
                                        "src": "3588:236:11"
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "3872:166:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulVariableDeclaration",
                                              "src": "3890:43:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3917:3:11"
                                                      },
                                                      {
                                                        "name": "srcOffset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3922:9:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "3913:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3913:19:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3907:5:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3907:26:11"
                                              },
                                              "variables": [
                                                {
                                                  "name": "lastValue",
                                                  "nodeType": "YulTypedName",
                                                  "src": "3894:9:11",
                                                  "type": ""
                                                }
                                              ]
                                            },
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3957:6:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "lastValue",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3969:9:11"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "arguments": [
                                                                      {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "3996:1:11",
                                                                        "type": "",
                                                                        "value": "3"
                                                                      },
                                                                      {
                                                                        "name": "newLen",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "3999:6:11"
                                                                      }
                                                                    ],
                                                                    "functionName": {
                                                                      "name": "shl",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "3992:3:11"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "3992:14:11"
                                                                  },
                                                                  {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "4008:3:11",
                                                                    "type": "",
                                                                    "value": "248"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "and",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "3988:3:11"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "3988:24:11"
                                                              },
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "4018:1:11",
                                                                    "type": "",
                                                                    "value": "0"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "not",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "4014:3:11"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "4014:6:11"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "shr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3984:3:11"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "3984:37:11"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "not",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3980:3:11"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "3980:42:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "3965:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3965:58:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3950:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3950:74:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "3950:74:11"
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "loopEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "3843:7:11"
                                            },
                                            {
                                              "name": "newLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "3852:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "3840:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3840:19:11"
                                        },
                                        "nodeType": "YulIf",
                                        "src": "3837:201:11"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "4058:4:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "4072:1:11",
                                                      "type": "",
                                                      "value": "1"
                                                    },
                                                    {
                                                      "name": "newLen",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "4075:6:11"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4068:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "4068:14:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4084:1:11",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "4064:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4064:22:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "4051:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4051:36:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "4051:36:11"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "3434:663:11",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3439:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "4114:234:11",
                                    "statements": [
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "4128:14:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4141:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulTypedName",
                                            "src": "4132:5:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "4177:67:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "4195:35:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4214:3:11"
                                                      },
                                                      {
                                                        "name": "srcOffset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4219:9:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "4210:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4210:19:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4204:5:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4204:26:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4195:5:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "4158:6:11"
                                        },
                                        "nodeType": "YulIf",
                                        "src": "4155:89:11"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "4264:4:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4323:5:11"
                                                },
                                                {
                                                  "name": "newLen",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4330:6:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "extract_used_part_and_set_length_of_short_byte_array",
                                                "nodeType": "YulIdentifier",
                                                "src": "4270:52:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4270:67:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "4257:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4257:81:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "4257:81:11"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "4106:242:11",
                                  "value": "default"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "3414:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3422:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3411:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3411:14:11"
                              },
                              "nodeType": "YulSwitch",
                              "src": "3404:944:11"
                            }
                          ]
                        },
                        "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "slot",
                            "nodeType": "YulTypedName",
                            "src": "3083:4:11",
                            "type": ""
                          },
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "3089:3:11",
                            "type": ""
                          }
                        ],
                        "src": "3002:1352:11"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value2 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n}",
                  "id": 11,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b506040516200196038038062001960833981016040819052620000349162000194565b82828282826000620000478382620002b0565b506001620000568282620002b0565b5050600780546001600160a01b0319166001600160a01b038416179055506200007f336200008b565b5050505050506200037c565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000ef57600080fd5b81516001600160401b03808211156200010c576200010c620000c7565b604051601f8301601f19908116603f01168101908282118183101715620001375762000137620000c7565b816040528381526020925086838588010111156200015457600080fd5b600091505b8382101562000178578582018301518183018401529082019062000159565b838211156200018a5760008385830101525b9695505050505050565b600080600060608486031215620001aa57600080fd5b83516001600160401b0380821115620001c257600080fd5b620001d087838801620000dd565b94506020860151915080821115620001e757600080fd5b50620001f686828701620000dd565b604086015190935090506001600160a01b03811681146200021657600080fd5b809150509250925092565b600181811c908216806200023657607f821691505b6020821081036200025757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ab57600081815260208120601f850160051c81016020861015620002865750805b601f850160051c820191505b81811015620002a75782815560010162000292565b5050505b505050565b81516001600160401b03811115620002cc57620002cc620000c7565b620002e481620002dd845462000221565b846200025d565b602080601f8311600181146200031c5760008415620003035750858301515b600019600386901b1c1916600185901b178555620002a7565b600085815260208120601f198616915b828110156200034d578886015182559484019460019091019084016200032c565b50858210156200036c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6115d4806200038c6000396000f3fe6080604052600436106101ee5760003560e01c80636352211e1161010d578063a22cb465116100a0578063e8a3d4851161006f578063e8a3d48514610584578063e985e9c514610599578063f04e283e146105d4578063f2fde38b146105e7578063fee81cf4146105fa57600080fd5b8063a22cb46514610506578063b88d4fde14610526578063c87b56dd14610546578063d7533f021461056657600080fd5b806387a89ee6116100dc57806387a89ee61461049a5780638da5cb5b146104b85780639137c1a7146104d157806395d89b41146104f157600080fd5b80636352211e1461042557806370a0823114610445578063715018a6146104655780637359e41f1461046d57600080fd5b80631cd64df41161018557806342842e0e1161015457806342842e0e146103b35780634a4ee7b1146103d3578063514e62fc146103e657806354d1f13d1461041d57600080fd5b80631cd64df41461032357806323b872dd1461035a578063256929621461037a5780632de948071461038257600080fd5b806313a661ed116101c157806313a661ed146102ba57806318160ddd146102e8578063183a4f6e146102fd5780631c10893f1461031057600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611095565b61062b565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61063c565b60405161021f9190611115565b34801561025657600080fd5b50610280610265366004611128565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b3480156102a457600080fd5b506102b86102b3366004611158565b6106ca565b005b3480156102c657600080fd5b506102da6102d53660046111c9565b610790565b60405190815260200161021f565b3480156102f457600080fd5b506006546102da565b6102b861030b366004611128565b6107c3565b6102b861031e366004611158565b6107d0565b34801561032f57600080fd5b5061021361033e366004611158565b60609190911b638b78c6d8176000908152602090205481161490565b34801561036657600080fd5b506102b8610375366004611282565b6107f9565b6102b8610967565b34801561038e57600080fd5b506102da61039d3660046112be565b60601b638b78c6d8176000908152602090205490565b3480156103bf57600080fd5b506102b86103ce366004611282565b6109b8565b6102b86103e1366004611158565b610a8b565b3480156103f257600080fd5b50610213610401366004611158565b60609190911b638b78c6d8176000908152602090205416151590565b6102b8610ab0565b34801561043157600080fd5b50610280610440366004611128565b610aed565b34801561045157600080fd5b506102da6104603660046112be565b610b28565b6102b8610b6d565b34801561047957600080fd5b5061048d610488366004611128565b610bbb565b60405161021f91906112d9565b3480156104a657600080fd5b506007546001600160a01b0316610280565b3480156104c457600080fd5b50638b78c6d81954610280565b3480156104dd57600080fd5b506102b86104ec3660046112be565b610c03565b3480156104fd57600080fd5b5061023d610c72565b34801561051257600080fd5b506102b8610521366004611320565b610c7f565b34801561053257600080fd5b506102b861054136600461135c565b610ceb565b34801561055257600080fd5b5061023d610561366004611128565b610dae565b34801561057257600080fd5b506040516202a300815260200161021f565b34801561059057600080fd5b5061023d610e34565b3480156105a557600080fd5b506102136105b43660046113f7565b600560209081526000928352604080842090915290825290205460ff1681565b6102b86105e23660046112be565b610eab565b6102b86105f53660046112be565b610f2d565b34801561060657600080fd5b506102da6106153660046112be565b60601b63389a75e1176000908152602090205490565b600061063682610f94565b92915050565b600080546106499061142a565b80601f01602080910402602001604051908101604052809291908181526020018280546106759061142a565b80156106c25780601f10610697576101008083540402835291602001916106c2565b820191906000526020600020905b8154815290600101906020018083116106a557829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480159061071657506001600160a01b038116600090815260056020908152604080832033845290915290205460ff16155b156107345760405163ea8e4eb560e01b815260040160405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600060208201825160051b81015b8082146107bc57600160ff8351161b8317925060208201915061079e565b5050919050565b6107cd3382610fe2565b50565b638b78c6d8195433146107eb576382b429006000526004601cfd5b6107f58282611033565b5050565b6000818152600260205260409020546001600160a01b038481169116146108335760405163c6de3f2560e01b815260040160405180910390fd5b6001600160a01b03821661085a57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061089757506001600160a01b038316600090815260056020908152604080832033845290915290205460ff16155b80156108ba57506000818152600460205260409020546001600160a01b03163314155b156108d85760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006202a30067ffffffffffffffff164201905063389a75e13360601b1760005280602060002055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6109c38383836107f9565b6001600160a01b0382163b15610a8657604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611464565b6001600160e01b03191614610a8657604051633da6393160e01b815260040160405180910390fd5b505050565b638b78c6d819543314610aa6576382b429006000526004601cfd5b6107f58282610fe2565b63389a75e13360601b176000526000602060002055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6000818152600260205260409020546001600160a01b031680610b2357604051634d5e5fb360e01b815260040160405180910390fd5b919050565b60006001600160a01b038216610b515760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b031660009081526003602052604090205490565b638b78c6d819543314610b88576382b429006000526004601cfd5b6000337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36000638b78c6d81955565b606060206040510160005b8082526001841660051b820191508360011c93508315610be857600101610bc6565b5060405191508060405260208201810360051c825250919050565b638b78c6d819543314610c1e576382b429006000526004601cfd5b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527fd833c7cea3bce2562e201bf7e85016d0bc1173580c719f63378cc5d0457552b69060200160405180910390a150565b600180546106499061142a565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610cf68585856107f9565b6001600160a01b0384163b15610da757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d3c9033908a90899089908990600401611481565b6020604051808303816000875af1158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190611464565b6001600160e01b03191614610da757604051633da6393160e01b815260040160405180910390fd5b5050505050565b600754604051637833cb0b60e11b8152606091829182916001600160a01b03169063f067961690610de7908790859081906004016114d5565b600060405180830381865afa158015610e04573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e2c919081019061150a565b949350505050565b60075460408051631c97e82760e21b815290516060926001600160a01b03169163725fa09c9160048083019260009291908290030181865afa158015610e7e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea6919081019061150a565b905090565b638b78c6d819543314610ec6576382b429006000526004601cfd5b8060601b60601c905063389a75e18160601b1760005260206000208054421115610ef857636f5e88186000526004601cfd5b600081555080337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b638b78c6d819543314610f48576382b429006000526004601cfd5b6001600160a01b031680610f6457637448fbae6000526004601cfd5b80337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b60006301ffc9a760e01b6001600160e01b031983161480610fc557506380ac58cd60e01b6001600160e01b03198316145b806106365750506001600160e01b031916635b5e139f60e01b1490565b638b78c6d88260601b176000526020600020805482811681189050808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b638b78c6d88260601b17600052602060002081815417808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b6001600160e01b0319811681146107cd57600080fd5b6000602082840312156110a757600080fd5b81356110b28161107f565b9392505050565b60005b838110156110d45781810151838201526020016110bc565b838111156110e3576000848401525b50505050565b600081518084526111018160208601602086016110b9565b601f01601f19169290920160200192915050565b6020815260006110b260208301846110e9565b60006020828403121561113a57600080fd5b5035919050565b80356001600160a01b0381168114610b2357600080fd5b6000806040838503121561116b57600080fd5b61117483611141565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111c1576111c1611182565b604052919050565b600060208083850312156111dc57600080fd5b823567ffffffffffffffff808211156111f457600080fd5b818501915085601f83011261120857600080fd5b81358181111561121a5761121a611182565b8060051b915061122b848301611198565b818152918301840191848101908884111561124557600080fd5b938501935b83851015611276578435925060ff831683146112665760008081fd5b828252938501939085019061124a565b98975050505050505050565b60008060006060848603121561129757600080fd5b6112a084611141565b92506112ae60208501611141565b9150604084013590509250925092565b6000602082840312156112d057600080fd5b6110b282611141565b6020808252825182820181905260009190848201906040850190845b8181101561131457835160ff16835292840192918401916001016112f5565b50909695505050505050565b6000806040838503121561133357600080fd5b61133c83611141565b91506020830135801515811461135157600080fd5b809150509250929050565b60008060008060006080868803121561137457600080fd5b61137d86611141565b945061138b60208701611141565b935060408601359250606086013567ffffffffffffffff808211156113af57600080fd5b818801915088601f8301126113c357600080fd5b8135818111156113d257600080fd5b8960208285010111156113e457600080fd5b9699959850939650602001949392505050565b6000806040838503121561140a57600080fd5b61141383611141565b915061142160208401611141565b90509250929050565b600181811c9082168061143e57607f821691505b60208210810361145e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561147657600080fd5b81516110b28161107f565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b8381526060602082015260006114ee60608301856110e9565b828103604084015261150081856110e9565b9695505050505050565b60006020828403121561151c57600080fd5b815167ffffffffffffffff8082111561153457600080fd5b818401915084601f83011261154857600080fd5b81518181111561155a5761155a611182565b61156d601f8201601f1916602001611198565b915080825285602082850101111561158457600080fd5b6115958160208401602086016110b9565b5094935050505056fea264697066735822122010083e5b8217fe6aec9729846127d9ae66455fcf987c54d2f34bf4e9c3b2a49364736f6c634300080f0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1960 CODESIZE SUB DUP1 PUSH3 0x1960 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x194 JUMP JUMPDEST DUP3 DUP3 DUP3 DUP3 DUP3 PUSH1 0x0 PUSH3 0x47 DUP4 DUP3 PUSH3 0x2B0 JUMP JUMPDEST POP PUSH1 0x1 PUSH3 0x56 DUP3 DUP3 PUSH3 0x2B0 JUMP JUMPDEST POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE POP PUSH3 0x7F CALLER PUSH3 0x8B JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x37C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8B78C6D8 NOT DUP2 SWAP1 SSTORE DUP1 PUSH1 0x0 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP2 DUP1 LOG3 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x10C JUMPI PUSH3 0x10C PUSH3 0xC7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x137 JUMPI PUSH3 0x137 PUSH3 0xC7 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x178 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x159 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x18A JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1D0 DUP8 DUP4 DUP9 ADD PUSH3 0xDD JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1F6 DUP7 DUP3 DUP8 ADD PUSH3 0xDD JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x236 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x257 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x2AB JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x286 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x2A7 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x292 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x2CC JUMPI PUSH3 0x2CC PUSH3 0xC7 JUMP JUMPDEST PUSH3 0x2E4 DUP2 PUSH3 0x2DD DUP5 SLOAD PUSH3 0x221 JUMP JUMPDEST DUP5 PUSH3 0x25D JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x31C JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x303 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x2A7 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x34D JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x32C JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x36C JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x15D4 DUP1 PUSH3 0x38C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1EE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0x10D JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE8A3D485 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE8A3D485 EQ PUSH2 0x584 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xF04E283E EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0xFEE81CF4 EQ PUSH2 0x5FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x506 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0xD7533F02 EQ PUSH2 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x87A89EE6 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0x87A89EE6 EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x9137C1A7 EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x445 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0x7359E41F EQ PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1CD64DF4 GT PUSH2 0x185 JUMPI DUP1 PUSH4 0x42842E0E GT PUSH2 0x154 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0x4A4EE7B1 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x514E62FC EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x54D1F13D EQ PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1CD64DF4 EQ PUSH2 0x323 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0x25692962 EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0x2DE94807 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13A661ED GT PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x13A661ED EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0x183A4F6E EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0x1C10893F EQ PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x298 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x1095 JUMP JUMPDEST PUSH2 0x62B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21F SWAP2 SWAP1 PUSH2 0x1115 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x265 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH2 0x6CA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x790 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x2DA JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x30B CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x31E CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x33E CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD DUP2 AND EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x375 CALLDATASIZE PUSH1 0x4 PUSH2 0x1282 JUMP JUMPDEST PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x967 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x39D CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x1282 JUMP JUMPDEST PUSH2 0x9B8 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x3E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH2 0xA8B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0xAB0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x440 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x451 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x460 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0xB6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48D PUSH2 0x488 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21F SWAP2 SWAP1 PUSH2 0x12D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x280 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH4 0x8B78C6D8 NOT SLOAD PUSH2 0x280 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x4EC CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xC03 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0xC72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x521 CALLDATASIZE PUSH1 0x4 PUSH2 0x1320 JUMP JUMPDEST PUSH2 0xC7F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x135C JUMP JUMPDEST PUSH2 0xCEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0x561 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0xDAE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2A300 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0xE34 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x5B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x13F7 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x5E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xEAB JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x5F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xF2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x606 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x615 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x389A75E1 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x636 DUP3 PUSH2 0xF94 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x142A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x675 SWAP1 PUSH2 0x142A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C2 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x697 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C2 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6A5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x716 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x734 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEA8E4EB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP6 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP3 MLOAD PUSH1 0x5 SHL DUP2 ADD JUMPDEST DUP1 DUP3 EQ PUSH2 0x7BC JUMPI PUSH1 0x1 PUSH1 0xFF DUP4 MLOAD AND SHL DUP4 OR SWAP3 POP PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x79E JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7CD CALLER DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x7EB JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x7F5 DUP3 DUP3 PUSH2 0x1033 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x833 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC6DE3F25 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E469669 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x897 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x8BA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x8D8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEA8E4EB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE SWAP4 DUP7 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP6 DUP4 MSTORE PUSH1 0x2 DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE SWAP3 MLOAD DUP5 SWAP4 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2A300 PUSH8 0xFFFFFFFFFFFFFFFF AND TIMESTAMP ADD SWAP1 POP PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE DUP1 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xDBF36A107DA19E49527A7176A1BABF963B4B0FF8CDE35EE35D6CD8F1F9AC7E1D PUSH1 0x0 DUP1 LOG2 POP JUMP JUMPDEST PUSH2 0x9C3 DUP4 DUP4 DUP4 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO PUSH2 0xA86 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP1 DUP3 MSTORE CALLER PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x0 PUSH1 0x84 DUP5 ADD MSTORE SWAP1 SWAP2 SWAP1 DUP5 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA5E SWAP2 SWAP1 PUSH2 0x1464 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0xA86 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3DA63931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xAA6 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x7F5 DUP3 DUP3 PUSH2 0xFE2 JUMP JUMPDEST PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xFA7B8EAB7DA67F412CC9575ED43464468F9BFBAE89D1675917346CA6D8FE3C92 PUSH1 0x0 DUP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xB23 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D5E5FB3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xB51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xB88 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH1 0x0 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x20 PUSH1 0x40 MLOAD ADD PUSH1 0x0 JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1 DUP5 AND PUSH1 0x5 SHL DUP3 ADD SWAP2 POP DUP4 PUSH1 0x1 SHR SWAP4 POP DUP4 ISZERO PUSH2 0xBE8 JUMPI PUSH1 0x1 ADD PUSH2 0xBC6 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 POP DUP1 PUSH1 0x40 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SUB PUSH1 0x5 SHR DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xC1E JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xD833C7CEA3BCE2562E201BF7E85016D0BC1173580C719F63378CC5D0457552B6 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x142A JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0xCF6 DUP6 DUP6 DUP6 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP1 DUP3 MSTORE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0xD3C SWAP1 CALLER SWAP1 DUP11 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x1481 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7F SWAP2 SWAP1 PUSH2 0x1464 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3DA63931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x7833CB0B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xF0679616 SWAP1 PUSH2 0xDE7 SWAP1 DUP8 SWAP1 DUP6 SWAP1 DUP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x14D5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xE2C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x150A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C97E827 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x725FA09C SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE7E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xEA6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x150A JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xEC6 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 PUSH1 0x60 SHL PUSH1 0x60 SHR SWAP1 POP PUSH4 0x389A75E1 DUP2 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD TIMESTAMP GT ISZERO PUSH2 0xEF8 JUMPI PUSH4 0x6F5E8818 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 DUP2 SSTORE POP DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xF48 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xF64 JUMPI PUSH4 0x7448FBAE PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ DUP1 PUSH2 0xFC5 JUMPI POP PUSH4 0x80AC58CD PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST DUP1 PUSH2 0x636 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD DUP3 DUP2 AND DUP2 XOR SWAP1 POP DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD OR DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10B2 DUP2 PUSH2 0x107F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10BC JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x10E3 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1101 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x10B9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x10B2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x10E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x113A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x116B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1174 DUP4 PUSH2 0x1141 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x11C1 JUMPI PUSH2 0x11C1 PUSH2 0x1182 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x11F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x121A JUMPI PUSH2 0x121A PUSH2 0x1182 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x122B DUP5 DUP4 ADD PUSH2 0x1198 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x1245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x1276 JUMPI DUP5 CALLDATALOAD SWAP3 POP PUSH1 0xFF DUP4 AND DUP4 EQ PUSH2 0x1266 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x124A JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12A0 DUP5 PUSH2 0x1141 JUMP JUMPDEST SWAP3 POP PUSH2 0x12AE PUSH1 0x20 DUP6 ADD PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10B2 DUP3 PUSH2 0x1141 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1314 JUMPI DUP4 MLOAD PUSH1 0xFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x12F5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x133C DUP4 PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x137D DUP7 PUSH2 0x1141 JUMP JUMPDEST SWAP5 POP PUSH2 0x138B PUSH1 0x20 DUP8 ADD PUSH2 0x1141 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x13AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x13C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP PUSH1 0x20 ADD SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1413 DUP4 PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP PUSH2 0x1421 PUSH1 0x20 DUP5 ADD PUSH2 0x1141 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x143E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x145E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x10B2 DUP2 PUSH2 0x107F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND DUP3 MSTORE DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 DUP3 DUP5 PUSH1 0xA0 DUP5 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0xA0 DUP5 DUP5 ADD ADD MSTORE PUSH1 0xA0 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP4 ADD ADD SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x14EE PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x10E9 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1500 DUP2 DUP6 PUSH2 0x10E9 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x151C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1534 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x155A JUMPI PUSH2 0x155A PUSH2 0x1182 JUMP JUMPDEST PUSH2 0x156D PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x1198 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1595 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x10B9 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT ADDMOD RETURNDATACOPY JUMPDEST DUP3 OR INVALID PUSH11 0xEC9729846127D9AE66455F 0xCF SWAP9 PUSH29 0x54D2F34BF4E9C3B2A49364736F6C634300080F00330000000000000000 ",
              "sourceMap": "103:373:9:-:0;;;139:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;240:4;246:6;254:13;240:4;246:6;2699:4:6;:12;240:4:9;2699::6;:12;:::i;:::-;-1:-1:-1;2721:6:6;:16;2730:7;2721:6;:16;:::i;:::-;-1:-1:-1;;872:14:4::1;:32:::0;;-1:-1:-1;;;;;;872:32:4::1;-1:-1:-1::0;;;;;872:32:4;::::1;;::::0;;-1:-1:-1;910:28:4::1;927:10;910:16;:28::i;:::-;746:197:::0;;;139:132:9;;;103:373;;5240:405:2;-1:-1:-1;;;;;5386:26:2;-1:-1:-1;;5461:38:2;;;5386:26;5617:1;5577:38;5617:1;;5566:63;5240:405;:::o;14:127:11:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:11;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:11;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:11:o;1036:729::-;1144:6;1152;1160;1213:2;1201:9;1192:7;1188:23;1184:32;1181:52;;;1229:1;1226;1219:12;1181:52;1256:16;;-1:-1:-1;;;;;1321:14:11;;;1318:34;;;1348:1;1345;1338:12;1318:34;1371:61;1424:7;1415:6;1404:9;1400:22;1371:61;:::i;:::-;1361:71;;1478:2;1467:9;1463:18;1457:25;1441:41;;1507:2;1497:8;1494:16;1491:36;;;1523:1;1520;1513:12;1491:36;;1546:63;1601:7;1590:8;1579:9;1575:24;1546:63;:::i;:::-;1652:2;1637:18;;1631:25;1536:73;;-1:-1:-1;1631:25:11;-1:-1:-1;;;;;;1685:31:11;;1675:42;;1665:70;;1731:1;1728;1721:12;1665:70;1754:5;1744:15;;;1036:729;;;;;:::o;1770:380::-;1849:1;1845:12;;;;1892;;;1913:61;;1967:4;1959:6;1955:17;1945:27;;1913:61;2020:2;2012:6;2009:14;1989:18;1986:38;1983:161;;2066:10;2061:3;2057:20;2054:1;2047:31;2101:4;2098:1;2091:15;2129:4;2126:1;2119:15;1983:161;;1770:380;;;:::o;2281:545::-;2383:2;2378:3;2375:11;2372:448;;;2419:1;2444:5;2440:2;2433:17;2489:4;2485:2;2475:19;2559:2;2547:10;2543:19;2540:1;2536:27;2530:4;2526:38;2595:4;2583:10;2580:20;2577:47;;;-1:-1:-1;2618:4:11;2577:47;2673:2;2668:3;2664:12;2661:1;2657:20;2651:4;2647:31;2637:41;;2728:82;2746:2;2739:5;2736:13;2728:82;;;2791:17;;;2772:1;2761:13;2728:82;;;2732:3;;;2372:448;2281:545;;;:::o;3002:1352::-;3122:10;;-1:-1:-1;;;;;3144:30:11;;3141:56;;;3177:18;;:::i;:::-;3206:97;3296:6;3256:38;3288:4;3282:11;3256:38;:::i;:::-;3250:4;3206:97;:::i;:::-;3358:4;;3422:2;3411:14;;3439:1;3434:663;;;;4141:1;4158:6;4155:89;;;-1:-1:-1;4210:19:11;;;4204:26;4155:89;-1:-1:-1;;2959:1:11;2955:11;;;2951:24;2947:29;2937:40;2983:1;2979:11;;;2934:57;4257:81;;3404:944;;3434:663;2228:1;2221:14;;;2265:4;2252:18;;-1:-1:-1;;3470:20:11;;;3588:236;3602:7;3599:1;3596:14;3588:236;;;3691:19;;;3685:26;3670:42;;3783:27;;;;3751:1;3739:14;;;;3618:19;;3588:236;;;3592:3;3852:6;3843:7;3840:19;3837:201;;;3913:19;;;3907:26;-1:-1:-1;;3996:1:11;3992:14;;;4008:3;3988:24;3984:37;3980:42;3965:58;3950:74;;3837:201;-1:-1:-1;;;;;4084:1:11;4068:14;;;4064:22;4051:36;;-1:-1:-1;3002:1352:11:o;:::-;103:373:9;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_grantRoles_1137": {
                  "entryPoint": 4147,
                  "id": 1137,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_removeRoles_1147": {
                  "entryPoint": 4066,
                  "id": 1147,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_tokenData_3810": {
                  "entryPoint": null,
                  "id": 3810,
                  "parameterSlots": 1,
                  "returnSlots": 2
                },
                "@approve_3327": {
                  "entryPoint": 1738,
                  "id": 3327,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@balanceOf_3256": {
                  "entryPoint": 2856,
                  "id": 3256,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@cancelOwnershipHandover_1186": {
                  "entryPoint": 2736,
                  "id": 1186,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@completeOwnershipHandover_1196": {
                  "entryPoint": 3755,
                  "id": 1196,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@contractURI_2785": {
                  "entryPoint": 3636,
                  "id": 2785,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@getApproved_3261": {
                  "entryPoint": null,
                  "id": 3261,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@getERC721Storage_2801": {
                  "entryPoint": null,
                  "id": 2801,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@grantRoles_1212": {
                  "entryPoint": 2000,
                  "id": 1212,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@hasAllRoles_1294": {
                  "entryPoint": null,
                  "id": 1294,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@hasAnyRole_1282": {
                  "entryPoint": null,
                  "id": 1282,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@isApprovedForAll_3267": {
                  "entryPoint": null,
                  "id": 3267,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@name_3193": {
                  "entryPoint": 1596,
                  "id": 3193,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@ordinalsFromRoles_1326": {
                  "entryPoint": 3003,
                  "id": 1326,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@ownerOf_3234": {
                  "entryPoint": 2797,
                  "id": 3234,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@owner_1249": {
                  "entryPoint": null,
                  "id": 1249,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@ownershipHandoverExpiresAt_1259": {
                  "entryPoint": null,
                  "id": 1259,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@ownershipHandoverValidFor_1270": {
                  "entryPoint": null,
                  "id": 1270,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@renounceOwnership_1165": {
                  "entryPoint": 2925,
                  "id": 1165,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@renounceRoles_1241": {
                  "entryPoint": 1987,
                  "id": 1241,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@requestOwnershipHandover_1180": {
                  "entryPoint": 2407,
                  "id": 1180,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@revokeRoles_1228": {
                  "entryPoint": 2699,
                  "id": 1228,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@rolesFromOrdinals_1315": {
                  "entryPoint": 1936,
                  "id": 1315,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@rolesOf_1304": {
                  "entryPoint": null,
                  "id": 1304,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@safeTransferFrom_3472": {
                  "entryPoint": 2488,
                  "id": 3472,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@safeTransferFrom_3515": {
                  "entryPoint": 3307,
                  "id": 3515,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "@setApprovalForAll_3351": {
                  "entryPoint": 3199,
                  "id": 3351,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setStorage_2843": {
                  "entryPoint": 3075,
                  "id": 2843,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@supportsInterface_2764": {
                  "entryPoint": 1579,
                  "id": 2764,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@supportsInterface_3536": {
                  "entryPoint": 3988,
                  "id": 3536,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@symbol_3195": {
                  "entryPoint": 3186,
                  "id": 3195,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tokenURI_2827": {
                  "entryPoint": 3502,
                  "id": 2827,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@totalSupply_2793": {
                  "entryPoint": null,
                  "id": 2793,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@transferFrom_3431": {
                  "entryPoint": 2041,
                  "id": 3431,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@transferOwnership_1157": {
                  "entryPoint": 3885,
                  "id": 1157,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 4417,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 4798,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 5111,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 4738,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptr": {
                  "entryPoint": 4956,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_addresst_bool": {
                  "entryPoint": 4896,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 4440,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_array$_t_uint8_$dyn_memory_ptr": {
                  "entryPoint": 4553,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_bytes4": {
                  "entryPoint": 4245,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_bytes4_fromMemory": {
                  "entryPoint": 5220,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptr_fromMemory": {
                  "entryPoint": 5386,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 4392,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_string": {
                  "entryPoint": 4329,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": 5249,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_uint8_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 4825,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 4373,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": 5333,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 4504,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 4281,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 5162,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x41": {
                  "entryPoint": 4482,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_bytes4": {
                  "entryPoint": 4223,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:9717:11",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:11",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "58:87:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "123:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "132:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "135:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "125:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "125:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "81:5:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "92:5:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "103:3:11",
                                                "type": "",
                                                "value": "224"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "108:10:11",
                                                "type": "",
                                                "value": "0xffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "99:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "99:20:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "88:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "88:32:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "78:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "78:43:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "71:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "71:51:11"
                              },
                              "nodeType": "YulIf",
                              "src": "68:71:11"
                            }
                          ]
                        },
                        "name": "validator_revert_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "47:5:11",
                            "type": ""
                          }
                        ],
                        "src": "14:131:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "219:176:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "265:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "274:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "277:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "267:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "267:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "267:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "240:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "249:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "236:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "236:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "261:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "232:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "232:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "229:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "290:36:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "316:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "303:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "303:23:11"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "294:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "359:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "335:23:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "335:30:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "335:30:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "374:15:11",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "384:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "374:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "185:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "196:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "208:6:11",
                            "type": ""
                          }
                        ],
                        "src": "150:245:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "495:92:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "505:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "517:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "528:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "513:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "513:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "505:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "547:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "572:6:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "565:6:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "565:14:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "558:6:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "558:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "540:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "540:41:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "540:41:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "464:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "475:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "486:4:11",
                            "type": ""
                          }
                        ],
                        "src": "400:187:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "645:205:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "655:10:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "664:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "659:1:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "724:63:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "749:3:11"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "754:1:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "745:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "745:11:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "768:3:11"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "773:1:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "764:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "764:11:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "758:5:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "758:18:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "738:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "738:39:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "738:39:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "685:1:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "688:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "682:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "682:13:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "696:19:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "698:15:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "707:1:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "710:2:11",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "703:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "703:10:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "698:1:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "678:3:11",
                                "statements": []
                              },
                              "src": "674:113:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "813:31:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "826:3:11"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "831:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "822:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "822:16:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "840:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "815:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "815:27:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "815:27:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "802:1:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "805:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "799:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "799:13:11"
                              },
                              "nodeType": "YulIf",
                              "src": "796:48:11"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "623:3:11",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "628:3:11",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "633:6:11",
                            "type": ""
                          }
                        ],
                        "src": "592:258:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "905:208:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "915:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "935:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "929:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "929:12:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "919:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "957:3:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "962:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "950:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "950:19:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "950:19:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1004:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1011:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1000:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1000:16:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1022:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1027:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1018:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1018:14:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1034:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "978:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "978:63:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "978:63:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1050:57:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1065:3:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "1078:6:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1086:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "1074:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1074:15:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1095:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "1091:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1091:7:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1070:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1070:29:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1061:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1061:39:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1102:4:11",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1057:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1057:50:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "1050:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_string",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "882:5:11",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "889:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "897:3:11",
                            "type": ""
                          }
                        ],
                        "src": "855:258:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1239:99:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1256:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1267:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1249:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1249:21:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1249:21:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1279:53:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1305:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1317:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1328:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1313:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1313:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "1287:17:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1287:45:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1279:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1208:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1219:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1230:4:11",
                            "type": ""
                          }
                        ],
                        "src": "1118:220:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1413:110:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1459:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1468:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1471:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1461:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1461:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1461:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1434:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1443:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1430:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1430:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1455:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1426:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1426:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1423:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1484:33:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1507:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1494:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1494:23:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1484:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1379:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1390:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1402:6:11",
                            "type": ""
                          }
                        ],
                        "src": "1343:180:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1629:102:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1639:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1651:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1662:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1647:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1647:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1639:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1681:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1696:6:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1712:3:11",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1717:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1708:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1708:11:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1721:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1704:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1704:19:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1692:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1692:32:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1674:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1674:51:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1674:51:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1598:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1609:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1620:4:11",
                            "type": ""
                          }
                        ],
                        "src": "1528:203:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1785:124:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1795:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1817:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1804:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1804:20:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1795:5:11"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1887:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1896:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1899:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1889:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1889:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1889:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1846:5:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1857:5:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1872:3:11",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1877:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1868:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1868:11:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1881:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "1864:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1864:19:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1853:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1853:31:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1843:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1843:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1836:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1836:50:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1833:70:11"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1764:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1775:5:11",
                            "type": ""
                          }
                        ],
                        "src": "1736:173:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2001:167:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2047:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2056:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2059:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2049:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2049:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2049:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2022:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2031:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2018:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2018:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2043:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2014:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2014:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2011:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2072:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2101:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2082:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2082:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2072:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2120:42:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2147:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2158:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2143:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2143:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2130:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2130:32:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2120:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1959:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1970:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1982:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1990:6:11",
                            "type": ""
                          }
                        ],
                        "src": "1914:254:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2205:95:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2222:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2229:3:11",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2234:10:11",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2225:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2225:20:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2215:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2215:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2215:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2262:1:11",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2265:4:11",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2255:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2255:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2255:15:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2286:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2289:4:11",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2279:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2279:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2279:15:11"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "2173:127:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2350:230:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2360:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2376:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2370:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2370:9:11"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "2360:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2388:58:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2410:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "2426:4:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2432:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2422:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2422:13:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2441:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "2437:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2437:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2418:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2418:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2406:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2406:40:11"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "2392:10:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2521:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "2523:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2523:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2523:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2464:10:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2476:18:11",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2461:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2461:34:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2500:10:11"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2512:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2497:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2497:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "2458:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2458:62:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2455:88:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2559:2:11",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2563:10:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2552:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2552:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2552:22:11"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "2330:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "2339:6:11",
                            "type": ""
                          }
                        ],
                        "src": "2305:275:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2678:1020:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2688:12:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2698:2:11",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2692:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2745:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2754:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2757:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2747:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2747:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2747:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2720:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2729:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2716:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2716:23:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2741:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2712:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2712:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2709:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2770:37:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2797:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2784:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2784:23:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2774:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2816:28:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2826:18:11",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2820:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2871:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2880:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2883:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2873:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2873:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2873:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2859:6:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2867:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2856:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2856:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2853:34:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2896:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2910:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2921:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2906:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2906:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "2900:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2976:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2985:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2988:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2978:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2978:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2978:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2955:2:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2959:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2951:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2951:13:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2966:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2947:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2947:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2940:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2940:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2937:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3001:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3024:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3011:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3011:16:11"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "3005:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3050:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "3052:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3052:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3052:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3042:2:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3046:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3039:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3039:10:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3036:36:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3081:20:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3095:1:11",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3098:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "3091:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3091:10:11"
                              },
                              "variables": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulTypedName",
                                  "src": "3085:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3110:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "3141:2:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3145:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3137:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3137:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3121:15:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3121:28:11"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "3114:3:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3158:16:11",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "3171:3:11"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3162:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "3190:3:11"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3195:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3183:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3183:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3183:15:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3207:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "3218:3:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3223:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3214:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3214:12:11"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3207:3:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3235:34:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "3257:2:11"
                                      },
                                      {
                                        "name": "_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "3261:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3253:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3253:11:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3266:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3249:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3249:20:11"
                              },
                              "variables": [
                                {
                                  "name": "srcEnd",
                                  "nodeType": "YulTypedName",
                                  "src": "3239:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3301:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3310:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3313:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3303:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3303:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3303:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "srcEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3284:6:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3292:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3281:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3281:19:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3278:39:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3326:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3341:2:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3345:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3337:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3337:11:11"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "3330:3:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3413:255:11",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3427:30:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "3453:3:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "calldataload",
                                        "nodeType": "YulIdentifier",
                                        "src": "3440:12:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3440:17:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "3431:5:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "3521:74:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "3539:11:11",
                                          "value": {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3549:1:11",
                                            "type": "",
                                            "value": "0"
                                          },
                                          "variables": [
                                            {
                                              "name": "_6",
                                              "nodeType": "YulTypedName",
                                              "src": "3543:2:11",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "_6",
                                                "nodeType": "YulIdentifier",
                                                "src": "3574:2:11"
                                              },
                                              {
                                                "name": "_6",
                                                "nodeType": "YulIdentifier",
                                                "src": "3578:2:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "3567:6:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3567:14:11"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "3567:14:11"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "3483:5:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3494:5:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3501:4:11",
                                                  "type": "",
                                                  "value": "0xff"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "3490:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3490:16:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "3480:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3480:27:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "3473:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3473:35:11"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "3470:125:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "3615:3:11"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "3620:5:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3608:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3608:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3608:18:11"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3639:19:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "3650:3:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3655:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3646:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3646:12:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "3639:3:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "3368:3:11"
                                  },
                                  {
                                    "name": "srcEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3373:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3365:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3365:15:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3381:23:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3383:19:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "3394:3:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3399:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3390:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3390:12:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "3383:3:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3361:3:11",
                                "statements": []
                              },
                              "src": "3357:311:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3677:15:11",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "3687:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3677:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_uint8_$dyn_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2644:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2655:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2667:6:11",
                            "type": ""
                          }
                        ],
                        "src": "2585:1113:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3804:76:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3814:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3826:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3837:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3822:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3822:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3814:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3856:9:11"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3867:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3849:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3849:25:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3849:25:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3773:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3784:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3795:4:11",
                            "type": ""
                          }
                        ],
                        "src": "3703:177:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3989:224:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4035:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4044:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4047:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4037:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4037:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4037:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4010:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4019:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4006:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4006:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4031:2:11",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4002:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4002:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3999:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4060:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4089:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4070:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4070:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4060:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4108:48:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4141:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4152:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4137:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4137:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4118:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4118:38:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4108:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4165:42:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4192:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4203:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4188:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4188:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4175:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4175:32:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4165:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3939:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3950:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3962:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3970:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3978:6:11",
                            "type": ""
                          }
                        ],
                        "src": "3885:328:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4288:116:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4334:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4343:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4346:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4336:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4336:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4336:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4309:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4318:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4305:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4305:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4330:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4301:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4301:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "4298:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4359:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4388:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4369:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4369:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4359:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4254:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4265:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4277:6:11",
                            "type": ""
                          }
                        ],
                        "src": "4218:186:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4556:492:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4566:12:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4576:2:11",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4570:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4587:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4605:9:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4616:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4601:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4601:18:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4591:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4635:9:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4646:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4628:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4628:21:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4628:21:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4658:17:11",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "4669:6:11"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "4662:3:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4684:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4704:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4698:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4698:13:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4688:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4727:6:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4735:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4720:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4720:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4720:22:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4751:25:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4762:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4773:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4758:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4758:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "4751:3:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4785:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4803:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4811:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4799:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4799:15:11"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "4789:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4823:10:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4832:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "4827:1:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4891:131:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "4912:3:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4927:6:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "4921:5:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4921:13:11"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4936:4:11",
                                              "type": "",
                                              "value": "0xff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "4917:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4917:24:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4905:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4905:37:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4905:37:11"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4955:19:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "4966:3:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4971:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4962:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4962:12:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4955:3:11"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4987:25:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5001:6:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5009:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4997:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4997:15:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4987:6:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4853:1:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4856:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4850:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4850:13:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4864:18:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4866:14:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4875:1:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4878:1:11",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4871:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4871:9:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "4866:1:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "4846:3:11",
                                "statements": []
                              },
                              "src": "4842:180:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5031:11:11",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5039:3:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5031:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_uint8_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4525:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4536:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4547:4:11",
                            "type": ""
                          }
                        ],
                        "src": "4409:639:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5137:263:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5183:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5192:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5195:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5185:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5185:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5185:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5158:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5167:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5154:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5154:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5179:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5150:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5150:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5147:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5208:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5237:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5218:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5218:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5208:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5256:45:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5286:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5297:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5282:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5282:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5269:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5269:32:11"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5260:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5354:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5363:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5366:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5356:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5356:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5356:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5323:5:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "5344:5:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "5337:6:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5337:13:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "5330:6:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5330:21:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5320:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5320:32:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5313:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5313:40:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5310:60:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5379:15:11",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5389:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5379:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5095:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5106:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5118:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5126:6:11",
                            "type": ""
                          }
                        ],
                        "src": "5053:347:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5545:668:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5592:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5601:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5604:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5594:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5594:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5594:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5566:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5575:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5562:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5562:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5587:3:11",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5558:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5558:33:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5555:53:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5617:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5646:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5627:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5627:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5617:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5665:48:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5698:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5709:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5694:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5694:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5675:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5675:38:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5665:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5722:42:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5749:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5760:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5745:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5745:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5732:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5732:32:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5722:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5773:46:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5804:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5815:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5800:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5800:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5787:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5787:32:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5777:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5828:28:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5838:18:11",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5832:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5883:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5892:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5895:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5885:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5885:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5885:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5871:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5879:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5868:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5868:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5865:34:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5908:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5922:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5933:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5918:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5918:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5912:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5988:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5997:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6000:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5990:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5990:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5990:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "5967:2:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5971:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5963:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5963:13:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5978:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5959:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5959:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5952:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5952:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5949:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6013:30:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6040:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6027:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6027:16:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6017:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6070:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6079:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6082:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6072:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6072:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6072:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6058:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6066:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6055:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6055:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6052:34:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6136:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6145:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6148:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6138:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6138:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6138:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6109:2:11"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "6113:6:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6105:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6105:15:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6122:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6101:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6101:24:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "6127:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6098:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6098:37:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6095:57:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6161:21:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6175:2:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6179:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6171:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6171:11:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "6161:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6191:16:11",
                              "value": {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "6201:6:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "6191:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5479:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5490:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5502:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5510:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5518:6:11",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "5526:6:11",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "5534:6:11",
                            "type": ""
                          }
                        ],
                        "src": "5405:808:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6317:101:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6327:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6339:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6350:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6335:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6335:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6327:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6369:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6384:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6392:18:11",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6380:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6380:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6362:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6362:50:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6362:50:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6286:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6297:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6308:4:11",
                            "type": ""
                          }
                        ],
                        "src": "6218:200:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6510:173:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6556:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6565:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6568:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6558:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6558:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6558:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6531:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6540:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6527:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6527:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6552:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6523:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6523:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6520:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6581:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6610:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6591:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6591:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6581:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6629:48:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6662:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6673:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6658:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6658:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "6639:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6639:38:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6629:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6468:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6479:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6491:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6499:6:11",
                            "type": ""
                          }
                        ],
                        "src": "6423:260:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6743:325:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6753:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6767:1:11",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "6770:4:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6763:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6763:12:11"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "6753:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6784:38:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "6814:4:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6820:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "6810:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6810:12:11"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "6788:18:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6861:31:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6863:27:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "6877:6:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6885:4:11",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "6873:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6873:17:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "6863:6:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "6841:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6834:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6834:26:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6831:61:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6951:111:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6972:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6979:3:11",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6984:10:11",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "6975:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6975:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6965:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6965:31:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6965:31:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7016:1:11",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7019:4:11",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7009:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7009:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7009:15:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7044:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7047:4:11",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7037:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7037:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7037:15:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "6907:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "6930:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6938:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6927:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6927:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "6904:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6904:38:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6901:161:11"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "6723:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6732:6:11",
                            "type": ""
                          }
                        ],
                        "src": "6688:380:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7330:298:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7340:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7358:3:11",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7363:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7354:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7354:11:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7367:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "7350:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7350:19:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7344:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7385:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7400:6:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7408:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7396:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7396:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7378:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7378:34:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7378:34:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7432:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7443:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7428:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7428:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7452:6:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7460:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7448:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7448:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7421:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7421:43:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7421:43:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7484:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7495:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7480:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7480:18:11"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7500:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7473:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7473:34:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7473:34:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7527:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7538:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7523:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7523:18:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7543:3:11",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7516:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7516:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7516:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7567:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7578:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7563:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7563:19:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7584:1:11",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7556:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7556:30:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7556:30:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7595:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7607:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7618:3:11",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7603:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7603:19:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7595:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7283:9:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7294:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7302:6:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7310:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7321:4:11",
                            "type": ""
                          }
                        ],
                        "src": "7073:555:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7713:169:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7759:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7768:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7771:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7761:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7761:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7761:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7734:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7743:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7730:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7730:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7755:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7726:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7726:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "7723:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7784:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7803:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7797:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7797:16:11"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "7788:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "7846:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "7822:23:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7822:30:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7822:30:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7861:15:11",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7871:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7861:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7679:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7690:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7702:6:11",
                            "type": ""
                          }
                        ],
                        "src": "7633:249:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8100:449:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8110:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8128:3:11",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8133:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8124:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8124:11:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8137:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8120:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8120:19:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8114:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8155:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8170:6:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8178:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8166:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8166:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8148:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8148:34:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8148:34:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8202:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8213:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8198:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8198:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8222:6:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8230:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8218:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8218:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8191:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8191:43:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8191:43:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8254:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8265:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8250:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8250:18:11"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8270:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8243:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8243:34:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8243:34:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8297:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8308:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8293:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8293:18:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8313:3:11",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8286:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8286:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8286:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8337:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8348:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8333:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8333:19:11"
                                  },
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "8354:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8326:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8326:35:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8326:35:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8387:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8398:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8383:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8383:19:11"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "8404:6:11"
                                  },
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "8412:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "8370:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8370:49:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8370:49:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "8443:9:11"
                                          },
                                          {
                                            "name": "value4",
                                            "nodeType": "YulIdentifier",
                                            "src": "8454:6:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8439:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8439:22:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8463:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8435:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8435:32:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8469:1:11",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8428:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8428:43:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8428:43:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8480:63:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8496:9:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value4",
                                                "nodeType": "YulIdentifier",
                                                "src": "8515:6:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8523:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "8511:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8511:15:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8532:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "8528:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8528:7:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "8507:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8507:29:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8492:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8492:45:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8539:3:11",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8488:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8488:55:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8480:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8037:9:11",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "8048:6:11",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8056:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8064:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8072:6:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8080:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8091:4:11",
                            "type": ""
                          }
                        ],
                        "src": "7887:662:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8747:257:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8764:9:11"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8775:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8757:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8757:25:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8757:25:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8802:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8813:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8798:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8798:18:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8818:2:11",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8791:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8791:30:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8791:30:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8830:59:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8862:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8874:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8885:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8870:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8870:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "8844:17:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8844:45:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8834:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8909:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8920:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8905:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8905:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "tail_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8929:6:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8937:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8925:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8925:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8898:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8898:50:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8898:50:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8957:41:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8983:6:11"
                                  },
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8991:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "8965:17:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8965:33:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8957:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8700:9:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8711:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8719:6:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8727:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8738:4:11",
                            "type": ""
                          }
                        ],
                        "src": "8554:450:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9100:615:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9146:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9155:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9158:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9148:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9148:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9148:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9121:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9130:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9117:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9117:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9142:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9113:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9113:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9110:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9171:30:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9191:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9185:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9185:16:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "9175:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9210:28:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9220:18:11",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9214:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9265:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9274:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9277:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9267:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9267:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9267:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "9253:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9261:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9250:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9250:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9247:34:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9290:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9304:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "9315:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9300:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9300:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "9294:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9370:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9379:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9382:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9372:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9372:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9372:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "9349:2:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9353:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9345:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9345:13:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9360:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9341:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9341:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9334:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9334:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9331:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9395:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9411:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9405:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9405:9:11"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "9399:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9437:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "9439:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9439:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9439:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "9429:2:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9433:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9426:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9426:10:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9423:36:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9468:66:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "9509:2:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9513:4:11",
                                                "type": "",
                                                "value": "0x1f"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "9505:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9505:13:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9524:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9520:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9520:7:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "9501:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9501:27:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9530:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9497:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9497:36:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "9481:15:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9481:53:11"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "9472:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "9550:5:11"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "9557:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9543:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9543:17:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9543:17:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9606:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9615:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9618:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9608:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9608:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9608:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "9583:2:11"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "9587:2:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9579:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9579:11:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9592:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9575:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9575:20:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "9597:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9572:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9572:33:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9569:53:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "9657:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9661:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9653:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9653:11:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "9670:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9677:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9666:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9666:14:11"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "9682:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "9631:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9631:54:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9631:54:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9694:15:11",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "9704:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "9694:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9066:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9077:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9089:6:11",
                            "type": ""
                          }
                        ],
                        "src": "9009:706:11"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function validator_revert_bytes4(value)\n    {\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_array$_t_uint8_$dyn_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := calldataload(src)\n            if iszero(eq(value, and(value, 0xff)))\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_array$_t_uint8_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value3 := add(_2, 32)\n        value4 := length\n    }\n    function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        mstore(add(headStart, 128), 0)\n        tail := add(headStart, 160)\n    }\n    function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        mstore(add(headStart, 128), value4)\n        calldatacopy(add(headStart, 160), value3, value4)\n        mstore(add(add(headStart, value4), 160), 0)\n        tail := add(add(headStart, and(add(value4, 31), not(31))), 160)\n    }\n    function abi_encode_tuple_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 96)\n        let tail_1 := abi_encode_string(value1, add(headStart, 96))\n        mstore(add(headStart, 64), sub(tail_1, headStart))\n        tail := abi_encode_string(value2, tail_1)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_3, 0x1f), not(31)), 32))\n        mstore(array, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(array, 32), _3)\n        value0 := array\n    }\n}",
                  "id": 11,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600436106101ee5760003560e01c80636352211e1161010d578063a22cb465116100a0578063e8a3d4851161006f578063e8a3d48514610584578063e985e9c514610599578063f04e283e146105d4578063f2fde38b146105e7578063fee81cf4146105fa57600080fd5b8063a22cb46514610506578063b88d4fde14610526578063c87b56dd14610546578063d7533f021461056657600080fd5b806387a89ee6116100dc57806387a89ee61461049a5780638da5cb5b146104b85780639137c1a7146104d157806395d89b41146104f157600080fd5b80636352211e1461042557806370a0823114610445578063715018a6146104655780637359e41f1461046d57600080fd5b80631cd64df41161018557806342842e0e1161015457806342842e0e146103b35780634a4ee7b1146103d3578063514e62fc146103e657806354d1f13d1461041d57600080fd5b80631cd64df41461032357806323b872dd1461035a578063256929621461037a5780632de948071461038257600080fd5b806313a661ed116101c157806313a661ed146102ba57806318160ddd146102e8578063183a4f6e146102fd5780631c10893f1461031057600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611095565b61062b565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d61063c565b60405161021f9190611115565b34801561025657600080fd5b50610280610265366004611128565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b3480156102a457600080fd5b506102b86102b3366004611158565b6106ca565b005b3480156102c657600080fd5b506102da6102d53660046111c9565b610790565b60405190815260200161021f565b3480156102f457600080fd5b506006546102da565b6102b861030b366004611128565b6107c3565b6102b861031e366004611158565b6107d0565b34801561032f57600080fd5b5061021361033e366004611158565b60609190911b638b78c6d8176000908152602090205481161490565b34801561036657600080fd5b506102b8610375366004611282565b6107f9565b6102b8610967565b34801561038e57600080fd5b506102da61039d3660046112be565b60601b638b78c6d8176000908152602090205490565b3480156103bf57600080fd5b506102b86103ce366004611282565b6109b8565b6102b86103e1366004611158565b610a8b565b3480156103f257600080fd5b50610213610401366004611158565b60609190911b638b78c6d8176000908152602090205416151590565b6102b8610ab0565b34801561043157600080fd5b50610280610440366004611128565b610aed565b34801561045157600080fd5b506102da6104603660046112be565b610b28565b6102b8610b6d565b34801561047957600080fd5b5061048d610488366004611128565b610bbb565b60405161021f91906112d9565b3480156104a657600080fd5b506007546001600160a01b0316610280565b3480156104c457600080fd5b50638b78c6d81954610280565b3480156104dd57600080fd5b506102b86104ec3660046112be565b610c03565b3480156104fd57600080fd5b5061023d610c72565b34801561051257600080fd5b506102b8610521366004611320565b610c7f565b34801561053257600080fd5b506102b861054136600461135c565b610ceb565b34801561055257600080fd5b5061023d610561366004611128565b610dae565b34801561057257600080fd5b506040516202a300815260200161021f565b34801561059057600080fd5b5061023d610e34565b3480156105a557600080fd5b506102136105b43660046113f7565b600560209081526000928352604080842090915290825290205460ff1681565b6102b86105e23660046112be565b610eab565b6102b86105f53660046112be565b610f2d565b34801561060657600080fd5b506102da6106153660046112be565b60601b63389a75e1176000908152602090205490565b600061063682610f94565b92915050565b600080546106499061142a565b80601f01602080910402602001604051908101604052809291908181526020018280546106759061142a565b80156106c25780601f10610697576101008083540402835291602001916106c2565b820191906000526020600020905b8154815290600101906020018083116106a557829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b031633811480159061071657506001600160a01b038116600090815260056020908152604080832033845290915290205460ff16155b156107345760405163ea8e4eb560e01b815260040160405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600060208201825160051b81015b8082146107bc57600160ff8351161b8317925060208201915061079e565b5050919050565b6107cd3382610fe2565b50565b638b78c6d8195433146107eb576382b429006000526004601cfd5b6107f58282611033565b5050565b6000818152600260205260409020546001600160a01b038481169116146108335760405163c6de3f2560e01b815260040160405180910390fd5b6001600160a01b03821661085a57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061089757506001600160a01b038316600090815260056020908152604080832033845290915290205460ff16155b80156108ba57506000818152600460205260409020546001600160a01b03163314155b156108d85760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006202a30067ffffffffffffffff164201905063389a75e13360601b1760005280602060002055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6109c38383836107f9565b6001600160a01b0382163b15610a8657604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611464565b6001600160e01b03191614610a8657604051633da6393160e01b815260040160405180910390fd5b505050565b638b78c6d819543314610aa6576382b429006000526004601cfd5b6107f58282610fe2565b63389a75e13360601b176000526000602060002055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6000818152600260205260409020546001600160a01b031680610b2357604051634d5e5fb360e01b815260040160405180910390fd5b919050565b60006001600160a01b038216610b515760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b031660009081526003602052604090205490565b638b78c6d819543314610b88576382b429006000526004601cfd5b6000337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36000638b78c6d81955565b606060206040510160005b8082526001841660051b820191508360011c93508315610be857600101610bc6565b5060405191508060405260208201810360051c825250919050565b638b78c6d819543314610c1e576382b429006000526004601cfd5b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527fd833c7cea3bce2562e201bf7e85016d0bc1173580c719f63378cc5d0457552b69060200160405180910390a150565b600180546106499061142a565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610cf68585856107f9565b6001600160a01b0384163b15610da757604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d3c9033908a90899089908990600401611481565b6020604051808303816000875af1158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190611464565b6001600160e01b03191614610da757604051633da6393160e01b815260040160405180910390fd5b5050505050565b600754604051637833cb0b60e11b8152606091829182916001600160a01b03169063f067961690610de7908790859081906004016114d5565b600060405180830381865afa158015610e04573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e2c919081019061150a565b949350505050565b60075460408051631c97e82760e21b815290516060926001600160a01b03169163725fa09c9160048083019260009291908290030181865afa158015610e7e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea6919081019061150a565b905090565b638b78c6d819543314610ec6576382b429006000526004601cfd5b8060601b60601c905063389a75e18160601b1760005260206000208054421115610ef857636f5e88186000526004601cfd5b600081555080337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b638b78c6d819543314610f48576382b429006000526004601cfd5b6001600160a01b031680610f6457637448fbae6000526004601cfd5b80337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b60006301ffc9a760e01b6001600160e01b031983161480610fc557506380ac58cd60e01b6001600160e01b03198316145b806106365750506001600160e01b031916635b5e139f60e01b1490565b638b78c6d88260601b176000526020600020805482811681189050808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b638b78c6d88260601b17600052602060002081815417808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b6001600160e01b0319811681146107cd57600080fd5b6000602082840312156110a757600080fd5b81356110b28161107f565b9392505050565b60005b838110156110d45781810151838201526020016110bc565b838111156110e3576000848401525b50505050565b600081518084526111018160208601602086016110b9565b601f01601f19169290920160200192915050565b6020815260006110b260208301846110e9565b60006020828403121561113a57600080fd5b5035919050565b80356001600160a01b0381168114610b2357600080fd5b6000806040838503121561116b57600080fd5b61117483611141565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111c1576111c1611182565b604052919050565b600060208083850312156111dc57600080fd5b823567ffffffffffffffff808211156111f457600080fd5b818501915085601f83011261120857600080fd5b81358181111561121a5761121a611182565b8060051b915061122b848301611198565b818152918301840191848101908884111561124557600080fd5b938501935b83851015611276578435925060ff831683146112665760008081fd5b828252938501939085019061124a565b98975050505050505050565b60008060006060848603121561129757600080fd5b6112a084611141565b92506112ae60208501611141565b9150604084013590509250925092565b6000602082840312156112d057600080fd5b6110b282611141565b6020808252825182820181905260009190848201906040850190845b8181101561131457835160ff16835292840192918401916001016112f5565b50909695505050505050565b6000806040838503121561133357600080fd5b61133c83611141565b91506020830135801515811461135157600080fd5b809150509250929050565b60008060008060006080868803121561137457600080fd5b61137d86611141565b945061138b60208701611141565b935060408601359250606086013567ffffffffffffffff808211156113af57600080fd5b818801915088601f8301126113c357600080fd5b8135818111156113d257600080fd5b8960208285010111156113e457600080fd5b9699959850939650602001949392505050565b6000806040838503121561140a57600080fd5b61141383611141565b915061142160208401611141565b90509250929050565b600181811c9082168061143e57607f821691505b60208210810361145e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561147657600080fd5b81516110b28161107f565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b8381526060602082015260006114ee60608301856110e9565b828103604084015261150081856110e9565b9695505050505050565b60006020828403121561151c57600080fd5b815167ffffffffffffffff8082111561153457600080fd5b818401915084601f83011261154857600080fd5b81518181111561155a5761155a611182565b61156d601f8201601f1916602001611198565b915080825285602082850101111561158457600080fd5b6115958160208401602086016110b9565b5094935050505056fea264697066735822122010083e5b8217fe6aec9729846127d9ae66455fcf987c54d2f34bf4e9c3b2a49364736f6c634300080f0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1EE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0x10D JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE8A3D485 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE8A3D485 EQ PUSH2 0x584 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xF04E283E EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0xFEE81CF4 EQ PUSH2 0x5FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x506 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0xD7533F02 EQ PUSH2 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x87A89EE6 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0x87A89EE6 EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x9137C1A7 EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x445 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0x7359E41F EQ PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1CD64DF4 GT PUSH2 0x185 JUMPI DUP1 PUSH4 0x42842E0E GT PUSH2 0x154 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0x4A4EE7B1 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x514E62FC EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x54D1F13D EQ PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1CD64DF4 EQ PUSH2 0x323 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0x25692962 EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0x2DE94807 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13A661ED GT PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x13A661ED EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0x183A4F6E EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0x1C10893F EQ PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x298 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x1095 JUMP JUMPDEST PUSH2 0x62B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21F SWAP2 SWAP1 PUSH2 0x1115 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x265 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH2 0x6CA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x790 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x2DA JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x30B CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x31E CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x33E CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD DUP2 AND EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x375 CALLDATASIZE PUSH1 0x4 PUSH2 0x1282 JUMP JUMPDEST PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x967 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x39D CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x1282 JUMP JUMPDEST PUSH2 0x9B8 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x3E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH2 0xA8B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0xAB0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x440 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x451 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x460 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0xB6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48D PUSH2 0x488 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21F SWAP2 SWAP1 PUSH2 0x12D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x280 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH4 0x8B78C6D8 NOT SLOAD PUSH2 0x280 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x4EC CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xC03 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0xC72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x521 CALLDATASIZE PUSH1 0x4 PUSH2 0x1320 JUMP JUMPDEST PUSH2 0xC7F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B8 PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x135C JUMP JUMPDEST PUSH2 0xCEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0x561 CALLDATASIZE PUSH1 0x4 PUSH2 0x1128 JUMP JUMPDEST PUSH2 0xDAE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2A300 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D PUSH2 0xE34 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x5B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x13F7 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x5E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xEAB JUMP JUMPDEST PUSH2 0x2B8 PUSH2 0x5F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH2 0xF2D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x606 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x615 CALLDATASIZE PUSH1 0x4 PUSH2 0x12BE JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x389A75E1 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x636 DUP3 PUSH2 0xF94 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x142A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x675 SWAP1 PUSH2 0x142A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C2 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x697 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C2 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6A5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x716 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x734 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEA8E4EB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP6 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP3 MLOAD PUSH1 0x5 SHL DUP2 ADD JUMPDEST DUP1 DUP3 EQ PUSH2 0x7BC JUMPI PUSH1 0x1 PUSH1 0xFF DUP4 MLOAD AND SHL DUP4 OR SWAP3 POP PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x79E JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7CD CALLER DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x7EB JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x7F5 DUP3 DUP3 PUSH2 0x1033 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x833 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC6DE3F25 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x4E469669 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x897 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x8BA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x8D8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEA8E4EB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 SSTORE SWAP4 DUP7 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP6 DUP4 MSTORE PUSH1 0x2 DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE SWAP3 MLOAD DUP5 SWAP4 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2A300 PUSH8 0xFFFFFFFFFFFFFFFF AND TIMESTAMP ADD SWAP1 POP PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE DUP1 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xDBF36A107DA19E49527A7176A1BABF963B4B0FF8CDE35EE35D6CD8F1F9AC7E1D PUSH1 0x0 DUP1 LOG2 POP JUMP JUMPDEST PUSH2 0x9C3 DUP4 DUP4 DUP4 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO PUSH2 0xA86 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP1 DUP3 MSTORE CALLER PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x0 PUSH1 0x84 DUP5 ADD MSTORE SWAP1 SWAP2 SWAP1 DUP5 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA5E SWAP2 SWAP1 PUSH2 0x1464 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0xA86 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3DA63931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xAA6 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x7F5 DUP3 DUP3 PUSH2 0xFE2 JUMP JUMPDEST PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xFA7B8EAB7DA67F412CC9575ED43464468F9BFBAE89D1675917346CA6D8FE3C92 PUSH1 0x0 DUP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xB23 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D5E5FB3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xB51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xB88 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH1 0x0 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x20 PUSH1 0x40 MLOAD ADD PUSH1 0x0 JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1 DUP5 AND PUSH1 0x5 SHL DUP3 ADD SWAP2 POP DUP4 PUSH1 0x1 SHR SWAP4 POP DUP4 ISZERO PUSH2 0xBE8 JUMPI PUSH1 0x1 ADD PUSH2 0xBC6 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 POP DUP1 PUSH1 0x40 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SUB PUSH1 0x5 SHR DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xC1E JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xD833C7CEA3BCE2562E201BF7E85016D0BC1173580C719F63378CC5D0457552B6 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x142A JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0xCF6 DUP6 DUP6 DUP6 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP1 DUP3 MSTORE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0xD3C SWAP1 CALLER SWAP1 DUP11 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x1481 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7F SWAP2 SWAP1 PUSH2 0x1464 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3DA63931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x7833CB0B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xF0679616 SWAP1 PUSH2 0xDE7 SWAP1 DUP8 SWAP1 DUP6 SWAP1 DUP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x14D5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xE2C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x150A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C97E827 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x725FA09C SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE7E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xEA6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x150A JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xEC6 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 PUSH1 0x60 SHL PUSH1 0x60 SHR SWAP1 POP PUSH4 0x389A75E1 DUP2 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD TIMESTAMP GT ISZERO PUSH2 0xEF8 JUMPI PUSH4 0x6F5E8818 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 DUP2 SSTORE POP DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xF48 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xF64 JUMPI PUSH4 0x7448FBAE PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ DUP1 PUSH2 0xFC5 JUMPI POP PUSH4 0x80AC58CD PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST DUP1 PUSH2 0x636 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD DUP3 DUP2 AND DUP2 XOR SWAP1 POP DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD OR DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x10B2 DUP2 PUSH2 0x107F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10BC JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x10E3 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1101 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x10B9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x10B2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x10E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x113A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x116B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1174 DUP4 PUSH2 0x1141 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x11C1 JUMPI PUSH2 0x11C1 PUSH2 0x1182 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x11F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x121A JUMPI PUSH2 0x121A PUSH2 0x1182 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x122B DUP5 DUP4 ADD PUSH2 0x1198 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x1245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x1276 JUMPI DUP5 CALLDATALOAD SWAP3 POP PUSH1 0xFF DUP4 AND DUP4 EQ PUSH2 0x1266 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x124A JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12A0 DUP5 PUSH2 0x1141 JUMP JUMPDEST SWAP3 POP PUSH2 0x12AE PUSH1 0x20 DUP6 ADD PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10B2 DUP3 PUSH2 0x1141 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1314 JUMPI DUP4 MLOAD PUSH1 0xFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x12F5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x133C DUP4 PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x137D DUP7 PUSH2 0x1141 JUMP JUMPDEST SWAP5 POP PUSH2 0x138B PUSH1 0x20 DUP8 ADD PUSH2 0x1141 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x13AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x13C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP PUSH1 0x20 ADD SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1413 DUP4 PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP PUSH2 0x1421 PUSH1 0x20 DUP5 ADD PUSH2 0x1141 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x143E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x145E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x10B2 DUP2 PUSH2 0x107F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND DUP3 MSTORE DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 DUP3 DUP5 PUSH1 0xA0 DUP5 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0xA0 DUP5 DUP5 ADD ADD MSTORE PUSH1 0xA0 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP4 ADD ADD SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x14EE PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x10E9 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1500 DUP2 DUP6 PUSH2 0x10E9 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x151C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1534 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x155A JUMPI PUSH2 0x155A PUSH2 0x1182 JUMP JUMPDEST PUSH2 0x156D PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x1198 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1595 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x10B9 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT ADDMOD RETURNDATACOPY JUMPDEST DUP3 OR INVALID PUSH11 0xEC9729846127D9AE66455F 0xCF SWAP9 PUSH29 0x54D2F34BF4E9C3B2A49364736F6C634300080F00330000000000000000 ",
              "sourceMap": "103:373:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:175:4;;;;;;;;;;-1:-1:-1;1225:175:4;;;;;:::i;:::-;;:::i;:::-;;;565:14:11;;558:22;540:41;;528:2;513:18;1225:175:4;;;;;;;;1365:18:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2324:46::-;;;;;;;;;;-1:-1:-1;2324:46:6;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2324:46:6;;;;;;-1:-1:-1;;;;;1692:32:11;;;1674:51;;1662:2;1647:18;2324:46:6;1528:203:11;2932:284:6;;;;;;;;;;-1:-1:-1;2932:284:6;;;;;:::i;:::-;;:::i;:::-;;14792:489:2;;;;;;;;;;-1:-1:-1;14792:489:2;;;;;:::i;:::-;;:::i;:::-;;;3849:25:11;;;3837:2;3822:18;14792:489:2;3703:177:11;2243:83:4;;;;;;;;;;-1:-1:-1;2311:10:4;;2243:83;;12111:109:2;;;;;;:::i;:::-;;:::i;11572:123::-;;;;;;:::i;:::-;;:::i;13831:382::-;;;;;;;;;;-1:-1:-1;13831:382:2;;;;;:::i;:::-;14014:2;14010:13;;;;14025:15;14007:34;13910:11;13994:48;;;14175:4;14159:21;;14153:28;14149:40;;14146:51;;13831:382;3431:693:6;;;;;;;;;;-1:-1:-1;3431:693:6;;;;;:::i;:::-;;:::i;9265:545:2:-;;;:::i;14261:298::-;;;;;;;;;;-1:-1:-1;14261:298:2;;;;;:::i;:::-;14427:2;14423:13;14438:15;14420:34;14321:13;14407:48;;;14537:4;14521:21;;14515:28;;14261:298;4130:373:6;;;;;;;;;;-1:-1:-1;4130:373:6;;;;;:::i;:::-;;:::i;11840:125:2:-;;;;;;:::i;:::-;;:::i;13320:449::-;;;;;;;;;;-1:-1:-1;13320:449:2;;;;;:::i;:::-;13502:2;13498:13;;;;13513:15;13495:34;13398:11;13482:48;;;13737:4;13721:21;;13715:28;13711:40;13704:48;13697:56;;13320:449;9892:401;;;:::i;1801:150:6:-;;;;;;;;;;-1:-1:-1;1801:150:6;;;;;:::i;:::-;;:::i;1957:168::-;;;;;;;;;;-1:-1:-1;1957:168:6;;;;;:::i;:::-;;:::i;8795:308:2:-;;;:::i;15516:1113::-;;;;;;;;;;-1:-1:-1;15516:1113:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2330:92:4:-;;;;;;;;;;-1:-1:-1;2403:14:4;;-1:-1:-1;;;;;2403:14:4;2330:92;;12465:148:2;;;;;;;;;;-1:-1:-1;;;12570:27:2;12465:148;;2795:149:4;;;;;;;;;;-1:-1:-1;2795:149:4;;;;;:::i;:::-;;:::i;1390:20:6:-;;;;;;;;;;;;;:::i;3222:203::-;;;;;;;;;;-1:-1:-1;3222:203:6;;;;;:::i;:::-;;:::i;4509:396::-;;;;;;;;;;-1:-1:-1;4509:396:6;;;;;:::i;:::-;;:::i;2426:258:4:-;;;;;;;;;;-1:-1:-1;2426:258:4;;;;;:::i;:::-;;:::i;13151:107:2:-;;;;;;;;;;-1:-1:-1;13151:107:2;;13242:9;6362:50:11;;6350:2;6335:18;13151:107:2;6218:200:11;2108:131:4;;;;;;;;;;;;;:::i;2377:68:6:-;;;;;;;;;;-1:-1:-1;2377:68:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;10480:950:2;;;;;;:::i;:::-;;:::i;8084:646::-;;;;;;:::i;:::-;;:::i;12716:344::-;;;;;;;;;;-1:-1:-1;12716:344:2;;;;;:::i;:::-;12914:2;12910:21;12933:19;12907:46;12803:14;12894:60;;;13038:4;13022:21;;13016:28;;12716:344;1225:175:4;1338:4;1359:36;1383:11;1359:23;:36::i;:::-;1352:43;1225:175;-1:-1:-1;;1225:175:4:o;1365:18:6:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2932:284::-;3003:13;3019:12;;;:8;:12;;;;;;-1:-1:-1;;;;;3019:12:6;3046:10;:19;;;;;:59;;-1:-1:-1;;;;;;3070:23:6;;;;;;:16;:23;;;;;;;;3094:10;3070:35;;;;;;;;;;3069:36;3046:59;3042:87;;;3114:15;;-1:-1:-1;;;3114:15:6;;;;;;;;;;;3042:87;3140:15;;;;:11;:15;;;;;;:25;;-1:-1:-1;;;;;;3140:25:6;-1:-1:-1;;;;;3140:25:6;;;;;;;;;3181:28;;3140:15;;3181:28;;;;;;;2993:223;2932:284;;:::o;14792:489:2:-;14865:13;14973:4;14963:8;14959:19;15083:8;15077:15;15074:1;15070:23;15067:1;15063:31;15138:127;15158:3;15155:1;15152:10;15138:127;;15248:1;15241:4;15237:1;15231:8;15227:19;15223:27;15216:5;15213:38;15204:47;;15178:4;15175:1;15171:12;15166:17;;15138:127;;;15142:2;;14792:489;;;:::o;12111:109::-;12182:31;12195:10;12207:5;12182:12;:31::i;:::-;12111:109;:::o;11572:123::-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;11664:24:::1;11676:4;11682:5;11664:11;:24::i;:::-;11572:123:::0;;:::o;3431:693:6:-;3528:12;;;;:8;:12;;;;;;-1:-1:-1;;;;;3520:20:6;;;3528:12;;3520:20;3516:44;;3549:11;;-1:-1:-1;;;3549:11:6;;;;;;;;;;;3516:44;-1:-1:-1;;;;;3575:16:6;;3571:47;;3600:18;;-1:-1:-1;;;3600:18:6;;;;;;;;;;;3571:47;3633:10;-1:-1:-1;;;;;3633:18:6;;;;;;:57;;-1:-1:-1;;;;;;3656:22:6;;;;;;:16;:22;;;;;;;;3679:10;3656:34;;;;;;;;;;3655:35;3633:57;:90;;;;-1:-1:-1;3708:15:6;;;;:11;:15;;;;;;-1:-1:-1;;;;;3708:15:6;3694:10;:29;;3633:90;3629:130;;;3744:15;;-1:-1:-1;;;3744:15:6;;;;;;;;;;;3629:130;-1:-1:-1;;;;;3959:16:6;;;;;;;:10;:16;;;;;;;;:18;;-1:-1:-1;;3959:18:6;;;3992:14;;;;;;;;;:16;;3959:18;3992:16;;;4029:12;;;:8;:12;;;;;:17;;-1:-1:-1;;;;;;4029:17:6;;;;;;;;4064:11;:15;;;;;;4057:22;;;;;;;;4095;;4038:2;;3992:14;3959:16;4095:22;;;3431:693;;;:::o;9265:545:2:-;9358:15;13242:9;9376:45;;:15;:45;9358:63;;9556:19;9545:8;9541:2;9537:17;9534:42;9528:4;9521:56;9624:7;9617:4;9611;9601:21;9594:38;9771:8;9724:45;9721:1;9718;9713:67;9444:350;9265:545::o;4130:373:6:-;4219:26;4232:4;4238:2;4242;4219:12;:26::i;:::-;-1:-1:-1;;;;;4260:14:6;;;:19;4256:241;;4316:66;;-1:-1:-1;;;4316:66:6;;;4357:10;4316:66;;;7378:34:11;-1:-1:-1;;;;;7448:15:11;;;7428:18;;;7421:43;7480:18;;;7473:34;;;7543:3;7523:18;;;7516:31;-1:-1:-1;7563:19:11;;;7556:30;4402:45:6;;4316:40;;;;4402:45;;7603:19:11;;4316:66:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4316:131:6;;4295:191;;4469:17;;-1:-1:-1;;;4469:17:6;;;;;;;;;;;4295:191;4130:373;;;:::o;11840:125:2:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;11933:25:::1;11946:4;11952:5;11933:12;:25::i;9892:401::-:0;10073:19;10062:8;10058:2;10054:17;10051:42;10045:4;10038:56;10137:1;10130:4;10124;10114:21;10107:32;10268:8;10222:44;10219:1;10216;10211:66;9892:401::o;1801:150:6:-;1859:13;1897:12;;;:8;:12;;;;;;-1:-1:-1;;;;;1897:12:6;;1884:60;;1933:11;;-1:-1:-1;;;1933:11:6;;;;;;;;;;;1884:60;1801:150;;;:::o;1957:168::-;2020:7;-1:-1:-1;;;;;2043:19:6;;2039:45;;2071:13;;-1:-1:-1;;;2071:13:6;;;;;;;;;;;2039:45;-1:-1:-1;;;;;;2101:17:6;;;;;:10;:17;;;;;;;1957:168::o;8795:308:2:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;9005:1:::1;8995:8;8955:38;8952:1;8949::::0;8944:63:::1;9085:1;-1:-1:-1::0;;9056:31:2;8795:308::o;15516:1113::-;15579:23;15717:4;15710;15704:11;15700:22;15953:1;15938:395;16008:1;16003:3;15996:14;16198:1;16191:5;16187:13;16184:1;16180:21;16175:3;16171:31;16164:38;;16235:5;16232:1;16228:13;16219:22;;16303:5;16293:26;16312:5;16293:26;15973:1;15966:9;15938:395;;;15942:14;16427:4;16421:11;16409:23;;16494:3;16488:4;16481:17;16605:4;16595:8;16591:19;16586:3;16582:29;16579:1;16575:37;16565:8;16558:55;;15516:1113;;;:::o;2795:149:4:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;2863:14:4::1;:30:::0;;-1:-1:-1;;;;;;2863:30:4::1;-1:-1:-1::0;;;;;2863:30:4;::::1;::::0;;::::1;::::0;;;2904:35:::1;::::0;1674:51:11;;;2904:35:4::1;::::0;1662:2:11;1647:18;2904:35:4::1;;;;;;;2795:149:::0;:::o;1390:20:6:-;;;;;;;:::i;3222:203::-;3324:10;3307:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;3307:38:6;;;;;;;;;;;;:49;;-1:-1:-1;;3307:49:6;;;;;;;;;;3372:46;;540:41:11;;;3307:38:6;;3324:10;3372:46;;513:18:11;3372:46:6;;;;;;;3222:203;;:::o;4509:396::-;4619:26;4632:4;4638:2;4642;4619:12;:26::i;:::-;-1:-1:-1;;;;;4660:14:6;;;:19;4656:243;;4716:68;;-1:-1:-1;;;4716:68:6;;;4804:45;-1:-1:-1;;;;;4716:40:6;;;4804:45;;4716:68;;4757:10;;4769:4;;4775:2;;4779:4;;;;4716:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4716:133:6;;4695:193;;4871:17;;-1:-1:-1;;;4871:17:6;;;;;;;;;;;4695:193;4509:396;;;;;:::o;2426:258:4:-;2612:14;;2598:81;;-1:-1:-1;;;2598:81:4;;2491:13;;;;;;-1:-1:-1;;;;;2612:14:4;;2598:47;;:81;;2646:7;;2491:13;;;;2598:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2598:81:4;;;;;;;;;;;;:::i;:::-;2591:88;2426:258;-1:-1:-1;;;;2426:258:4:o;2108:131::-;2196:14;;2182:52;;;-1:-1:-1;;;2182:52:4;;;;2154:13;;-1:-1:-1;;;;;2196:14:4;;2182:50;;:52;;;;;2196:14;;2182:52;;;;;;;2196:14;2182:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2182:52:4;;;;;;;;;;;;:::i;:::-;2175:59;;2108:131;:::o;10480:950:2:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;10675:12:::1;10671:2;10667:21;10663:2;10659:30;10643:46;;10796:19;10781:12;10777:2;10773:21;10770:46;10764:4;10757:60;10866:4;10860;10850:21;10972:12;10966:19;10953:11;10950:36;10947:156;;;11018:35;11012:4;11005:49;11084:4;11078;11071:18;10947:156;11180:1;11166:12;11159:23;;11310:12;11300:8;11260:38;11257:1;11254::::0;11249:74:::1;-1:-1:-1::0;;11372:42:2;10480:950::o;8084:646::-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;-1:-1:-1;;;;;8247:26:2;;8348:142:::1;;8399:41;8393:4;8386:55;8471:4;8465;8458:18;8348:142;8618:8;8608;8568:38;8565:1;8562::::0;8557:70:::1;-1:-1:-1::0;;8676:38:2;8084:646::o;5093:335:6:-;5169:4;-1:-1:-1;;;;;;;;;5204:25:6;;;;:100;;-1:-1:-1;;;;;;;;;;5279:25:6;;;5204:100;:175;;;-1:-1:-1;;;;;;;;5354:25:6;-1:-1:-1;;;5354:25:6;;5093:335::o;7020:794:2:-;7190:15;7183:4;7179:2;7175:13;7172:34;7166:4;7159:48;7252:4;7246;7236:21;7335:8;7329:15;7575:5;7561:12;7557:24;7543:12;7539:43;7523:59;;7654:8;7644;7637:26;7789:8;7781:4;7777:2;7773:13;7769:2;7765:22;7733:30;7730:1;7727;7722:76;;;7020:794;;:::o;6303:581::-;6472:15;6465:4;6461:2;6457:13;6454:34;6448:4;6441:48;6534:4;6528;6518:21;6652:5;6641:8;6635:15;6632:26;6724:8;6714;6707:26;6859:8;6851:4;6847:2;6843:13;6839:2;6835:22;6803:30;6800:1;6797;6792:76;;;6303:581;;:::o;14:131:11:-;-1:-1:-1;;;;;;88:32:11;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:11:o;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;840:1;831:6;826:3;822:16;815:27;796:48;;592:258;;;:::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:11;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:11:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:11;;1343:180;-1:-1:-1;1343:180:11:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:11;;1843:42;;1833:70;;1899:1;1896;1889:12;1914:254;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:11:o;2173:127::-;2234:10;2229:3;2225:20;2222:1;2215:31;2265:4;2262:1;2255:15;2289:4;2286:1;2279:15;2305:275;2376:2;2370:9;2441:2;2422:13;;-1:-1:-1;;2418:27:11;2406:40;;2476:18;2461:34;;2497:22;;;2458:62;2455:88;;;2523:18;;:::i;:::-;2559:2;2552:22;2305:275;;-1:-1:-1;2305:275:11:o;2585:1113::-;2667:6;2698:2;2741;2729:9;2720:7;2716:23;2712:32;2709:52;;;2757:1;2754;2747:12;2709:52;2797:9;2784:23;2826:18;2867:2;2859:6;2856:14;2853:34;;;2883:1;2880;2873:12;2853:34;2921:6;2910:9;2906:22;2896:32;;2966:7;2959:4;2955:2;2951:13;2947:27;2937:55;;2988:1;2985;2978:12;2937:55;3024:2;3011:16;3046:2;3042;3039:10;3036:36;;;3052:18;;:::i;:::-;3098:2;3095:1;3091:10;3081:20;;3121:28;3145:2;3141;3137:11;3121:28;:::i;:::-;3183:15;;;3253:11;;;3249:20;;;3214:12;;;;3281:19;;;3278:39;;;3313:1;3310;3303:12;3278:39;3337:11;;;;3357:311;3373:6;3368:3;3365:15;3357:311;;;3453:3;3440:17;3427:30;;3501:4;3494:5;3490:16;3483:5;3480:27;3470:125;;3549:1;3578:2;3574;3567:14;3470:125;3608:18;;;3390:12;;;;3646;;;;3357:311;;;3687:5;2585:1113;-1:-1:-1;;;;;;;;2585:1113:11:o;3885:328::-;3962:6;3970;3978;4031:2;4019:9;4010:7;4006:23;4002:32;3999:52;;;4047:1;4044;4037:12;3999:52;4070:29;4089:9;4070:29;:::i;:::-;4060:39;;4118:38;4152:2;4141:9;4137:18;4118:38;:::i;:::-;4108:48;;4203:2;4192:9;4188:18;4175:32;4165:42;;3885:328;;;;;:::o;4218:186::-;4277:6;4330:2;4318:9;4309:7;4305:23;4301:32;4298:52;;;4346:1;4343;4336:12;4298:52;4369:29;4388:9;4369:29;:::i;4409:639::-;4576:2;4628:21;;;4698:13;;4601:18;;;4720:22;;;4547:4;;4576:2;4799:15;;;;4773:2;4758:18;;;4547:4;4842:180;4856:6;4853:1;4850:13;4842:180;;;4921:13;;4936:4;4917:24;4905:37;;4997:15;;;;4962:12;;;;4878:1;4871:9;4842:180;;;-1:-1:-1;5039:3:11;;4409:639;-1:-1:-1;;;;;;4409:639:11:o;5053:347::-;5118:6;5126;5179:2;5167:9;5158:7;5154:23;5150:32;5147:52;;;5195:1;5192;5185:12;5147:52;5218:29;5237:9;5218:29;:::i;:::-;5208:39;;5297:2;5286:9;5282:18;5269:32;5344:5;5337:13;5330:21;5323:5;5320:32;5310:60;;5366:1;5363;5356:12;5310:60;5389:5;5379:15;;;5053:347;;;;;:::o;5405:808::-;5502:6;5510;5518;5526;5534;5587:3;5575:9;5566:7;5562:23;5558:33;5555:53;;;5604:1;5601;5594:12;5555:53;5627:29;5646:9;5627:29;:::i;:::-;5617:39;;5675:38;5709:2;5698:9;5694:18;5675:38;:::i;:::-;5665:48;;5760:2;5749:9;5745:18;5732:32;5722:42;;5815:2;5804:9;5800:18;5787:32;5838:18;5879:2;5871:6;5868:14;5865:34;;;5895:1;5892;5885:12;5865:34;5933:6;5922:9;5918:22;5908:32;;5978:7;5971:4;5967:2;5963:13;5959:27;5949:55;;6000:1;5997;5990:12;5949:55;6040:2;6027:16;6066:2;6058:6;6055:14;6052:34;;;6082:1;6079;6072:12;6052:34;6127:7;6122:2;6113:6;6109:2;6105:15;6101:24;6098:37;6095:57;;;6148:1;6145;6138:12;6095:57;5405:808;;;;-1:-1:-1;5405:808:11;;-1:-1:-1;6179:2:11;6171:11;;6201:6;5405:808;-1:-1:-1;;;5405:808:11:o;6423:260::-;6491:6;6499;6552:2;6540:9;6531:7;6527:23;6523:32;6520:52;;;6568:1;6565;6558:12;6520:52;6591:29;6610:9;6591:29;:::i;:::-;6581:39;;6639:38;6673:2;6662:9;6658:18;6639:38;:::i;:::-;6629:48;;6423:260;;;;;:::o;6688:380::-;6767:1;6763:12;;;;6810;;;6831:61;;6885:4;6877:6;6873:17;6863:27;;6831:61;6938:2;6930:6;6927:14;6907:18;6904:38;6901:161;;6984:10;6979:3;6975:20;6972:1;6965:31;7019:4;7016:1;7009:15;7047:4;7044:1;7037:15;6901:161;;6688:380;;;:::o;7633:249::-;7702:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:52;;;7771:1;7768;7761:12;7723:52;7803:9;7797:16;7822:30;7846:5;7822:30;:::i;7887:662::-;-1:-1:-1;;;;;8166:15:11;;;8148:34;;8218:15;;8213:2;8198:18;;8191:43;8265:2;8250:18;;8243:34;;;8313:3;8308:2;8293:18;;8286:31;;;8333:19;;8326:35;;;8091:4;8354:6;8404;8128:3;8383:19;;8370:49;8469:1;8463:3;8454:6;8443:9;8439:22;8435:32;8428:43;8539:3;8532:2;8528:7;8523:2;8515:6;8511:15;8507:29;8496:9;8492:45;8488:55;8480:63;;7887:662;;;;;;;;:::o;8554:450::-;8775:6;8764:9;8757:25;8818:2;8813;8802:9;8798:18;8791:30;8738:4;8844:45;8885:2;8874:9;8870:18;8862:6;8844:45;:::i;:::-;8937:9;8929:6;8925:22;8920:2;8909:9;8905:18;8898:50;8965:33;8991:6;8983;8965:33;:::i;:::-;8957:41;8554:450;-1:-1:-1;;;;;;8554:450:11:o;9009:706::-;9089:6;9142:2;9130:9;9121:7;9117:23;9113:32;9110:52;;;9158:1;9155;9148:12;9110:52;9191:9;9185:16;9220:18;9261:2;9253:6;9250:14;9247:34;;;9277:1;9274;9267:12;9247:34;9315:6;9304:9;9300:22;9290:32;;9360:7;9353:4;9349:2;9345:13;9341:27;9331:55;;9382:1;9379;9372:12;9331:55;9411:2;9405:9;9433:2;9429;9426:10;9423:36;;;9439:18;;:::i;:::-;9481:53;9524:2;9505:13;;-1:-1:-1;;9501:27:11;9530:2;9497:36;9481:53;:::i;:::-;9468:66;;9557:2;9550:5;9543:17;9597:7;9592:2;9587;9583;9579:11;9575:20;9572:33;9569:53;;;9618:1;9615;9608:12;9569:53;9631:54;9682:2;9677;9670:5;9666:14;9661:2;9657;9653:11;9631:54;:::i;:::-;-1:-1:-1;9704:5:11;9009:706;-1:-1:-1;;;;9009:706:11:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1117600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "approve(address,uint256)": "25189",
                "balanceOf(address)": "1357",
                "cancelOwnershipHandover()": "6432",
                "completeOwnershipHandover(address)": "28627",
                "contractURI()": "infinite",
                "getApproved(uint256)": "1268",
                "getERC721Storage()": "1076",
                "grantRoles(address,uint256)": "23683",
                "hasAllRoles(address,uint256)": "1296",
                "hasAnyRole(address,uint256)": "1339",
                "isApprovedForAll(address,address)": "infinite",
                "name()": "infinite",
                "ordinalsFromRoles(uint256)": "infinite",
                "owner()": "1083",
                "ownerOf(uint256)": "1257",
                "ownershipHandoverExpiresAt(address)": "1348",
                "ownershipHandoverValidFor()": "288",
                "renounceOwnership()": "7558",
                "renounceRoles(uint256)": "22745",
                "requestOwnershipHandover()": "21435",
                "revokeRoles(address,uint256)": "23652",
                "rolesFromOrdinals(uint8[])": "infinite",
                "rolesOf(address)": "1328",
                "safeTransferFrom(address,address,uint256)": "infinite",
                "safeTransferFrom(address,address,uint256,bytes)": "infinite",
                "setApprovalForAll(address,bool)": "23230",
                "setStorage(address)": "23138",
                "supportsInterface(bytes4)": "588",
                "symbol()": "infinite",
                "tokenURI(uint256)": "infinite",
                "totalSupply()": "1060",
                "transferFrom(address,address,uint256)": "infinite",
                "transferOwnership(address)": "22768"
              },
              "internal": {
                "_tokenData(uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "cancelOwnershipHandover()": "54d1f13d",
              "completeOwnershipHandover(address)": "f04e283e",
              "contractURI()": "e8a3d485",
              "getApproved(uint256)": "081812fc",
              "getERC721Storage()": "87a89ee6",
              "grantRoles(address,uint256)": "1c10893f",
              "hasAllRoles(address,uint256)": "1cd64df4",
              "hasAnyRole(address,uint256)": "514e62fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ordinalsFromRoles(uint256)": "7359e41f",
              "owner()": "8da5cb5b",
              "ownerOf(uint256)": "6352211e",
              "ownershipHandoverExpiresAt(address)": "fee81cf4",
              "ownershipHandoverValidFor()": "d7533f02",
              "renounceOwnership()": "715018a6",
              "renounceRoles(uint256)": "183a4f6e",
              "requestOwnershipHandover()": "25692962",
              "revokeRoles(address,uint256)": "4a4ee7b1",
              "rolesFromOrdinals(uint8[])": "13a661ed",
              "rolesOf(address)": "2de94807",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "setStorage(address)": "9137c1a7",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"erc721Storage\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsafeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongFrom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"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\":\"address\",\"name\":\"erc721Storage\",\"type\":\"address\"}],\"name\":\"ERC721StorageUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"RolesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERC721Storage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"grantRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAllRoles\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAnyRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"ordinalsFromRoles\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownershipHandoverValidFor\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"renounceRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"revokeRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"name\":\"rolesFromOrdinals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rolesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"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\":\"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\":\"address\",\"name\":\"erc721Storage\",\"type\":\"address\"}],\"name\":\"setStorage\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"kind\":\"dev\",\"methods\":{\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"grantRoles(address,uint256)\":{\"details\":\"Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role.\"},\"hasAllRoles(address,uint256)\":{\"details\":\"Returns whether `user` has all of `roles`.\"},\"hasAnyRole(address,uint256)\":{\"details\":\"Returns whether `user` has any of `roles`.\"},\"ordinalsFromRoles(uint256)\":{\"details\":\"Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"ownershipHandoverValidFor()\":{\"details\":\"Returns how long a two-step ownership handover is valid for in seconds.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"renounceRoles(uint256)\":{\"details\":\"Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default.\"},\"revokeRoles(address,uint256)\":{\"details\":\"Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role.\"},\"rolesFromOrdinals(uint8[])\":{\"details\":\"Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"rolesOf(address)\":{\"details\":\"Returns the roles of `user`.\"},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"NotMinted()\":[{\"notice\":\"----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------\"}]},\"events\":{\"Transfer(address,address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- Events -----------------------------------------------------------------------\"}},\"kind\":\"user\",\"methods\":{\"approve(address,uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC721 Logic -----------------------------------------------------------------------\"},\"getApproved(uint256)\":{\"notice\":\"----------------------------------------------------------------------- ERC721 Approval Storage -----------------------------------------------------------------------\"},\"name()\":{\"notice\":\"----------------------------------------------------------------------- Metadata Storage/Logic -----------------------------------------------------------------------\"},\"supportsInterface(bytes4)\":{\"notice\":\"----------------------------------------------------------------------- ERC165 Logic -----------------------------------------------------------------------\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockERC721K.sol\":\"MockERC721K\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Simple single owner and multiroles authorization mixin.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\\n/// @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\\n/// for compatibility, the nomenclature for the 2-step ownership handover and roles\\n/// may be unique to this codebase.\\nabstract contract OwnedRoles {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.\\n    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be\\n    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\\n    /// despite it not being as lightweight as a single argument event.\\n    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\\n\\n    /// @dev An ownership handover to `pendingOwner` has been requested.\\n    event OwnershipHandoverRequested(address indexed pendingOwner);\\n\\n    /// @dev The ownership handover to `pendingOwner` has been canceled.\\n    event OwnershipHandoverCanceled(address indexed pendingOwner);\\n\\n    /// @dev The `user`'s roles is updated to `roles`.\\n    /// Each bit of `roles` represents whether the role is set.\\n    event RolesUpdated(address indexed user, uint256 indexed roles);\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipTransferred(address,address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =\\n        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverRequested(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =\\n        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverCanceled(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =\\n        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;\\n\\n    /// @dev `keccak256(bytes(\\\"RolesUpdated(address,uint256)\\\"))`.\\n    uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =\\n        0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The caller is not authorized to call the function.\\n    error Unauthorized();\\n\\n    /// @dev The `newOwner` cannot be the zero address.\\n    error NewOwnerIsZeroAddress();\\n\\n    /// @dev The `pendingOwner` does not have a valid handover request.\\n    error NoHandoverRequest();\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"Unauthorized()\\\")))`.\\n    uint256 private constant _UNAUTHORIZED_ERROR_SELECTOR = 0x82b42900;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NewOwnerIsZeroAddress()\\\")))`.\\n    uint256 private constant _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR = 0x7448fbae;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NoHandoverRequest()\\\")))`.\\n    uint256 private constant _NO_HANDOVER_REQUEST_ERROR_SELECTOR = 0x6f5e8818;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Storage\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\\n    /// It is intentionally choosen to be a high value\\n    /// to avoid collision with lower slots.\\n    /// The choice of manual storage layout is to enable compatibility\\n    /// with both regular and upgradeable contracts.\\n    ///\\n    /// The role slot of `user` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n    ///     let roleSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// This automatically ignores the upper bits of the `user` in case\\n    /// they are not clean, as well as keep the `keccak256` under 32-bytes.\\n    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;\\n\\n    /// The ownership handover slot of `newOwner` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\\n    ///     let handoverSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// It stores the expiry timestamp of the two-step ownership handover.\\n    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Initializes the owner directly without authorization guard.\\n    /// This function must be called upon initialization,\\n    /// regardless of whether the contract is upgradeable or not.\\n    /// This is to enable generalization to both regular and upgradeable contracts,\\n    /// and to save gas in case the initial owner is not the caller.\\n    /// For performance reasons, this function will not check if there\\n    /// is an existing owner.\\n    function _initializeOwner(address newOwner) internal virtual {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)\\n        }\\n    }\\n\\n    /// @dev Sets the owner directly without authorization guard.\\n    function _setOwner(address newOwner) internal virtual {\\n        assembly {\\n            let ownerSlot := not(_OWNER_SLOT_NOT)\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)\\n            // Store the new value.\\n            sstore(ownerSlot, newOwner)\\n        }\\n    }\\n\\n    /// @dev Grants the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn on.\\n    function _grantRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value and `or` it with `roles`.\\n            let newRoles := or(sload(roleSlot), roles)\\n            // Store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// @dev Removes the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn off.\\n    function _removeRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value.\\n            let currentRoles := sload(roleSlot)\\n            // Use `and` to compute the intersection of `currentRoles` and `roles`,\\n            // `xor` it with `currentRoles` to flip the bits in the intersection.\\n            let newRoles := xor(currentRoles, and(currentRoles, roles))\\n            // Then, store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Update Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Allows the owner to transfer the ownership to `newOwner`.\\n    function transferOwnership(address newOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Reverts if the `newOwner` is the zero address.\\n            if iszero(newOwner) {\\n                mstore(0x00, _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), newOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to renounce their ownership.\\n    function renounceOwnership() public payable virtual onlyOwner {\\n        assembly {\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), 0)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), 0)\\n        }\\n    }\\n\\n    /// @dev Request a two-step ownership handover to the caller.\\n    /// The request will be automatically expire in 48 hours (172800 seconds) by default.\\n    function requestOwnershipHandover() public payable virtual {\\n        unchecked {\\n            uint256 expires = block.timestamp + ownershipHandoverValidFor();\\n            assembly {\\n                // Compute and set the handover slot to 1.\\n                mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n                sstore(keccak256(0x00, 0x20), expires)\\n                // Emit the {OwnershipHandoverRequested} event.\\n                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())\\n            }\\n        }\\n    }\\n\\n    /// @dev Cancels the two-step ownership handover to the caller, if any.\\n    function cancelOwnershipHandover() public payable virtual {\\n        assembly {\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n            sstore(keccak256(0x00, 0x20), 0)\\n            // Emit the {OwnershipHandoverCanceled} event.\\n            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())\\n        }\\n    }\\n\\n    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\\n    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.\\n    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            pendingOwner := shr(96, shl(96, pendingOwner))\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            let handoverSlot := keccak256(0x00, 0x20)\\n            // If the handover does not exist, or has expired.\\n            if gt(timestamp(), sload(handoverSlot)) {\\n                mstore(0x00, _NO_HANDOVER_REQUEST_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Set the handover slot to 0.\\n            sstore(handoverSlot, 0)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), pendingOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), pendingOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to grant `user` `roles`.\\n    /// If the `user` already has a role, then it will be an no-op for the role.\\n    function grantRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _grantRoles(user, roles);\\n    }\\n\\n    /// @dev Allows the owner to remove `user` `roles`.\\n    /// If the `user` does not have a role, then it will be an no-op for the role.\\n    function revokeRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _removeRoles(user, roles);\\n    }\\n\\n    /// @dev Allow the caller to remove their own roles.\\n    /// If the caller does not have a role, then it will be an no-op for the role.\\n    function renounceRoles(uint256 roles) public payable virtual {\\n        _removeRoles(msg.sender, roles);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Read Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Returns the owner of the contract.\\n    function owner() public view virtual returns (address result) {\\n        assembly {\\n            result := sload(not(_OWNER_SLOT_NOT))\\n        }\\n    }\\n\\n    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\\n    function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) {\\n        assembly {\\n            // Compute the handover slot.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            // Load the handover slot.\\n            result := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Returns how long a two-step ownership handover is valid for in seconds.\\n    function ownershipHandoverValidFor() public view virtual returns (uint64) {\\n        return 48 * 3600;\\n    }\\n\\n    /// @dev Returns whether `user` has any of `roles`.\\n    function hasAnyRole(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value, and set the result to whether the\\n            // `and` intersection of the value and `roles` is not zero.\\n            result := iszero(iszero(and(sload(keccak256(0x00, 0x20)), roles)))\\n        }\\n    }\\n\\n    /// @dev Returns whether `user` has all of `roles`.\\n    function hasAllRoles(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Whether the stored value is contains all the set bits in `roles`.\\n            result := eq(and(sload(keccak256(0x00, 0x20)), roles), roles)\\n        }\\n    }\\n\\n    /// @dev Returns the roles of `user`.\\n    function rolesOf(address user) public view virtual returns (uint256 roles) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value.\\n            roles := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function rolesFromOrdinals(uint8[] memory ordinals) public pure returns (uint256 roles) {\\n        assembly {\\n            // Skip the length slot.\\n            let o := add(ordinals, 0x20)\\n            // `shl` 5 is equivalent to multiplying by 0x20.\\n            let end := add(o, shl(5, mload(ordinals)))\\n            // prettier-ignore\\n            for {} iszero(eq(o, end)) { o := add(o, 0x20) } {\\n                roles := or(roles, shl(and(mload(o), 0xff), 1))\\n            }\\n        }\\n    }\\n\\n    /// @dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function ordinalsFromRoles(uint256 roles) public pure returns (uint8[] memory ordinals) {\\n        assembly {\\n            // Grab the pointer to the free memory.\\n            let ptr := add(mload(0x40), 0x20)\\n            // The absence of lookup tables, De Bruijn, etc., here is intentional for\\n            // smaller bytecode, as this function is not meant to be called on-chain.\\n            // prettier-ignore\\n            for { let i := 0 } 1 { i := add(i, 1) } {\\n                mstore(ptr, i)\\n                // `shr` 5 is equivalent to multiplying by 0x20.\\n                // Push back into the ordinals array if the bit is set.\\n                ptr := add(ptr, shl(5, and(roles, 1)))\\n                roles := shr(1, roles)\\n                // prettier-ignore\\n                if iszero(roles) { break }\\n            }\\n            // Set `ordinals` to the start of the free memory.\\n            ordinals := mload(0x40)\\n            // Allocate the memory.\\n            mstore(0x40, ptr)\\n            // Store the length of `ordinals`.\\n            mstore(ordinals, shr(5, sub(ptr, add(ordinals, 0x20))))\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Modifiers\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Marks a function as only callable by the owner.\\n    modifier onlyOwner() virtual {\\n        assembly {\\n            // If the caller is not the stored owner, revert.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`.\\n    modifier onlyRoles(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by the owner or by an account\\n    /// with `roles`. Checks for ownership first, then lazily checks for roles.\\n    modifier onlyOwnerOrRoles(uint256 roles) virtual {\\n        assembly {\\n            // If the caller is not the stored owner.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                // Compute the role slot.\\n                mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n                // Load the stored value, and if the `and` intersection\\n                // of the value and `roles` is zero, revert.\\n                if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`\\n    /// or the owner. Checks for roles first, then lazily checks for ownership.\\n    modifier onlyRolesOrOwner(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                // If the caller is not the stored owner.\\n                if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Role Constants\\n    /// -----------------------------------------------------------------------\\n\\n    uint256 internal constant _ROLE_0 = 1 << 0;\\n    uint256 internal constant _ROLE_1 = 1 << 1;\\n    uint256 internal constant _ROLE_2 = 1 << 2;\\n    uint256 internal constant _ROLE_3 = 1 << 3;\\n    uint256 internal constant _ROLE_4 = 1 << 4;\\n    uint256 internal constant _ROLE_5 = 1 << 5;\\n    uint256 internal constant _ROLE_6 = 1 << 6;\\n    uint256 internal constant _ROLE_7 = 1 << 7;\\n    uint256 internal constant _ROLE_8 = 1 << 8;\\n    uint256 internal constant _ROLE_9 = 1 << 9;\\n    uint256 internal constant _ROLE_10 = 1 << 10;\\n    uint256 internal constant _ROLE_11 = 1 << 11;\\n    uint256 internal constant _ROLE_12 = 1 << 12;\\n    uint256 internal constant _ROLE_13 = 1 << 13;\\n    uint256 internal constant _ROLE_14 = 1 << 14;\\n    uint256 internal constant _ROLE_15 = 1 << 15;\\n    uint256 internal constant _ROLE_16 = 1 << 16;\\n    uint256 internal constant _ROLE_17 = 1 << 17;\\n    uint256 internal constant _ROLE_18 = 1 << 18;\\n    uint256 internal constant _ROLE_19 = 1 << 19;\\n    uint256 internal constant _ROLE_20 = 1 << 20;\\n    uint256 internal constant _ROLE_21 = 1 << 21;\\n    uint256 internal constant _ROLE_22 = 1 << 22;\\n    uint256 internal constant _ROLE_23 = 1 << 23;\\n    uint256 internal constant _ROLE_24 = 1 << 24;\\n    uint256 internal constant _ROLE_25 = 1 << 25;\\n    uint256 internal constant _ROLE_26 = 1 << 26;\\n    uint256 internal constant _ROLE_27 = 1 << 27;\\n    uint256 internal constant _ROLE_28 = 1 << 28;\\n    uint256 internal constant _ROLE_29 = 1 << 29;\\n    uint256 internal constant _ROLE_30 = 1 << 30;\\n    uint256 internal constant _ROLE_31 = 1 << 31;\\n    uint256 internal constant _ROLE_32 = 1 << 32;\\n    uint256 internal constant _ROLE_33 = 1 << 33;\\n    uint256 internal constant _ROLE_34 = 1 << 34;\\n    uint256 internal constant _ROLE_35 = 1 << 35;\\n    uint256 internal constant _ROLE_36 = 1 << 36;\\n    uint256 internal constant _ROLE_37 = 1 << 37;\\n    uint256 internal constant _ROLE_38 = 1 << 38;\\n    uint256 internal constant _ROLE_39 = 1 << 39;\\n    uint256 internal constant _ROLE_40 = 1 << 40;\\n    uint256 internal constant _ROLE_41 = 1 << 41;\\n    uint256 internal constant _ROLE_42 = 1 << 42;\\n    uint256 internal constant _ROLE_43 = 1 << 43;\\n    uint256 internal constant _ROLE_44 = 1 << 44;\\n    uint256 internal constant _ROLE_45 = 1 << 45;\\n    uint256 internal constant _ROLE_46 = 1 << 46;\\n    uint256 internal constant _ROLE_47 = 1 << 47;\\n    uint256 internal constant _ROLE_48 = 1 << 48;\\n    uint256 internal constant _ROLE_49 = 1 << 49;\\n    uint256 internal constant _ROLE_50 = 1 << 50;\\n    uint256 internal constant _ROLE_51 = 1 << 51;\\n    uint256 internal constant _ROLE_52 = 1 << 52;\\n    uint256 internal constant _ROLE_53 = 1 << 53;\\n    uint256 internal constant _ROLE_54 = 1 << 54;\\n    uint256 internal constant _ROLE_55 = 1 << 55;\\n    uint256 internal constant _ROLE_56 = 1 << 56;\\n    uint256 internal constant _ROLE_57 = 1 << 57;\\n    uint256 internal constant _ROLE_58 = 1 << 58;\\n    uint256 internal constant _ROLE_59 = 1 << 59;\\n    uint256 internal constant _ROLE_60 = 1 << 60;\\n    uint256 internal constant _ROLE_61 = 1 << 61;\\n    uint256 internal constant _ROLE_62 = 1 << 62;\\n    uint256 internal constant _ROLE_63 = 1 << 63;\\n    uint256 internal constant _ROLE_64 = 1 << 64;\\n    uint256 internal constant _ROLE_65 = 1 << 65;\\n    uint256 internal constant _ROLE_66 = 1 << 66;\\n    uint256 internal constant _ROLE_67 = 1 << 67;\\n    uint256 internal constant _ROLE_68 = 1 << 68;\\n    uint256 internal constant _ROLE_69 = 1 << 69;\\n    uint256 internal constant _ROLE_70 = 1 << 70;\\n    uint256 internal constant _ROLE_71 = 1 << 71;\\n    uint256 internal constant _ROLE_72 = 1 << 72;\\n    uint256 internal constant _ROLE_73 = 1 << 73;\\n    uint256 internal constant _ROLE_74 = 1 << 74;\\n    uint256 internal constant _ROLE_75 = 1 << 75;\\n    uint256 internal constant _ROLE_76 = 1 << 76;\\n    uint256 internal constant _ROLE_77 = 1 << 77;\\n    uint256 internal constant _ROLE_78 = 1 << 78;\\n    uint256 internal constant _ROLE_79 = 1 << 79;\\n    uint256 internal constant _ROLE_80 = 1 << 80;\\n    uint256 internal constant _ROLE_81 = 1 << 81;\\n    uint256 internal constant _ROLE_82 = 1 << 82;\\n    uint256 internal constant _ROLE_83 = 1 << 83;\\n    uint256 internal constant _ROLE_84 = 1 << 84;\\n    uint256 internal constant _ROLE_85 = 1 << 85;\\n    uint256 internal constant _ROLE_86 = 1 << 86;\\n    uint256 internal constant _ROLE_87 = 1 << 87;\\n    uint256 internal constant _ROLE_88 = 1 << 88;\\n    uint256 internal constant _ROLE_89 = 1 << 89;\\n    uint256 internal constant _ROLE_90 = 1 << 90;\\n    uint256 internal constant _ROLE_91 = 1 << 91;\\n    uint256 internal constant _ROLE_92 = 1 << 92;\\n    uint256 internal constant _ROLE_93 = 1 << 93;\\n    uint256 internal constant _ROLE_94 = 1 << 94;\\n    uint256 internal constant _ROLE_95 = 1 << 95;\\n    uint256 internal constant _ROLE_96 = 1 << 96;\\n    uint256 internal constant _ROLE_97 = 1 << 97;\\n    uint256 internal constant _ROLE_98 = 1 << 98;\\n    uint256 internal constant _ROLE_99 = 1 << 99;\\n    uint256 internal constant _ROLE_100 = 1 << 100;\\n    uint256 internal constant _ROLE_101 = 1 << 101;\\n    uint256 internal constant _ROLE_102 = 1 << 102;\\n    uint256 internal constant _ROLE_103 = 1 << 103;\\n    uint256 internal constant _ROLE_104 = 1 << 104;\\n    uint256 internal constant _ROLE_105 = 1 << 105;\\n    uint256 internal constant _ROLE_106 = 1 << 106;\\n    uint256 internal constant _ROLE_107 = 1 << 107;\\n    uint256 internal constant _ROLE_108 = 1 << 108;\\n    uint256 internal constant _ROLE_109 = 1 << 109;\\n    uint256 internal constant _ROLE_110 = 1 << 110;\\n    uint256 internal constant _ROLE_111 = 1 << 111;\\n    uint256 internal constant _ROLE_112 = 1 << 112;\\n    uint256 internal constant _ROLE_113 = 1 << 113;\\n    uint256 internal constant _ROLE_114 = 1 << 114;\\n    uint256 internal constant _ROLE_115 = 1 << 115;\\n    uint256 internal constant _ROLE_116 = 1 << 116;\\n    uint256 internal constant _ROLE_117 = 1 << 117;\\n    uint256 internal constant _ROLE_118 = 1 << 118;\\n    uint256 internal constant _ROLE_119 = 1 << 119;\\n    uint256 internal constant _ROLE_120 = 1 << 120;\\n    uint256 internal constant _ROLE_121 = 1 << 121;\\n    uint256 internal constant _ROLE_122 = 1 << 122;\\n    uint256 internal constant _ROLE_123 = 1 << 123;\\n    uint256 internal constant _ROLE_124 = 1 << 124;\\n    uint256 internal constant _ROLE_125 = 1 << 125;\\n    uint256 internal constant _ROLE_126 = 1 << 126;\\n    uint256 internal constant _ROLE_127 = 1 << 127;\\n    uint256 internal constant _ROLE_128 = 1 << 128;\\n    uint256 internal constant _ROLE_129 = 1 << 129;\\n    uint256 internal constant _ROLE_130 = 1 << 130;\\n    uint256 internal constant _ROLE_131 = 1 << 131;\\n    uint256 internal constant _ROLE_132 = 1 << 132;\\n    uint256 internal constant _ROLE_133 = 1 << 133;\\n    uint256 internal constant _ROLE_134 = 1 << 134;\\n    uint256 internal constant _ROLE_135 = 1 << 135;\\n    uint256 internal constant _ROLE_136 = 1 << 136;\\n    uint256 internal constant _ROLE_137 = 1 << 137;\\n    uint256 internal constant _ROLE_138 = 1 << 138;\\n    uint256 internal constant _ROLE_139 = 1 << 139;\\n    uint256 internal constant _ROLE_140 = 1 << 140;\\n    uint256 internal constant _ROLE_141 = 1 << 141;\\n    uint256 internal constant _ROLE_142 = 1 << 142;\\n    uint256 internal constant _ROLE_143 = 1 << 143;\\n    uint256 internal constant _ROLE_144 = 1 << 144;\\n    uint256 internal constant _ROLE_145 = 1 << 145;\\n    uint256 internal constant _ROLE_146 = 1 << 146;\\n    uint256 internal constant _ROLE_147 = 1 << 147;\\n    uint256 internal constant _ROLE_148 = 1 << 148;\\n    uint256 internal constant _ROLE_149 = 1 << 149;\\n    uint256 internal constant _ROLE_150 = 1 << 150;\\n    uint256 internal constant _ROLE_151 = 1 << 151;\\n    uint256 internal constant _ROLE_152 = 1 << 152;\\n    uint256 internal constant _ROLE_153 = 1 << 153;\\n    uint256 internal constant _ROLE_154 = 1 << 154;\\n    uint256 internal constant _ROLE_155 = 1 << 155;\\n    uint256 internal constant _ROLE_156 = 1 << 156;\\n    uint256 internal constant _ROLE_157 = 1 << 157;\\n    uint256 internal constant _ROLE_158 = 1 << 158;\\n    uint256 internal constant _ROLE_159 = 1 << 159;\\n    uint256 internal constant _ROLE_160 = 1 << 160;\\n    uint256 internal constant _ROLE_161 = 1 << 161;\\n    uint256 internal constant _ROLE_162 = 1 << 162;\\n    uint256 internal constant _ROLE_163 = 1 << 163;\\n    uint256 internal constant _ROLE_164 = 1 << 164;\\n    uint256 internal constant _ROLE_165 = 1 << 165;\\n    uint256 internal constant _ROLE_166 = 1 << 166;\\n    uint256 internal constant _ROLE_167 = 1 << 167;\\n    uint256 internal constant _ROLE_168 = 1 << 168;\\n    uint256 internal constant _ROLE_169 = 1 << 169;\\n    uint256 internal constant _ROLE_170 = 1 << 170;\\n    uint256 internal constant _ROLE_171 = 1 << 171;\\n    uint256 internal constant _ROLE_172 = 1 << 172;\\n    uint256 internal constant _ROLE_173 = 1 << 173;\\n    uint256 internal constant _ROLE_174 = 1 << 174;\\n    uint256 internal constant _ROLE_175 = 1 << 175;\\n    uint256 internal constant _ROLE_176 = 1 << 176;\\n    uint256 internal constant _ROLE_177 = 1 << 177;\\n    uint256 internal constant _ROLE_178 = 1 << 178;\\n    uint256 internal constant _ROLE_179 = 1 << 179;\\n    uint256 internal constant _ROLE_180 = 1 << 180;\\n    uint256 internal constant _ROLE_181 = 1 << 181;\\n    uint256 internal constant _ROLE_182 = 1 << 182;\\n    uint256 internal constant _ROLE_183 = 1 << 183;\\n    uint256 internal constant _ROLE_184 = 1 << 184;\\n    uint256 internal constant _ROLE_185 = 1 << 185;\\n    uint256 internal constant _ROLE_186 = 1 << 186;\\n    uint256 internal constant _ROLE_187 = 1 << 187;\\n    uint256 internal constant _ROLE_188 = 1 << 188;\\n    uint256 internal constant _ROLE_189 = 1 << 189;\\n    uint256 internal constant _ROLE_190 = 1 << 190;\\n    uint256 internal constant _ROLE_191 = 1 << 191;\\n    uint256 internal constant _ROLE_192 = 1 << 192;\\n    uint256 internal constant _ROLE_193 = 1 << 193;\\n    uint256 internal constant _ROLE_194 = 1 << 194;\\n    uint256 internal constant _ROLE_195 = 1 << 195;\\n    uint256 internal constant _ROLE_196 = 1 << 196;\\n    uint256 internal constant _ROLE_197 = 1 << 197;\\n    uint256 internal constant _ROLE_198 = 1 << 198;\\n    uint256 internal constant _ROLE_199 = 1 << 199;\\n    uint256 internal constant _ROLE_200 = 1 << 200;\\n    uint256 internal constant _ROLE_201 = 1 << 201;\\n    uint256 internal constant _ROLE_202 = 1 << 202;\\n    uint256 internal constant _ROLE_203 = 1 << 203;\\n    uint256 internal constant _ROLE_204 = 1 << 204;\\n    uint256 internal constant _ROLE_205 = 1 << 205;\\n    uint256 internal constant _ROLE_206 = 1 << 206;\\n    uint256 internal constant _ROLE_207 = 1 << 207;\\n    uint256 internal constant _ROLE_208 = 1 << 208;\\n    uint256 internal constant _ROLE_209 = 1 << 209;\\n    uint256 internal constant _ROLE_210 = 1 << 210;\\n    uint256 internal constant _ROLE_211 = 1 << 211;\\n    uint256 internal constant _ROLE_212 = 1 << 212;\\n    uint256 internal constant _ROLE_213 = 1 << 213;\\n    uint256 internal constant _ROLE_214 = 1 << 214;\\n    uint256 internal constant _ROLE_215 = 1 << 215;\\n    uint256 internal constant _ROLE_216 = 1 << 216;\\n    uint256 internal constant _ROLE_217 = 1 << 217;\\n    uint256 internal constant _ROLE_218 = 1 << 218;\\n    uint256 internal constant _ROLE_219 = 1 << 219;\\n    uint256 internal constant _ROLE_220 = 1 << 220;\\n    uint256 internal constant _ROLE_221 = 1 << 221;\\n    uint256 internal constant _ROLE_222 = 1 << 222;\\n    uint256 internal constant _ROLE_223 = 1 << 223;\\n    uint256 internal constant _ROLE_224 = 1 << 224;\\n    uint256 internal constant _ROLE_225 = 1 << 225;\\n    uint256 internal constant _ROLE_226 = 1 << 226;\\n    uint256 internal constant _ROLE_227 = 1 << 227;\\n    uint256 internal constant _ROLE_228 = 1 << 228;\\n    uint256 internal constant _ROLE_229 = 1 << 229;\\n    uint256 internal constant _ROLE_230 = 1 << 230;\\n    uint256 internal constant _ROLE_231 = 1 << 231;\\n    uint256 internal constant _ROLE_232 = 1 << 232;\\n    uint256 internal constant _ROLE_233 = 1 << 233;\\n    uint256 internal constant _ROLE_234 = 1 << 234;\\n    uint256 internal constant _ROLE_235 = 1 << 235;\\n    uint256 internal constant _ROLE_236 = 1 << 236;\\n    uint256 internal constant _ROLE_237 = 1 << 237;\\n    uint256 internal constant _ROLE_238 = 1 << 238;\\n    uint256 internal constant _ROLE_239 = 1 << 239;\\n    uint256 internal constant _ROLE_240 = 1 << 240;\\n    uint256 internal constant _ROLE_241 = 1 << 241;\\n    uint256 internal constant _ROLE_242 = 1 << 242;\\n    uint256 internal constant _ROLE_243 = 1 << 243;\\n    uint256 internal constant _ROLE_244 = 1 << 244;\\n    uint256 internal constant _ROLE_245 = 1 << 245;\\n    uint256 internal constant _ROLE_246 = 1 << 246;\\n    uint256 internal constant _ROLE_247 = 1 << 247;\\n    uint256 internal constant _ROLE_248 = 1 << 248;\\n    uint256 internal constant _ROLE_249 = 1 << 249;\\n    uint256 internal constant _ROLE_250 = 1 << 250;\\n    uint256 internal constant _ROLE_251 = 1 << 251;\\n    uint256 internal constant _ROLE_252 = 1 << 252;\\n    uint256 internal constant _ROLE_253 = 1 << 253;\\n    uint256 internal constant _ROLE_254 = 1 << 254;\\n    uint256 internal constant _ROLE_255 = 1 << 255;\\n}\\n\",\"keccak256\":\"0x27a1c151d748174587f74b79b7c42274ecaa722d100e473d750a8b4704addcfd\",\"license\":\"MIT\"},\"@turbo-eth/solbase-sol/src/utils/Base64.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Library to encode and decode strings in Base64.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\\nlibrary Base64 {\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// See: https://datatracker.ietf.org/doc/html/rfc4648\\n    /// @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\\n    /// @param noPadding Whether to strip away the padding.\\n    function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                // Multiply by 4/3 rounded up.\\n                // The `shl(2, ...)` is equivalent to multiplying by 4.\\n                let encodedLength := shl(2, div(add(dataLength, 2), 3))\\n\\n                // Set `result` to point to the start of the free memory.\\n                result := mload(0x40)\\n\\n                // Store the table into the scratch space.\\n                // Offsetted by -1 byte so that the `mload` will load the character.\\n                // We will rewrite the free memory pointer at `0x40` later with\\n                // the allocated size.\\n                // The magic constant 0x0230 will translate \\\"-_\\\" + \\\"+/\\\".\\n                mstore(0x1f, \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef\\\")\\n                mstore(0x3f, sub(\\\"ghijklmnopqrstuvwxyz0123456789-_\\\", mul(iszero(fileSafe), 0x0230)))\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n                let end := add(ptr, encodedLength)\\n\\n                // Run over the input, 3 bytes at a time.\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    data := add(data, 3) // Advance 3 bytes.\\n                    let input := mload(data)\\n\\n                    // Write 4 bytes. Optimized for fewer stack operations.\\n                    mstore8(    ptr    , mload(and(shr(18, input), 0x3F)))\\n                    mstore8(add(ptr, 1), mload(and(shr(12, input), 0x3F)))\\n                    mstore8(add(ptr, 2), mload(and(shr( 6, input), 0x3F)))\\n                    mstore8(add(ptr, 3), mload(and(        input , 0x3F)))\\n                    \\n                    ptr := add(ptr, 4) // Advance 4 bytes.\\n                    // prettier-ignore\\n                    if iszero(lt(ptr, end)) { break }\\n                }\\n\\n                let r := mod(dataLength, 3)\\n\\n                switch noPadding\\n                case 0 {\\n                    // Offset `ptr` and pad with '='. We can simply write over the end.\\n                    mstore8(sub(ptr, iszero(iszero(r))), 0x3d) // Pad at `ptr - 1` if `r > 0`.\\n                    mstore8(sub(ptr, shl(1, eq(r, 1))), 0x3d) // Pad at `ptr - 2` if `r == 1`.\\n                    // Write the length of the string.\\n                    mstore(result, encodedLength)\\n                }\\n                default {\\n                    // Write the length of the string.\\n                    mstore(result, sub(encodedLength, add(iszero(iszero(r)), eq(r, 1))))\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(end, 31), not(31)))\\n            }\\n        }\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, false, false)`.\\n    function encode(bytes memory data) internal pure returns (string memory result) {\\n        result = encode(data, false, false);\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, fileSafe, false)`.\\n    function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) {\\n        result = encode(data, fileSafe, false);\\n    }\\n\\n    /// @dev Decodes base64 encoded `data`.\\n    ///\\n    /// Supports:\\n    /// - RFC 4648 (both standard and file-safe mode).\\n    /// - RFC 3501 (63: ',').\\n    ///\\n    /// Does not support:\\n    /// - Line breaks.\\n    ///\\n    /// Note: For performance reasons,\\n    /// this function will NOT revert on invalid `data` inputs.\\n    /// Outputs for invalid inputs will simply be undefined behaviour.\\n    /// It is the user's responsibility to ensure that the `data`\\n    /// is a valid base64 encoded string.\\n    function decode(string memory data) internal pure returns (bytes memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                let end := add(data, dataLength)\\n                let decodedLength := mul(shr(2, dataLength), 3)\\n\\n                switch and(dataLength, 3)\\n                case 0 {\\n                    // If padded.\\n                    decodedLength := sub(\\n                        decodedLength,\\n                        add(eq(and(mload(end), 0xFF), 0x3d), eq(and(mload(end), 0xFFFF), 0x3d3d))\\n                    )\\n                }\\n                default {\\n                    // If non-padded.\\n                    decodedLength := add(decodedLength, sub(and(dataLength, 3), 1))\\n                }\\n\\n                result := mload(0x40)\\n\\n                // Write the length of the string.\\n                mstore(result, decodedLength)\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n\\n                // Load the table into the scratch space.\\n                // Constants are optimized for smaller bytecode with zero gas overhead.\\n                // `m` also doubles as the mask of the upper 6 bits.\\n                let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc\\n                mstore(0x5b, m)\\n                mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064)\\n                mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4)\\n\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    // Read 4 bytes.\\n                    data := add(data, 4)\\n                    let input := mload(data)\\n\\n                    // Write 3 bytes.\\n                    mstore(ptr, or(\\n                        and(m, mload(byte(28, input))),\\n                        shr(6, or(\\n                            and(m, mload(byte(29, input))),\\n                            shr(6, or(\\n                                and(m, mload(byte(30, input))),\\n                                shr(6, mload(byte(31, input)))\\n                            ))\\n                        ))\\n                    ))\\n\\n                    ptr := add(ptr, 3)\\n                    \\n                    // prettier-ignore\\n                    if iszero(lt(data, end)) { break }\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 32 + 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(add(result, decodedLength), 63), not(31)))\\n\\n                // Restore the zero slot.\\n                mstore(0x60, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xeed3c8ce53e43c0aecded4dbb14327519335596e4c742f8bc775c224538cd23e\",\"license\":\"MIT\"},\"contracts/ERC721K.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\nimport { ERC721 } from \\\"./helpers/ERC721.sol\\\";\\nimport { OwnedRoles } from \\\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\\\";\\nimport { ERC721Storage } from \\\"./ERC721Storage.sol\\\";\\n\\n/**\\n * @title ERC721K\\n * @author Kames Geraghty\\n */\\nabstract contract ERC721K is ERC721, OwnedRoles {\\n  /// @notice ID counter for ERC721 tokens\\n  uint256 internal _idCounter;\\n\\n  /// @notice ENSReverseRecords instance\\n  address internal _erc721Storage;\\n\\n  event ERC721StorageUpdated(address erc721Storage);\\n\\n  /**\\n   * @notice ERC721K Construction\\n   * @param name_ string - Name of ERC721 token\\n   * @param symbol_ string - Symbol of ERC721 token\\n   * @param _erc721Storage_ address - Metadata instance\\n   */\\n  constructor(\\n    string memory name_,\\n    string memory symbol_,\\n    address _erc721Storage_\\n  ) ERC721(name_, symbol_) {\\n    _erc721Storage = _erc721Storage_;\\n    _initializeOwner(msg.sender);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* EIP Functions                                                                     */\\n  /* ===================================================================================== */\\n  function supportsInterface(bytes4 interfaceId)\\n    public\\n    view\\n    virtual\\n    override(ERC721)\\n    returns (bool)\\n  {\\n    return super.supportsInterface(interfaceId);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* Virtual Functions                                                                     */\\n  /* ===================================================================================== */\\n  function _tokenData(uint256 tokenId)\\n    internal\\n    view\\n    virtual\\n    returns (bytes memory imageBytes, bytes memory traitsBytes);\\n\\n  /* ===================================================================================== */\\n  /* External Functions                                                                    */\\n  /* ===================================================================================== */\\n\\n  function contractURI() external view returns (string memory) {\\n    return ERC721Storage(_erc721Storage).constructContractURI();\\n  }\\n\\n  function totalSupply() external view returns (uint256) {\\n    return _idCounter;\\n  }\\n\\n  function getERC721Storage() external view returns (address) {\\n    return _erc721Storage;\\n  }\\n\\n  function tokenURI(uint256 tokenId) public view override returns (string memory) {\\n    (bytes memory imageBytes, bytes memory traitsBytes) = _tokenData(tokenId);\\n    return ERC721Storage(_erc721Storage).constructTokenURI(tokenId, imageBytes, traitsBytes);\\n  }\\n\\n  /* ====================================== */\\n  /* Writes\\n  /* ====================================== */\\n\\n  function setStorage(address erc721Storage) external onlyOwner {\\n    _erc721Storage = erc721Storage;\\n    emit ERC721StorageUpdated(erc721Storage);\\n  }\\n}\\n\",\"keccak256\":\"0x4c2f02ed5e4b30eb0b433a3f6a7ee24ff0790dea6150aa7064d622e32819f9c5\",\"license\":\"MIT\"},\"contracts/ERC721Storage.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.8.15;\\n\\nimport { Base64 } from \\\"@turbo-eth/solbase-sol/src/utils/Base64.sol\\\";\\nimport { OwnedRoles } from \\\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\\\";\\nimport { IERC721KImage } from \\\"./interfaces/IERC721KImage.sol\\\";\\nimport { IERC721KTraits } from \\\"./interfaces/IERC721KTraits.sol\\\";\\n\\n/**\\n * @title ERC721Storage\\n * @author Kames Geraghty\\n */\\nabstract contract ERC721Storage is OwnedRoles {\\n  address internal svgRenderInstance;\\n  address internal traitsFetchInstance;\\n  ContractURI internal _contractURI;\\n\\n  struct ContractURI {\\n    string name;\\n    string description;\\n    string image;\\n    string externalLink;\\n    string sellerFeeBasisPoints;\\n    string feeRecipient;\\n  }\\n\\n  event SvgRenderUpdated(address svgRender);\\n\\n  event TraitsFetchUpdated(address traitsFetch);\\n\\n  event ContractURIUpdated(ContractURI contractURI);\\n\\n  constructor(\\n    address svgRender_Instance,\\n    address traitsFetchInstance_,\\n    ContractURI memory _contractURI_\\n  ) OwnedRoles() {\\n    svgRenderInstance = svgRender_Instance;\\n    traitsFetchInstance = traitsFetchInstance_;\\n    _contractURI = _contractURI_;\\n    _initializeOwner(msg.sender);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* Virtual Functions                                                                     */\\n  /* ===================================================================================== */\\n\\n  function _parseName(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  function _parseDescription(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  /* ===================================================================================== */\\n  /* External Functions                                                                    */\\n  /* ===================================================================================== */\\n  function getERC721KRender() external view returns (address) {\\n    return svgRenderInstance;\\n  }\\n\\n  function getERC72KTraits() external view returns (address) {\\n    return traitsFetchInstance;\\n  }\\n\\n  function getContractDescription() external view returns (ContractURI memory) {\\n    return _contractURI;\\n  }\\n\\n  function render(bytes memory input) external view returns (string memory) {\\n    return IERC721KImage(svgRenderInstance).render(input);\\n  }\\n\\n  function constructTokenURI(\\n    uint256 tokenId,\\n    bytes memory input0,\\n    bytes memory input1\\n  ) external view virtual returns (string memory uri) {\\n    string memory image_ = IERC721KImage(svgRenderInstance).render(input0);\\n    string memory traits_ = IERC721KTraits(traitsFetchInstance).fetch(input1);\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _parseName(tokenId),\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _parseDescription(tokenId),\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                image_,\\n                '\\\",',\\n                '\\\"attributes\\\": [',\\n                traits_,\\n                \\\"]\\\",\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function constructContractURI() external view virtual returns (string memory uri) {\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _contractURI.name,\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _contractURI.description,\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                _contractURI.image,\\n                '\\\",',\\n                '\\\"externalLink\\\":',\\n                '\\\"',\\n                _contractURI.externalLink,\\n                '\\\",',\\n                '\\\"sellerFeeBasisPoints\\\":',\\n                '\\\"',\\n                _contractURI.sellerFeeBasisPoints,\\n                '\\\",',\\n                '\\\"feeRecipient\\\":',\\n                '\\\"',\\n                _contractURI.feeRecipient,\\n                '\\\"',\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function setSvgRender(address svgRender) external onlyOwner {\\n    svgRenderInstance = svgRender;\\n    emit SvgRenderUpdated(svgRender);\\n  }\\n\\n  function setTraitsFetch(address traitsFetch) external onlyOwner {\\n    traitsFetchInstance = traitsFetch;\\n    emit TraitsFetchUpdated(traitsFetch);\\n  }\\n\\n  function setContractURI(ContractURI memory contractURI) external onlyOwner {\\n    _contractURI = contractURI;\\n    emit ContractURIUpdated(contractURI);\\n  }\\n}\\n\",\"keccak256\":\"0x7705c2b846d59c00cd26341f54be5397e3cb37e1955e6fc6bd9daf85e86035ca\",\"license\":\"GPL-3.0\"},\"contracts/helpers/ERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Modern, minimalist, and gas-optimized ERC721 implementation.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721 {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\\n\\n    event Approval(address indexed owner, address indexed spender, uint256 indexed id);\\n\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    error NotMinted();\\n\\n    error ZeroAddress();\\n\\n    error NotAuthorized();\\n\\n    error WrongFrom();\\n\\n    error InvalidRecipient();\\n\\n    error UnsafeRecipient();\\n\\n    error AlreadyMinted();\\n\\n    /// -----------------------------------------------------------------------\\n    /// Metadata Storage/Logic\\n    /// -----------------------------------------------------------------------\\n\\n    string public name;\\n\\n    string public symbol;\\n\\n    function tokenURI(uint256 id) public view virtual returns (string memory);\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Balance/Owner Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) internal _ownerOf;\\n\\n    mapping(address => uint256) internal _balanceOf;\\n\\n    function ownerOf(uint256 id) public view virtual returns (address owner) {\\n        if ((owner = _ownerOf[id]) == address(0)) revert NotMinted();\\n    }\\n\\n    function balanceOf(address owner) public view virtual returns (uint256) {\\n        if (owner == address(0)) revert ZeroAddress();\\n        return _balanceOf[owner];\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Approval Storage\\n    /// -----------------------------------------------------------------------\\n\\n    mapping(uint256 => address) public getApproved;\\n\\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Constructor\\n    /// -----------------------------------------------------------------------\\n\\n    constructor(string memory _name, string memory _symbol) {\\n        name = _name;\\n        symbol = _symbol;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC721 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function approve(address spender, uint256 id) public virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) revert NotAuthorized();\\n\\n        getApproved[id] = spender;\\n\\n        emit Approval(owner, spender, id);\\n    }\\n\\n    function setApprovalForAll(address operator, bool approved) public virtual {\\n        isApprovedForAll[msg.sender][operator] = approved;\\n\\n        emit ApprovalForAll(msg.sender, operator, approved);\\n    }\\n\\n    function transferFrom(address from, address to, uint256 id) public virtual {\\n        if (from != _ownerOf[id]) revert WrongFrom();\\n\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[id])\\n            revert NotAuthorized();\\n\\n        // Underflow of the sender's balance is impossible because we check for\\n        // ownership above and the recipient's balance can't realistically overflow.\\n        unchecked {\\n            _balanceOf[from]--;\\n\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(from, to, id);\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function safeTransferFrom(address from, address to, uint256 id, bytes calldata data) public virtual {\\n        transferFrom(from, to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// ERC165 Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\\n        return\\n            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165\\n            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721\\n            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Mint/Burn Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _mint(address to, uint256 id) internal virtual {\\n        if (to == address(0)) revert InvalidRecipient();\\n\\n        if (_ownerOf[id] != address(0)) revert AlreadyMinted();\\n\\n        // Counter overflow is incredibly unrealistic.\\n        unchecked {\\n            _balanceOf[to]++;\\n        }\\n\\n        _ownerOf[id] = to;\\n\\n        emit Transfer(address(0), to, id);\\n    }\\n\\n    function _burn(uint256 id) internal virtual {\\n        address owner = _ownerOf[id];\\n\\n        if (owner == address(0)) revert NotMinted();\\n\\n        // Ownership check above ensures no underflow.\\n        unchecked {\\n            _balanceOf[owner]--;\\n        }\\n\\n        delete _ownerOf[id];\\n\\n        delete getApproved[id];\\n\\n        emit Transfer(owner, address(0), id);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Safe Mint Logic\\n    /// -----------------------------------------------------------------------\\n\\n    function _safeMint(address to, uint256 id) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, \\\"\\\") !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n\\n    function _safeMint(address to, uint256 id, bytes memory data) internal virtual {\\n        _mint(to, id);\\n\\n        if (to.code.length != 0) {\\n            if (\\n                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) !=\\n                ERC721TokenReceiver.onERC721Received.selector\\n            ) revert UnsafeRecipient();\\n        }\\n    }\\n}\\n\\n/// @notice A generic interface for a contract which properly accepts ERC721 tokens.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)\\nabstract contract ERC721TokenReceiver {\\n    function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {\\n        return ERC721TokenReceiver.onERC721Received.selector;\\n    }\\n}\\n\",\"keccak256\":\"0x7032b7724daa41f1c7d6aab0b4247bb10c94b1f82089afe5a2bf468a39be3555\",\"license\":\"MIT\"},\"contracts/interfaces/IERC721KImage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KImage {\\n  function render(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x8474249915bfc50221f4431b8853338ae27e8847ac3ef563dda437dd809a8846\",\"license\":\"MIT\"},\"contracts/interfaces/IERC721KTraits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KTraits {\\n  enum DisplayType {\\n    Base,\\n    Generic,\\n    BoostNumber,\\n    BoostPercent,\\n    Number,\\n    Date\\n  }\\n\\n  function fetch(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xeea24a181f0175f89ed357503946fbbb39c92a1b2b4764268d4613a773f3c9ea\",\"license\":\"MIT\"},\"contracts/mocks/MockERC721K.sol\":{\"content\":\"//SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.8.15;\\n\\nimport { ERC721K } from \\\"../ERC721K.sol\\\";\\n\\ncontract MockERC721K is ERC721K {\\n  constructor(\\n    string memory name,\\n    string memory symbol,\\n    address erc721Storage\\n  ) ERC721K(name, symbol, erc721Storage) {}\\n\\n  function _tokenData(uint256) internal view virtual override returns (bytes memory, bytes memory) {\\n    bytes memory imageBytes;\\n    bytes memory traitsBytes;\\n    return (imageBytes, traitsBytes);\\n  }\\n}\\n\",\"keccak256\":\"0xad7d0faec3d5b26c684b06bf7ef81270dd3ccb92ca5ddbef0ca86b42fe098b93\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 3193,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "name",
                "offset": 0,
                "slot": "0",
                "type": "t_string_storage"
              },
              {
                "astId": 3195,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "symbol",
                "offset": 0,
                "slot": "1",
                "type": "t_string_storage"
              },
              {
                "astId": 3207,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "_ownerOf",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_uint256,t_address)"
              },
              {
                "astId": 3211,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "_balanceOf",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 3261,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "getApproved",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_uint256,t_address)"
              },
              {
                "astId": 3267,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "isApprovedForAll",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_bool))"
              },
              {
                "astId": 2718,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "_idCounter",
                "offset": 0,
                "slot": "6",
                "type": "t_uint256"
              },
              {
                "astId": 2721,
                "contract": "contracts/mocks/MockERC721K.sol:MockERC721K",
                "label": "_erc721Storage",
                "offset": 0,
                "slot": "7",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_bool))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => bool))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_bool)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_uint256,t_address)": {
                "encoding": "mapping",
                "key": "t_uint256",
                "label": "mapping(uint256 => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NotMinted()": [
                {
                  "notice": "----------------------------------------------------------------------- Custom Errors -----------------------------------------------------------------------"
                }
              ]
            },
            "events": {
              "Transfer(address,address,uint256)": {
                "notice": "----------------------------------------------------------------------- Events -----------------------------------------------------------------------"
              }
            },
            "kind": "user",
            "methods": {
              "approve(address,uint256)": {
                "notice": "----------------------------------------------------------------------- ERC721 Logic -----------------------------------------------------------------------"
              },
              "getApproved(uint256)": {
                "notice": "----------------------------------------------------------------------- ERC721 Approval Storage -----------------------------------------------------------------------"
              },
              "name()": {
                "notice": "----------------------------------------------------------------------- Metadata Storage/Logic -----------------------------------------------------------------------"
              },
              "supportsInterface(bytes4)": {
                "notice": "----------------------------------------------------------------------- ERC165 Logic -----------------------------------------------------------------------"
              }
            },
            "version": 1
          }
        }
      },
      "contracts/mocks/MockERC721Storage.sol": {
        "MockERC721Storage": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_svgRender_",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_traitsFetch_",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "_contractURI_",
                  "type": "tuple"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "NewOwnerIsZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoHandoverRequest",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Unauthorized",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "indexed": false,
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "contractURI",
                  "type": "tuple"
                }
              ],
              "name": "ContractURIUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverCanceled",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipHandoverRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "oldOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "RolesUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "svgRender",
                  "type": "address"
                }
              ],
              "name": "SvgRenderUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "traitsFetch",
                  "type": "address"
                }
              ],
              "name": "TraitsFetchUpdated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "cancelOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "completeOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "constructContractURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "input0",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes",
                  "name": "input1",
                  "type": "bytes"
                }
              ],
              "name": "constructTokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getContractDescription",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getERC721KRender",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getERC72KTraits",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "grantRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAllRoles",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "hasAnyRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "result",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "ordinalsFromRoles",
              "outputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "result",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pendingOwner",
                  "type": "address"
                }
              ],
              "name": "ownershipHandoverExpiresAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "result",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ownershipHandoverValidFor",
              "outputs": [
                {
                  "internalType": "uint64",
                  "name": "",
                  "type": "uint64"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "input",
                  "type": "bytes"
                }
              ],
              "name": "render",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "renounceRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestOwnershipHandover",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "name": "revokeRoles",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8[]",
                  "name": "ordinals",
                  "type": "uint8[]"
                }
              ],
              "name": "rolesFromOrdinals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "user",
                  "type": "address"
                }
              ],
              "name": "rolesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "roles",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "components": [
                    {
                      "internalType": "string",
                      "name": "name",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "description",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "image",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "externalLink",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "sellerFeeBasisPoints",
                      "type": "string"
                    },
                    {
                      "internalType": "string",
                      "name": "feeRecipient",
                      "type": "string"
                    }
                  ],
                  "internalType": "struct ERC721Storage.ContractURI",
                  "name": "contractURI",
                  "type": "tuple"
                }
              ],
              "name": "setContractURI",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "svgRender",
                  "type": "address"
                }
              ],
              "name": "setSvgRender",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "traitsFetch",
                  "type": "address"
                }
              ],
              "name": "setTraitsFetch",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "devdoc": {
            "errors": {
              "NewOwnerIsZeroAddress()": [
                {
                  "details": "The `newOwner` cannot be the zero address."
                }
              ],
              "NoHandoverRequest()": [
                {
                  "details": "The `pendingOwner` does not have a valid handover request."
                }
              ],
              "Unauthorized()": [
                {
                  "details": "The caller is not authorized to call the function."
                }
              ]
            },
            "kind": "dev",
            "methods": {
              "cancelOwnershipHandover()": {
                "details": "Cancels the two-step ownership handover to the caller, if any."
              },
              "completeOwnershipHandover(address)": {
                "details": "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
              },
              "grantRoles(address,uint256)": {
                "details": "Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role."
              },
              "hasAllRoles(address,uint256)": {
                "details": "Returns whether `user` has all of `roles`."
              },
              "hasAnyRole(address,uint256)": {
                "details": "Returns whether `user` has any of `roles`."
              },
              "ordinalsFromRoles(uint256)": {
                "details": "Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "owner()": {
                "details": "Returns the owner of the contract."
              },
              "ownershipHandoverExpiresAt(address)": {
                "details": "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
              },
              "ownershipHandoverValidFor()": {
                "details": "Returns how long a two-step ownership handover is valid for in seconds."
              },
              "renounceOwnership()": {
                "details": "Allows the owner to renounce their ownership."
              },
              "renounceRoles(uint256)": {
                "details": "Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role."
              },
              "requestOwnershipHandover()": {
                "details": "Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default."
              },
              "revokeRoles(address,uint256)": {
                "details": "Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role."
              },
              "rolesFromOrdinals(uint8[])": {
                "details": "Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain."
              },
              "rolesOf(address)": {
                "details": "Returns the roles of `user`."
              },
              "transferOwnership(address)": {
                "details": "Allows the owner to transfer the ownership to `newOwner`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_2920": {
                  "entryPoint": null,
                  "id": 2920,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_3835": {
                  "entryPoint": null,
                  "id": 3835,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_initializeOwner_1119": {
                  "entryPoint": 270,
                  "id": 1119,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 330,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_string_fromMemory": {
                  "entryPoint": 475,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_struct$_ContractURI_$2877_memory_ptr_fromMemory": {
                  "entryPoint": 624,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "allocate_memory": {
                  "entryPoint": 424,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "allocate_memory_912": {
                  "entryPoint": 381,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "array_dataslot_string_storage": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "clean_up_bytearray_end_slots_string_storage": {
                  "entryPoint": 1035,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": {
                  "entryPoint": 1118,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 975,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "extract_used_part_and_set_length_of_short_byte_array": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "panic_error_0x41": {
                  "entryPoint": 359,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:5835:11",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:11",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:11"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:11",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:11"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:11"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:11",
                            "type": ""
                          }
                        ],
                        "src": "14:177:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "228:95:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "245:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "252:3:11",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "257:10:11",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "248:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "248:20:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "238:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "238:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "238:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "285:1:11",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "288:4:11",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "278:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "278:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "278:15:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "309:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "312:4:11",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "302:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "302:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "302:15:11"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "196:127:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "373:207:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "383:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "399:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "393:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "393:9:11"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "383:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "411:35:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "433:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "441:4:11",
                                    "type": "",
                                    "value": "0xc0"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "429:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "429:17:11"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "415:10:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "521:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "523:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "523:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "523:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "464:10:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "484:2:11",
                                                "type": "",
                                                "value": "64"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "488:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "480:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "480:10:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "492:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "476:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "476:18:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "461:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "461:34:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:10:11"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "512:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "497:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "497:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "458:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "458:62:11"
                              },
                              "nodeType": "YulIf",
                              "src": "455:88:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "559:2:11",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:10:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "552:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "552:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "552:22:11"
                            }
                          ]
                        },
                        "name": "allocate_memory_912",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "362:6:11",
                            "type": ""
                          }
                        ],
                        "src": "328:252:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "630:230:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "640:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "656:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "650:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "650:9:11"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "640:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "668:58:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "690:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "706:4:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "712:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "702:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "702:13:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "721:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "717:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "717:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "698:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "698:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "686:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "686:40:11"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "672:10:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "801:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "803:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "803:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "803:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "744:10:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "764:2:11",
                                                "type": "",
                                                "value": "64"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "768:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "760:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "760:10:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "772:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "756:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "756:18:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "741:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "741:34:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "780:10:11"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "792:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "777:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "777:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "738:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "738:62:11"
                              },
                              "nodeType": "YulIf",
                              "src": "735:88:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "839:2:11",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "843:10:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "832:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "832:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "832:22:11"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "610:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "619:6:11",
                            "type": ""
                          }
                        ],
                        "src": "585:275:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "929:631:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "978:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "987:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "990:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "980:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "980:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "980:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "957:6:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "965:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "953:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "953:17:11"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "972:3:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "949:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "949:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "942:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "942:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "939:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1003:23:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1019:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1013:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1013:13:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1007:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1065:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1067:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1067:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1067:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1041:2:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1053:2:11",
                                            "type": "",
                                            "value": "64"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1057:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "1049:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1049:10:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1061:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1045:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1045:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1038:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1038:26:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1035:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1096:14:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1106:4:11",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1100:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1119:68:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "1162:2:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1166:4:11",
                                                "type": "",
                                                "value": "0x1f"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "1158:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1158:13:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1177:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "1173:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1173:7:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1154:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1154:27:11"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1183:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1150:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1150:36:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1134:15:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1134:53:11"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1123:7:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1203:7:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1212:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1196:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1196:19:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1196:19:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1261:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1270:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1273:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1263:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1263:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1263:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1238:6:11"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "1246:2:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1234:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1234:15:11"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1251:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1230:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1230:24:11"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1256:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1227:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1227:33:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1224:53:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1286:10:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1295:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1290:1:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1351:88:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "array_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1380:7:11"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1389:1:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1376:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1376:15:11"
                                            },
                                            {
                                              "name": "_2",
                                              "nodeType": "YulIdentifier",
                                              "src": "1393:2:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1372:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1372:24:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1412:6:11"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1420:1:11"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1408:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1408:14:11"
                                                },
                                                {
                                                  "name": "_2",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1424:2:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1404:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1404:23:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1398:5:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1398:30:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1365:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1365:64:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1365:64:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1316:1:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1319:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1313:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1313:9:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1323:19:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1325:15:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1334:1:11"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1337:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1330:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1330:10:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1325:1:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1309:3:11",
                                "statements": []
                              },
                              "src": "1305:134:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1469:60:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "array_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1498:7:11"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1507:2:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1494:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1494:16:11"
                                            },
                                            {
                                              "name": "_2",
                                              "nodeType": "YulIdentifier",
                                              "src": "1512:2:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1490:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1490:25:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1517:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1483:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1483:36:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1483:36:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:1:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1457:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1451:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1451:9:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1448:81:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1538:16:11",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "1547:7:11"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "1538:5:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "903:6:11",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "911:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "919:5:11",
                            "type": ""
                          }
                        ],
                        "src": "865:695:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1709:1535:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1755:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1764:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1767:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1757:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1757:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1757:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1730:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1739:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1726:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1726:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1751:2:11",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1722:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1722:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1719:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1780:50:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1820:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1790:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1790:40:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1780:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1839:59:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1883:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1894:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1879:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1879:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1849:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1849:49:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1839:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1907:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1931:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1942:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1927:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1927:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1921:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1921:25:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1911:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1955:28:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1973:2:11",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1977:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1969:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1969:10:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1981:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1965:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1965:18:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1959:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2010:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2019:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2022:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2012:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2012:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2012:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1998:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2006:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1995:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1995:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1992:34:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2035:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2049:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2060:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2045:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2045:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2039:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2107:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2116:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2119:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2109:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2109:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2109:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2087:7:11"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2096:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2083:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2083:16:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2101:4:11",
                                    "type": "",
                                    "value": "0xc0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2079:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2079:27:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2076:47:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2132:34:11",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "allocate_memory_912",
                                  "nodeType": "YulIdentifier",
                                  "src": "2145:19:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2145:21:11"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2136:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2175:25:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2197:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2191:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2191:9:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2179:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2229:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2238:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2241:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2231:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2231:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2231:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2215:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2225:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2212:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2212:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2209:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2261:5:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2301:2:11"
                                          },
                                          {
                                            "name": "offset_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2305:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2297:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2297:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2316:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_string_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "2268:28:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2268:56:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2254:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2254:71:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2254:71:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2334:34:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2360:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2364:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2356:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2356:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2350:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2350:18:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2338:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2397:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2406:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2409:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2399:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2399:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2399:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2383:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2393:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2380:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2380:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2377:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2433:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2440:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2429:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2429:14:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2478:2:11"
                                          },
                                          {
                                            "name": "offset_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2482:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2474:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2474:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2493:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_string_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "2445:28:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2445:56:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2422:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2422:80:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2422:80:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2511:34:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2537:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2541:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2533:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2533:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2527:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2527:18:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_3",
                                  "nodeType": "YulTypedName",
                                  "src": "2515:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2574:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2583:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2586:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2576:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2576:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2576:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2560:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2570:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2557:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2557:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2554:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2610:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2617:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2606:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2606:14:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2655:2:11"
                                          },
                                          {
                                            "name": "offset_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2659:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2651:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2651:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2670:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_string_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "2622:28:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2622:56:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2599:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2599:80:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2599:80:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2688:34:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2714:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2718:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2710:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2710:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2704:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2704:18:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_4",
                                  "nodeType": "YulTypedName",
                                  "src": "2692:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2751:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2760:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2763:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2753:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2753:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2753:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "2737:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2747:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2734:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2734:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2731:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2787:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2794:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2783:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2783:14:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2832:2:11"
                                          },
                                          {
                                            "name": "offset_4",
                                            "nodeType": "YulIdentifier",
                                            "src": "2836:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2828:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2828:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2847:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_string_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "2799:28:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2799:56:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2776:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2776:80:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2776:80:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2865:35:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2891:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2895:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2887:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2887:12:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2881:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2881:19:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_5",
                                  "nodeType": "YulTypedName",
                                  "src": "2869:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2929:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2938:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2941:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2931:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2931:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2931:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "2915:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2925:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2912:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2912:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2909:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2965:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2972:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2961:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2961:15:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3011:2:11"
                                          },
                                          {
                                            "name": "offset_5",
                                            "nodeType": "YulIdentifier",
                                            "src": "3015:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3007:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3007:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3026:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_string_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "2978:28:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2978:56:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2954:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2954:81:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2954:81:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3044:35:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "3070:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3074:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3066:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3066:12:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3060:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3060:19:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_6",
                                  "nodeType": "YulTypedName",
                                  "src": "3048:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3108:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3117:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3120:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3110:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3110:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3110:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "3094:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3104:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3091:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3091:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3088:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3144:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3151:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3140:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3140:15:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3190:2:11"
                                          },
                                          {
                                            "name": "offset_6",
                                            "nodeType": "YulIdentifier",
                                            "src": "3194:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3186:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3186:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3205:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_string_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "3157:28:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3157:56:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3133:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3133:81:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3133:81:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3223:15:11",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3233:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3223:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_struct$_ContractURI_$2877_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1659:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1670:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1682:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1690:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1698:6:11",
                            "type": ""
                          }
                        ],
                        "src": "1565:1679:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3304:325:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3314:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3328:1:11",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "3331:4:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3324:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3324:12:11"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "3314:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3345:38:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "3375:4:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3381:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "3371:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3371:12:11"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "3349:18:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3422:31:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3424:27:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "3438:6:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3446:4:11",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "3434:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3434:17:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "3424:6:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "3402:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3395:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3395:26:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3392:61:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3512:111:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3533:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3540:3:11",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3545:10:11",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "3536:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3536:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3526:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3526:31:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3526:31:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3577:1:11",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3580:4:11",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3570:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3570:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3570:15:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3605:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3608:4:11",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3598:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3598:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3598:15:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "3468:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "3491:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3499:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3488:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3488:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "3465:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3465:38:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3462:161:11"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "3284:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "3293:6:11",
                            "type": ""
                          }
                        ],
                        "src": "3249:380:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3690:65:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3707:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3710:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3700:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3700:14:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3700:14:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3723:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3741:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3744:4:11",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "3731:9:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3731:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "3723:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_dataslot_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "3673:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "3681:4:11",
                            "type": ""
                          }
                        ],
                        "src": "3634:121:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3841:464:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3874:425:11",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3888:11:11",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "3898:1:11",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulTypedName",
                                        "src": "3892:2:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3919:2:11"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "3923:5:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3912:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3912:17:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3912:17:11"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3942:31:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3964:2:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3968:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "3954:9:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3954:19:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulTypedName",
                                        "src": "3946:4:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3986:57:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "4009:4:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4019:1:11",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "startIndex",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4026:10:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4038:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "4022:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4022:19:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "4015:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4015:27:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4005:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4005:38:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "deleteStart",
                                        "nodeType": "YulTypedName",
                                        "src": "3990:11:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "4080:23:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4082:19:11",
                                          "value": {
                                            "name": "data",
                                            "nodeType": "YulIdentifier",
                                            "src": "4097:4:11"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "deleteStart",
                                              "nodeType": "YulIdentifier",
                                              "src": "4082:11:11"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "startIndex",
                                          "nodeType": "YulIdentifier",
                                          "src": "4062:10:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4074:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "4059:2:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4059:20:11"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "4056:47:11"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "4116:41:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "4130:4:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4140:1:11",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "len",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4147:3:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4152:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "4143:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4143:12:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "4136:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4136:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4126:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4126:31:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulTypedName",
                                        "src": "4120:2:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "4170:24:11",
                                    "value": {
                                      "name": "deleteStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "4183:11:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "start",
                                        "nodeType": "YulTypedName",
                                        "src": "4174:5:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "4268:21:11",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "start",
                                                "nodeType": "YulIdentifier",
                                                "src": "4277:5:11"
                                              },
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "4284:2:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "4270:6:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4270:17:11"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "4270:17:11"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "start",
                                          "nodeType": "YulIdentifier",
                                          "src": "4218:5:11"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4225:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "4215:2:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4215:13:11"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "4229:26:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4231:22:11",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "start",
                                                "nodeType": "YulIdentifier",
                                                "src": "4244:5:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4251:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4240:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4240:13:11"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "start",
                                              "nodeType": "YulIdentifier",
                                              "src": "4231:5:11"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "4211:3:11",
                                      "statements": []
                                    },
                                    "src": "4207:82:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "len",
                                    "nodeType": "YulIdentifier",
                                    "src": "3857:3:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3862:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3854:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3854:11:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3851:448:11"
                            }
                          ]
                        },
                        "name": "clean_up_bytearray_end_slots_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "3813:5:11",
                            "type": ""
                          },
                          {
                            "name": "len",
                            "nodeType": "YulTypedName",
                            "src": "3820:3:11",
                            "type": ""
                          },
                          {
                            "name": "startIndex",
                            "nodeType": "YulTypedName",
                            "src": "3825:10:11",
                            "type": ""
                          }
                        ],
                        "src": "3760:545:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4395:81:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4405:65:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "4420:4:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4438:1:11",
                                                    "type": "",
                                                    "value": "3"
                                                  },
                                                  {
                                                    "name": "len",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4441:3:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4434:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4434:11:11"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4451:1:11",
                                                    "type": "",
                                                    "value": "0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "not",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4447:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4447:6:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shr",
                                              "nodeType": "YulIdentifier",
                                              "src": "4430:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4430:24:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "4426:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4426:29:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4416:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4416:40:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4462:1:11",
                                        "type": "",
                                        "value": "1"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "4465:3:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "4458:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4458:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4413:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4413:57:11"
                              },
                              "variableNames": [
                                {
                                  "name": "used",
                                  "nodeType": "YulIdentifier",
                                  "src": "4405:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "extract_used_part_and_set_length_of_short_byte_array",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "4372:4:11",
                            "type": ""
                          },
                          {
                            "name": "len",
                            "nodeType": "YulTypedName",
                            "src": "4378:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "used",
                            "nodeType": "YulTypedName",
                            "src": "4386:4:11",
                            "type": ""
                          }
                        ],
                        "src": "4310:166:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4577:1256:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4587:24:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "4607:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4601:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4601:10:11"
                              },
                              "variables": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulTypedName",
                                  "src": "4591:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4654:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "4656:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4656:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4656:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "4626:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4642:2:11",
                                            "type": "",
                                            "value": "64"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4646:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "4638:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4638:10:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4650:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4634:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4634:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4623:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4623:30:11"
                              },
                              "nodeType": "YulIf",
                              "src": "4620:56:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "slot",
                                    "nodeType": "YulIdentifier",
                                    "src": "4729:4:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "slot",
                                            "nodeType": "YulIdentifier",
                                            "src": "4767:4:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "4761:5:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4761:11:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "extract_byte_array_length",
                                      "nodeType": "YulIdentifier",
                                      "src": "4735:25:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4735:38:11"
                                  },
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "4775:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "clean_up_bytearray_end_slots_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "4685:43:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4685:97:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4685:97:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4791:18:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4808:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "srcOffset",
                                  "nodeType": "YulTypedName",
                                  "src": "4795:9:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4818:23:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4837:4:11",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "srcOffset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4822:11:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4850:24:11",
                              "value": {
                                "name": "srcOffset_1",
                                "nodeType": "YulIdentifier",
                                "src": "4863:11:11"
                              },
                              "variableNames": [
                                {
                                  "name": "srcOffset",
                                  "nodeType": "YulIdentifier",
                                  "src": "4850:9:11"
                                }
                              ]
                            },
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "4920:656:11",
                                    "statements": [
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "4934:35:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "newLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "4953:6:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4965:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "not",
                                                "nodeType": "YulIdentifier",
                                                "src": "4961:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4961:7:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "4949:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4949:20:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "loopEnd",
                                            "nodeType": "YulTypedName",
                                            "src": "4938:7:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "4982:49:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "5026:4:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "array_dataslot_string_storage",
                                            "nodeType": "YulIdentifier",
                                            "src": "4996:29:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4996:35:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "dstPtr",
                                            "nodeType": "YulTypedName",
                                            "src": "4986:6:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "5044:10:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5053:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "i",
                                            "nodeType": "YulTypedName",
                                            "src": "5048:1:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "5131:172:11",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5156:6:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "src",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "5174:3:11"
                                                          },
                                                          {
                                                            "name": "srcOffset",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "5179:9:11"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5170:3:11"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5170:19:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5164:5:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5164:26:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5149:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5149:42:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "5149:42:11"
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "5208:24:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5222:6:11"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5230:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5218:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5218:14:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "dstPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5208:6:11"
                                                }
                                              ]
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "5249:40:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "srcOffset",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5266:9:11"
                                                  },
                                                  {
                                                    "name": "srcOffset_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5277:11:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5262:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5262:27:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "srcOffset",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5249:9:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "5078:1:11"
                                            },
                                            {
                                              "name": "loopEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "5081:7:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "5075:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5075:14:11"
                                        },
                                        "nodeType": "YulForLoop",
                                        "post": {
                                          "nodeType": "YulBlock",
                                          "src": "5090:28:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "5092:24:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "i",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5101:1:11"
                                                  },
                                                  {
                                                    "name": "srcOffset_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5104:11:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5097:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5097:19:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5092:1:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "pre": {
                                          "nodeType": "YulBlock",
                                          "src": "5071:3:11",
                                          "statements": []
                                        },
                                        "src": "5067:236:11"
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "5351:166:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulVariableDeclaration",
                                              "src": "5369:43:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5396:3:11"
                                                      },
                                                      {
                                                        "name": "srcOffset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5401:9:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5392:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5392:19:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5386:5:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5386:26:11"
                                              },
                                              "variables": [
                                                {
                                                  "name": "lastValue",
                                                  "nodeType": "YulTypedName",
                                                  "src": "5373:9:11",
                                                  "type": ""
                                                }
                                              ]
                                            },
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5436:6:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "lastValue",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5448:9:11"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "arguments": [
                                                                      {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "5475:1:11",
                                                                        "type": "",
                                                                        "value": "3"
                                                                      },
                                                                      {
                                                                        "name": "newLen",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "5478:6:11"
                                                                      }
                                                                    ],
                                                                    "functionName": {
                                                                      "name": "shl",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "5471:3:11"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "5471:14:11"
                                                                  },
                                                                  {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "5487:3:11",
                                                                    "type": "",
                                                                    "value": "248"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "and",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "5467:3:11"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "5467:24:11"
                                                              },
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "5497:1:11",
                                                                    "type": "",
                                                                    "value": "0"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "not",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "5493:3:11"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "5493:6:11"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "shr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "5463:3:11"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "5463:37:11"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "not",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5459:3:11"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5459:42:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5444:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5444:58:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5429:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5429:74:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "5429:74:11"
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "loopEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "5322:7:11"
                                            },
                                            {
                                              "name": "newLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "5331:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "5319:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5319:19:11"
                                        },
                                        "nodeType": "YulIf",
                                        "src": "5316:201:11"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "5537:4:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "5551:1:11",
                                                      "type": "",
                                                      "value": "1"
                                                    },
                                                    {
                                                      "name": "newLen",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5554:6:11"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5547:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "5547:14:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "5563:1:11",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "5543:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "5543:22:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "5530:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5530:36:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "5530:36:11"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "4913:663:11",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4918:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "5593:234:11",
                                    "statements": [
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "5607:14:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5620:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulTypedName",
                                            "src": "5611:5:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "5656:67:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "5674:35:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5693:3:11"
                                                      },
                                                      {
                                                        "name": "srcOffset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5698:9:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5689:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5689:19:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5683:5:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5683:26:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5674:5:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "5637:6:11"
                                        },
                                        "nodeType": "YulIf",
                                        "src": "5634:89:11"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "5743:4:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5802:5:11"
                                                },
                                                {
                                                  "name": "newLen",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5809:6:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "extract_used_part_and_set_length_of_short_byte_array",
                                                "nodeType": "YulIdentifier",
                                                "src": "5749:52:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "5749:67:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "5736:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5736:81:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "5736:81:11"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "5585:242:11",
                                  "value": "default"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "4893:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4901:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4890:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4890:14:11"
                              },
                              "nodeType": "YulSwitch",
                              "src": "4883:944:11"
                            }
                          ]
                        },
                        "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "slot",
                            "nodeType": "YulTypedName",
                            "src": "4562:4:11",
                            "type": ""
                          },
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "4568:3:11",
                            "type": ""
                          }
                        ],
                        "src": "4481:1352:11"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_912() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xc0)\n        if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        if gt(_1, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        let _2 := 0x20\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), _2))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), _2), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _2) }\n        {\n            mstore(add(add(array_1, i), _2), mload(add(add(offset, i), _2)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(array_1, _1), _2), 0)\n        }\n        array := array_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_struct$_ContractURI_$2877_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        let offset := mload(add(headStart, 64))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0xc0) { revert(0, 0) }\n        let value := allocate_memory_912()\n        let offset_1 := mload(_2)\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(value, abi_decode_string_fromMemory(add(_2, offset_1), dataEnd))\n        let offset_2 := mload(add(_2, 32))\n        if gt(offset_2, _1) { revert(0, 0) }\n        mstore(add(value, 32), abi_decode_string_fromMemory(add(_2, offset_2), dataEnd))\n        let offset_3 := mload(add(_2, 64))\n        if gt(offset_3, _1) { revert(0, 0) }\n        mstore(add(value, 64), abi_decode_string_fromMemory(add(_2, offset_3), dataEnd))\n        let offset_4 := mload(add(_2, 96))\n        if gt(offset_4, _1) { revert(0, 0) }\n        mstore(add(value, 96), abi_decode_string_fromMemory(add(_2, offset_4), dataEnd))\n        let offset_5 := mload(add(_2, 128))\n        if gt(offset_5, _1) { revert(0, 0) }\n        mstore(add(value, 128), abi_decode_string_fromMemory(add(_2, offset_5), dataEnd))\n        let offset_6 := mload(add(_2, 160))\n        if gt(offset_6, _1) { revert(0, 0) }\n        mstore(add(value, 160), abi_decode_string_fromMemory(add(_2, offset_6), dataEnd))\n        value2 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n}",
                  "id": 11,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b506040516200222238038062002222833981016040819052620000349162000270565b600080546001600160a01b038086166001600160a01b03199283161790925560018054928516929091169190911790558051839083908390819060029081906200007f90826200045e565b50602082015160018201906200009690826200045e565b5060408201516002820190620000ad90826200045e565b5060608201516003820190620000c490826200045e565b5060808201516004820190620000db90826200045e565b5060a08201516005820190620000f290826200045e565b506200010291503390506200010e565b5050505050506200052a565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146200016257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715620001a257620001a262000167565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620001d357620001d362000167565b604052919050565b600082601f830112620001ed57600080fd5b81516001600160401b0381111562000209576200020962000167565b60206200021f601f8301601f19168201620001a8565b82815285828487010111156200023457600080fd5b60005b838110156200025457858101830151828201840152820162000237565b83811115620002665760008385840101525b5095945050505050565b6000806000606084860312156200028657600080fd5b62000291846200014a565b9250620002a1602085016200014a565b60408501519092506001600160401b0380821115620002bf57600080fd5b9085019060c08288031215620002d457600080fd5b620002de6200017d565b825182811115620002ee57600080fd5b620002fc89828601620001db565b8252506020830151828111156200031257600080fd5b6200032089828601620001db565b6020830152506040830151828111156200033957600080fd5b6200034789828601620001db565b6040830152506060830151828111156200036057600080fd5b6200036e89828601620001db565b6060830152506080830151828111156200038757600080fd5b6200039589828601620001db565b60808301525060a083015182811115620003ae57600080fd5b620003bc89828601620001db565b60a0830152508093505050509250925092565b600181811c90821680620003e457607f821691505b6020821081036200040557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200045957600081815260208120601f850160051c81016020861015620004345750805b601f850160051c820191505b81811015620004555782815560010162000440565b5050505b505050565b81516001600160401b038111156200047a576200047a62000167565b62000492816200048b8454620003cf565b846200040b565b602080601f831160018114620004ca5760008415620004b15750858301515b600019600386901b1c1916600185901b17855562000455565b600085815260208120601f198616915b82811015620004fb57888601518255948401946001909101908401620004da565b50858210156200051a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611ce8806200053a6000396000f3fe6080604052600436106101665760003560e01c806357e30f44116100d1578063ae70ed131161008a578063f04e283e11610064578063f04e283e14610418578063f06796161461042b578063f2fde38b1461044b578063fee81cf41461045e57600080fd5b8063ae70ed13146103b8578063d12bcb12146103d8578063d7533f02146103fa57600080fd5b806357e30f4414610317578063715018a614610337578063725fa09c1461033f5780637359e41f146103545780638da5cb5b14610381578063a4cd86961461039a57600080fd5b80632de94807116101235780632de9480714610247578063316df61e146102785780633ee6fa92146102a55780634a4ee7b1146102c5578063514e62fc146102d857806354d1f13d1461030f57600080fd5b806313a661ed1461016b578063183a4f6e1461019e5780631c10893f146101b35780631cd64df4146101c6578063256929621461020d57806325c28b4a14610215575b600080fd5b34801561017757600080fd5b5061018b61018636600461127a565b61048f565b6040519081526020015b60405180910390f35b6101b16101ac366004611333565b6104c2565b005b6101b16101c1366004611368565b6104cf565b3480156101d257600080fd5b506101fd6101e1366004611368565b60609190911b638b78c6d8176000908152602090205481161490565b6040519015158152602001610195565b6101b16104f8565b34801561022157600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610195565b34801561025357600080fd5b5061018b610262366004611392565b60601b638b78c6d8176000908152602090205490565b34801561028457600080fd5b50610298610293366004611432565b610549565b60405161019591906114cb565b3480156102b157600080fd5b506101b16102c0366004611392565b6105c5565b6101b16102d3366004611368565b610635565b3480156102e457600080fd5b506101fd6102f3366004611368565b60609190911b638b78c6d8176000908152602090205416151590565b6101b161065a565b34801561032357600080fd5b506101b16103323660046114de565b610697565b6101b1610761565b34801561034b57600080fd5b506102986107af565b34801561036057600080fd5b5061037461036f366004611333565b61080f565b60405161019591906115ff565b34801561038d57600080fd5b50638b78c6d8195461022f565b3480156103a657600080fd5b506000546001600160a01b031661022f565b3480156103c457600080fd5b506101b16103d3366004611392565b610857565b3480156103e457600080fd5b506103ed6108c0565b6040516101959190611646565b34801561040657600080fd5b506040516202a3008152602001610195565b6101b1610426366004611392565b610c77565b34801561043757600080fd5b506102986104463660046116fe565b610cf9565b6101b1610459366004611392565b610e42565b34801561046a57600080fd5b5061018b610479366004611392565b60601b63389a75e1176000908152602090205490565b600060208201825160051b81015b8082146104bb57600160ff8351161b8317925060208201915061049d565b5050919050565b6104cc3382610ea9565b50565b638b78c6d8195433146104ea576382b429006000526004601cfd5b6104f48282610efa565b5050565b60006202a30067ffffffffffffffff164201905063389a75e13360601b1760005280602060002055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6000546040516318b6fb0f60e11b81526060916001600160a01b03169063316df61e9061057a9085906004016114cb565b600060405180830381865afa158015610597573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105bf919081019061176b565b92915050565b638b78c6d8195433146105e0576382b429006000526004601cfd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f10c0817f42b2182992d55b707430b153f12e59d7e54a975bfec790497dd7f63f906020015b60405180910390a150565b638b78c6d819543314610650576382b429006000526004601cfd5b6104f48282610ea9565b63389a75e13360601b176000526000602060002055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b638b78c6d8195433146106b2576382b429006000526004601cfd5b8051819060029081906106c59082611862565b50602082015160018201906106da9082611862565b50604082015160028201906106ef9082611862565b50606082015160038201906107049082611862565b50608082015160048201906107199082611862565b5060a0820151600582019061072e9082611862565b509050507f03a10335d532669eac03b3b7e4ce44aff7f8cb14b7aa397c653fdcb40ae06bec8160405161062a9190611646565b638b78c6d81954331461077c576382b429006000526004601cfd5b6000337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36000638b78c6d81955565b6040516060906107eb906107d790600290600390600490600590600690600790602001611995565b604051602081830303815290604052610f46565b6040516020016107fb9190611b1b565b604051602081830303815290604052905090565b606060206040510160005b8082526001841660051b820191508360011c9350831561083c5760010161081a565b5060405191508060405260208201810360051c825250919050565b638b78c6d819543314610872576382b429006000526004601cfd5b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c2715cb5e4b39dd4af38ac12bb292a030fb6a063dbd5467ed49da665bcaa9739060200161062a565b6108f96040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b60026040518060c0016040529081600082018054610916906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610942906117d9565b801561098f5780601f106109645761010080835404028352916020019161098f565b820191906000526020600020905b81548152906001019060200180831161097257829003601f168201915b505050505081526020016001820180546109a8906117d9565b80601f01602080910402602001604051908101604052809291908181526020018280546109d4906117d9565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b50505050508152602001600282018054610a3a906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a66906117d9565b8015610ab35780601f10610a8857610100808354040283529160200191610ab3565b820191906000526020600020905b815481529060010190602001808311610a9657829003601f168201915b50505050508152602001600382018054610acc906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610af8906117d9565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b50505050508152602001600482018054610b5e906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a906117d9565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b50505050508152602001600582018054610bf0906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1c906117d9565b8015610c695780601f10610c3e57610100808354040283529160200191610c69565b820191906000526020600020905b815481529060010190602001808311610c4c57829003601f168201915b505050505081525050905090565b638b78c6d819543314610c92576382b429006000526004601cfd5b8060601b60601c905063389a75e18160601b1760005260206000208054421115610cc457636f5e88186000526004601cfd5b600081555080337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b600080546040516318b6fb0f60e11b8152606092916001600160a01b03169063316df61e90610d2c9087906004016114cb565b600060405180830381865afa158015610d49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d71919081019061176b565b60015460405163f6559a6b60e01b81529192506000916001600160a01b039091169063f6559a6b90610da79087906004016114cb565b600060405180830381865afa158015610dc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dec919081019061176b565b9050610e18610dfa87610f54565b610e0388610f85565b84846040516020016107d79493929190611b60565b604051602001610e289190611b1b565b604051602081830303815290604052925050509392505050565b638b78c6d819543314610e5d576382b429006000526004601cfd5b6001600160a01b031680610e7957637448fbae6000526004601cfd5b80337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b638b78c6d88260601b176000526020600020805482811681189050808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b638b78c6d88260601b17600052602060002081815417808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b60606105bf82600080610fa0565b6060610f5f8261109f565b604051602001610f6f9190611c51565b6040516020818303038152906040529050919050565b6060610f908261109f565b604051602001610f6f9190611c7e565b606083518015611097576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526102308515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f03603f52602083018181015b6003880197508751603f8160121c16518353603f81600c1c16516001840153603f8160061c16516002840153603f811651600384015350600482019150808210611010576003840686801561107057600182148215150185038752611088565b603d821515850353603d6001831460011b8503538487525b5050601f01601f191660405250505b509392505050565b606060006110ac83611132565b600101905060008167ffffffffffffffff8111156110cc576110cc61120a565b6040519080825280601f01601f1916602001820160405280156110f6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461110057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106111715772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061119d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106111bb57662386f26fc10000830492506010015b6305f5e10083106111d3576305f5e100830492506008015b61271083106111e757612710830492506004015b606483106111f9576064830492506002015b600a83106105bf5760010192915050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156112435761124361120a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156112725761127261120a565b604052919050565b6000602080838503121561128d57600080fd5b823567ffffffffffffffff808211156112a557600080fd5b818501915085601f8301126112b957600080fd5b8135818111156112cb576112cb61120a565b8060051b91506112dc848301611249565b81815291830184019184810190888411156112f657600080fd5b938501935b83851015611327578435925060ff831683146113175760008081fd5b82825293850193908501906112fb565b98975050505050505050565b60006020828403121561134557600080fd5b5035919050565b80356001600160a01b038116811461136357600080fd5b919050565b6000806040838503121561137b57600080fd5b6113848361134c565b946020939093013593505050565b6000602082840312156113a457600080fd5b6113ad8261134c565b9392505050565b600067ffffffffffffffff8211156113ce576113ce61120a565b50601f01601f191660200190565b600082601f8301126113ed57600080fd5b81356114006113fb826113b4565b611249565b81815284602083860101111561141557600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561144457600080fd5b813567ffffffffffffffff81111561145b57600080fd5b611467848285016113dc565b949350505050565b60005b8381101561148a578181015183820152602001611472565b83811115611499576000848401525b50505050565b600081518084526114b781602086016020860161146f565b601f01601f19169290920160200192915050565b6020815260006113ad602083018461149f565b6000602082840312156114f057600080fd5b813567ffffffffffffffff8082111561150857600080fd5b9083019060c0828603121561151c57600080fd5b611524611220565b82358281111561153357600080fd5b61153f878286016113dc565b82525060208301358281111561155457600080fd5b611560878286016113dc565b60208301525060408301358281111561157857600080fd5b611584878286016113dc565b60408301525060608301358281111561159c57600080fd5b6115a8878286016113dc565b6060830152506080830135828111156115c057600080fd5b6115cc878286016113dc565b60808301525060a0830135828111156115e457600080fd5b6115f0878286016113dc565b60a08301525095945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561163a57835160ff168352928401929184019160010161161b565b50909695505050505050565b602081526000825160c0602084015261166260e084018261149f565b90506020840151601f1980858403016040860152611680838361149f565b9250604086015191508085840301606086015261169d838361149f565b925060608601519150808584030160808601526116ba838361149f565b925060808601519150808584030160a08601526116d7838361149f565b925060a08601519150808584030160c0860152506116f5828261149f565b95945050505050565b60008060006060848603121561171357600080fd5b83359250602084013567ffffffffffffffff8082111561173257600080fd5b61173e878388016113dc565b9350604086013591508082111561175457600080fd5b50611761868287016113dc565b9150509250925092565b60006020828403121561177d57600080fd5b815167ffffffffffffffff81111561179457600080fd5b8201601f810184136117a557600080fd5b80516117b36113fb826113b4565b8181528560208385010111156117c857600080fd5b6116f582602083016020860161146f565b600181811c908216806117ed57607f821691505b60208210810361180d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561185d57600081815260208120601f850160051c8101602086101561183a5750805b601f850160051c820191505b8181101561185957828155600101611846565b5050505b505050565b815167ffffffffffffffff81111561187c5761187c61120a565b6118908161188a84546117d9565b84611813565b602080601f8311600181146118c557600084156118ad5750858301515b600019600386901b1c1916600185901b178555611859565b600085815260208120601f198616915b828110156118f4578886015182559484019460019091019084016118d5565b50858210156119125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000815461192f816117d9565b60018281168015611947576001811461195c5761198b565b60ff198416875282151583028701945061198b565b8560005260208060002060005b858110156119825781548a820152908401908201611969565b50505082870194505b5050505092915050565b673d913730b6b2911d60c11b8152601160f91b600882015260006119bc6009830189611922565b61088b60f21b815260026119e28183016d113232b9b1b934b83a34b7b7111d60911b9052565b601160f91b60108301526119f9601183018a611922565b61088b60f21b81529150671134b6b0b3b2911d60c11b82820152601160f91b600a830152611a2a600b830189611922565b61088b60f21b815291506e1132bc3a32b93730b62634b735911d60891b82820152601160f91b6011830152611a626012830188611922565b61088b60f21b815291507f2273656c6c65724665654261736973506f696e7473223a00000000000000000082820152601160f91b6019830152611aa8601a830187611922565b61088b60f21b815291506e113332b2a932b1b4b834b2b73a111d60891b82820152601160f91b6011830152611ae06012830186611922565b601160f91b8152607d60f81b6001820152019998505050505050505050565b60008151611b1181856020860161146f565b9290920192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611b5381601d85016020870161146f565b91909101601d0192915050565b673d913730b6b2911d60c11b8152601160f91b60088201528451600090611b8e816009850160208a0161146f565b61088b60f21b6009918401918201526d113232b9b1b934b83a34b7b7111d60911b600b820152611bc460198201601160f91b9052565b611bd1601a820187611aff565b61088b60f21b81529050671134b6b0b3b2911d60c11b6002820152601160f91b600a820152611c03600b820186611aff565b61088b60f21b815290506e2261747472696275746573223a205b60881b6002820152611c326011820185611aff565b605d60f81b8152607d60f81b6001820152600201979650505050505050565b644e4654202360d81b815260008251611c7181600585016020870161146f565b9190910160050192915050565b6b4e4654204d656d626572202360a01b815260008251611ca581600c85016020870161146f565b91909101600c019291505056fea2646970667358221220ec76de9b5dcc4faa18cbaab2d7f0cf4c0e350702b56482f4af0506aded925ad964736f6c634300080f0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2222 CODESIZE SUB DUP1 PUSH3 0x2222 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x270 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD DUP4 SWAP1 DUP4 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 SWAP1 PUSH3 0x7F SWAP1 DUP3 PUSH3 0x45E JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SWAP1 PUSH3 0x96 SWAP1 DUP3 PUSH3 0x45E JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH3 0xAD SWAP1 DUP3 PUSH3 0x45E JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD SWAP1 PUSH3 0xC4 SWAP1 DUP3 PUSH3 0x45E JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD SWAP1 PUSH3 0xDB SWAP1 DUP3 PUSH3 0x45E JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SWAP1 PUSH3 0xF2 SWAP1 DUP3 PUSH3 0x45E JUMP JUMPDEST POP PUSH3 0x102 SWAP2 POP CALLER SWAP1 POP PUSH3 0x10E JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x52A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8B78C6D8 NOT DUP2 SWAP1 SSTORE DUP1 PUSH1 0x0 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP2 DUP1 LOG3 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x162 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1A2 JUMPI PUSH3 0x1A2 PUSH3 0x167 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1D3 JUMPI PUSH3 0x1D3 PUSH3 0x167 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x209 JUMPI PUSH3 0x209 PUSH3 0x167 JUMP JUMPDEST PUSH1 0x20 PUSH3 0x21F PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH3 0x1A8 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP6 DUP3 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x254 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP3 DUP3 ADD DUP5 ADD MSTORE DUP3 ADD PUSH3 0x237 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x266 JUMPI PUSH1 0x0 DUP4 DUP6 DUP5 ADD ADD MSTORE JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x291 DUP5 PUSH3 0x14A JUMP JUMPDEST SWAP3 POP PUSH3 0x2A1 PUSH1 0x20 DUP6 ADD PUSH3 0x14A JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xC0 DUP3 DUP9 SUB SLT ISZERO PUSH3 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2DE PUSH3 0x17D JUMP JUMPDEST DUP3 MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x2EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2FC DUP10 DUP3 DUP7 ADD PUSH3 0x1DB JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x320 DUP10 DUP3 DUP7 ADD PUSH3 0x1DB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x347 DUP10 DUP3 DUP7 ADD PUSH3 0x1DB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x36E DUP10 DUP3 DUP7 ADD PUSH3 0x1DB JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x387 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x395 DUP10 DUP3 DUP7 ADD PUSH3 0x1DB JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x3AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3BC DUP10 DUP3 DUP7 ADD PUSH3 0x1DB JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x3E4 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x405 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x459 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x434 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x455 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x440 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x47A JUMPI PUSH3 0x47A PUSH3 0x167 JUMP JUMPDEST PUSH3 0x492 DUP2 PUSH3 0x48B DUP5 SLOAD PUSH3 0x3CF JUMP JUMPDEST DUP5 PUSH3 0x40B JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x4CA JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x4B1 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x455 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x4FB JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x4DA JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x51A JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x1CE8 DUP1 PUSH3 0x53A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x166 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57E30F44 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xAE70ED13 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xF04E283E GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF04E283E EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0xF0679616 EQ PUSH2 0x42B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0xFEE81CF4 EQ PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAE70ED13 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD12BCB12 EQ PUSH2 0x3D8 JUMPI DUP1 PUSH4 0xD7533F02 EQ PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x57E30F44 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0x725FA09C EQ PUSH2 0x33F JUMPI DUP1 PUSH4 0x7359E41F EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0xA4CD8696 EQ PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2DE94807 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x2DE94807 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0x316DF61E EQ PUSH2 0x278 JUMPI DUP1 PUSH4 0x3EE6FA92 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x4A4EE7B1 EQ PUSH2 0x2C5 JUMPI DUP1 PUSH4 0x514E62FC EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x54D1F13D EQ PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13A661ED EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x183A4F6E EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x1C10893F EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x1CD64DF4 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x25692962 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x25C28B4A EQ PUSH2 0x215 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x186 CALLDATASIZE PUSH1 0x4 PUSH2 0x127A JUMP JUMPDEST PUSH2 0x48F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x1333 JUMP JUMPDEST PUSH2 0x4C2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B1 PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH2 0x4CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x195 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x4F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x195 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x253 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x262 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x298 PUSH2 0x293 CALLDATASIZE PUSH1 0x4 PUSH2 0x1432 JUMP JUMPDEST PUSH2 0x549 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x14CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH2 0x2C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0x5C5 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x2D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH2 0x635 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x65A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH2 0x332 CALLDATASIZE PUSH1 0x4 PUSH2 0x14DE JUMP JUMPDEST PUSH2 0x697 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x761 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x298 PUSH2 0x7AF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x374 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x1333 JUMP JUMPDEST PUSH2 0x80F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x15FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH4 0x8B78C6D8 NOT SLOAD PUSH2 0x22F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH2 0x3D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0x857 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3ED PUSH2 0x8C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x1646 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2A300 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x195 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0xC77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x298 PUSH2 0x446 CALLDATASIZE PUSH1 0x4 PUSH2 0x16FE JUMP JUMPDEST PUSH2 0xCF9 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x459 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0xE42 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x389A75E1 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP3 MLOAD PUSH1 0x5 SHL DUP2 ADD JUMPDEST DUP1 DUP3 EQ PUSH2 0x4BB JUMPI PUSH1 0x1 PUSH1 0xFF DUP4 MLOAD AND SHL DUP4 OR SWAP3 POP PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x49D JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4CC CALLER DUP3 PUSH2 0xEA9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x4EA JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x4F4 DUP3 DUP3 PUSH2 0xEFA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2A300 PUSH8 0xFFFFFFFFFFFFFFFF AND TIMESTAMP ADD SWAP1 POP PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE DUP1 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xDBF36A107DA19E49527A7176A1BABF963B4B0FF8CDE35EE35D6CD8F1F9AC7E1D PUSH1 0x0 DUP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18B6FB0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x316DF61E SWAP1 PUSH2 0x57A SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x14CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x597 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x5BF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x5E0 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x10C0817F42B2182992D55B707430B153F12E59D7E54A975BFEC790497DD7F63F SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x650 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x4F4 DUP3 DUP3 PUSH2 0xEA9 JUMP JUMPDEST PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xFA7B8EAB7DA67F412CC9575ED43464468F9BFBAE89D1675917346CA6D8FE3C92 PUSH1 0x0 DUP1 LOG2 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x6B2 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 MLOAD DUP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 SWAP1 PUSH2 0x6C5 SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SWAP1 PUSH2 0x6DA SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH2 0x6EF SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD SWAP1 PUSH2 0x704 SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x719 SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SWAP1 PUSH2 0x72E SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP SWAP1 POP POP PUSH32 0x3A10335D532669EAC03B3B7E4CE44AFF7F8CB14B7AA397C653FDCB40AE06BEC DUP2 PUSH1 0x40 MLOAD PUSH2 0x62A SWAP2 SWAP1 PUSH2 0x1646 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x77C JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH1 0x0 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x7EB SWAP1 PUSH2 0x7D7 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x6 SWAP1 PUSH1 0x7 SWAP1 PUSH1 0x20 ADD PUSH2 0x1995 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0xF46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7FB SWAP2 SWAP1 PUSH2 0x1B1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x20 PUSH1 0x40 MLOAD ADD PUSH1 0x0 JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1 DUP5 AND PUSH1 0x5 SHL DUP3 ADD SWAP2 POP DUP4 PUSH1 0x1 SHR SWAP4 POP DUP4 ISZERO PUSH2 0x83C JUMPI PUSH1 0x1 ADD PUSH2 0x81A JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 POP DUP1 PUSH1 0x40 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SUB PUSH1 0x5 SHR DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x872 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x3C2715CB5E4B39DD4AF38AC12BB292A030FB6A063DBD5467ED49DA665BCAA973 SWAP1 PUSH1 0x20 ADD PUSH2 0x62A JUMP JUMPDEST PUSH2 0x8F9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD DUP1 SLOAD PUSH2 0x916 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x942 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x98F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x964 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x98F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x972 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH2 0x9A8 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x9D4 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA21 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9F6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA21 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA04 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH2 0xA3A SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xA66 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xAB3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA88 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xAB3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA96 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH2 0xACC SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xAF8 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB45 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB1A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB45 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB28 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xB5E SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB8A SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xBD7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBAC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBD7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBBA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH2 0xBF0 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xC1C SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC69 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC3E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC69 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC4C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xC92 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 PUSH1 0x60 SHL PUSH1 0x60 SHR SWAP1 POP PUSH4 0x389A75E1 DUP2 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD TIMESTAMP GT ISZERO PUSH2 0xCC4 JUMPI PUSH4 0x6F5E8818 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 DUP2 SSTORE POP DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18B6FB0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x60 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x316DF61E SWAP1 PUSH2 0xD2C SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x14CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xD71 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xF6559A6B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xF6559A6B SWAP1 PUSH2 0xDA7 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x14CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xDEC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST SWAP1 POP PUSH2 0xE18 PUSH2 0xDFA DUP8 PUSH2 0xF54 JUMP JUMPDEST PUSH2 0xE03 DUP9 PUSH2 0xF85 JUMP JUMPDEST DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7D7 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE28 SWAP2 SWAP1 PUSH2 0x1B1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xE5D JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xE79 JUMPI PUSH4 0x7448FBAE PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD DUP3 DUP2 AND DUP2 XOR SWAP1 POP DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD OR DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5BF DUP3 PUSH1 0x0 DUP1 PUSH2 0xFA0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF5F DUP3 PUSH2 0x109F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF6F SWAP2 SWAP1 PUSH2 0x1C51 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF90 DUP3 PUSH2 0x109F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF6F SWAP2 SWAP1 PUSH2 0x1C7E JUMP JUMPDEST PUSH1 0x60 DUP4 MLOAD DUP1 ISZERO PUSH2 0x1097 JUMPI PUSH1 0x3 PUSH1 0x2 DUP3 ADD DIV PUSH1 0x2 SHL PUSH1 0x40 MLOAD SWAP3 POP PUSH32 0x4142434445464748494A4B4C4D4E4F505152535455565758595A616263646566 PUSH1 0x1F MSTORE PUSH2 0x230 DUP6 ISZERO MUL PUSH32 0x6768696A6B6C6D6E6F707172737475767778797A303132333435363738392D5F SUB PUSH1 0x3F MSTORE PUSH1 0x20 DUP4 ADD DUP2 DUP2 ADD JUMPDEST PUSH1 0x3 DUP9 ADD SWAP8 POP DUP8 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND MLOAD DUP4 MSTORE8 PUSH1 0x3F DUP2 PUSH1 0xC SHR AND MLOAD PUSH1 0x1 DUP5 ADD MSTORE8 PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND MLOAD PUSH1 0x2 DUP5 ADD MSTORE8 PUSH1 0x3F DUP2 AND MLOAD PUSH1 0x3 DUP5 ADD MSTORE8 POP PUSH1 0x4 DUP3 ADD SWAP2 POP DUP1 DUP3 LT PUSH2 0x1010 JUMPI PUSH1 0x3 DUP5 MOD DUP7 DUP1 ISZERO PUSH2 0x1070 JUMPI PUSH1 0x1 DUP3 EQ DUP3 ISZERO ISZERO ADD DUP6 SUB DUP8 MSTORE PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x3D DUP3 ISZERO ISZERO DUP6 SUB MSTORE8 PUSH1 0x3D PUSH1 0x1 DUP4 EQ PUSH1 0x1 SHL DUP6 SUB MSTORE8 DUP5 DUP8 MSTORE JUMPDEST POP POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x40 MSTORE POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x10AC DUP4 PUSH2 0x1132 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10CC JUMPI PUSH2 0x10CC PUSH2 0x120A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH1 0x0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0x1100 JUMPI POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0x1171 JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x119D JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x11BB JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x11D3 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x11E7 JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x11F9 JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x5BF JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1243 JUMPI PUSH2 0x1243 PUSH2 0x120A JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1272 JUMPI PUSH2 0x1272 PUSH2 0x120A JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x128D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x12A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x12B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x120A JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x12DC DUP5 DUP4 ADD PUSH2 0x1249 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x1327 JUMPI DUP5 CALLDATALOAD SWAP3 POP PUSH1 0xFF DUP4 AND DUP4 EQ PUSH2 0x1317 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x12FB JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x137B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1384 DUP4 PUSH2 0x134C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13AD DUP3 PUSH2 0x134C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x13CE JUMPI PUSH2 0x13CE PUSH2 0x120A JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x13ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1400 PUSH2 0x13FB DUP3 PUSH2 0x13B4 JUMP JUMPDEST PUSH2 0x1249 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1415 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x145B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1467 DUP5 DUP3 DUP6 ADD PUSH2 0x13DC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x148A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1472 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1499 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x14B7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x146F JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x13AD PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x149F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xC0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x151C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1524 PUSH2 0x1220 JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1533 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x153F DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1560 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1584 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x159C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15A8 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x15C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15CC DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x15E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15F0 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x163A JUMPI DUP4 MLOAD PUSH1 0xFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x161B JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH1 0xC0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1662 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x149F JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1F NOT DUP1 DUP6 DUP5 SUB ADD PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x1680 DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x169D DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x16BA DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x16D7 DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xC0 DUP7 ADD MSTORE POP PUSH2 0x16F5 DUP3 DUP3 PUSH2 0x149F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1713 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1732 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x173E DUP8 DUP4 DUP9 ADD PUSH2 0x13DC JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1761 DUP7 DUP3 DUP8 ADD PUSH2 0x13DC JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x177D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1794 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x17A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x17B3 PUSH2 0x13FB DUP3 PUSH2 0x13B4 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x17C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16F5 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x146F JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x17ED JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x180D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x185D JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x183A JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1859 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1846 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x187C JUMPI PUSH2 0x187C PUSH2 0x120A JUMP JUMPDEST PUSH2 0x1890 DUP2 PUSH2 0x188A DUP5 SLOAD PUSH2 0x17D9 JUMP JUMPDEST DUP5 PUSH2 0x1813 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x18C5 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x18AD JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x1859 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x18F4 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x18D5 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x1912 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH2 0x192F DUP2 PUSH2 0x17D9 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP2 AND DUP1 ISZERO PUSH2 0x1947 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x195C JUMPI PUSH2 0x198B JUMP JUMPDEST PUSH1 0xFF NOT DUP5 AND DUP8 MSTORE DUP3 ISZERO ISZERO DUP4 MUL DUP8 ADD SWAP5 POP PUSH2 0x198B JUMP JUMPDEST DUP6 PUSH1 0x0 MSTORE PUSH1 0x20 DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1982 JUMPI DUP2 SLOAD DUP11 DUP3 ADD MSTORE SWAP1 DUP5 ADD SWAP1 DUP3 ADD PUSH2 0x1969 JUMP JUMPDEST POP POP POP DUP3 DUP8 ADD SWAP5 POP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH8 0x3D913730B6B2911D PUSH1 0xC1 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x8 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x19BC PUSH1 0x9 DUP4 ADD DUP10 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE PUSH1 0x2 PUSH2 0x19E2 DUP2 DUP4 ADD PUSH14 0x113232B9B1B934B83A34B7B7111D PUSH1 0x91 SHL SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x10 DUP4 ADD MSTORE PUSH2 0x19F9 PUSH1 0x11 DUP4 ADD DUP11 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH8 0x1134B6B0B3B2911D PUSH1 0xC1 SHL DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0xA DUP4 ADD MSTORE PUSH2 0x1A2A PUSH1 0xB DUP4 ADD DUP10 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH15 0x1132BC3A32B93730B62634B735911D PUSH1 0x89 SHL DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x11 DUP4 ADD MSTORE PUSH2 0x1A62 PUSH1 0x12 DUP4 ADD DUP9 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH32 0x2273656C6C65724665654261736973506F696E7473223A000000000000000000 DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x19 DUP4 ADD MSTORE PUSH2 0x1AA8 PUSH1 0x1A DUP4 ADD DUP8 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH15 0x113332B2A932B1B4B834B2B73A111D PUSH1 0x89 SHL DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x11 DUP4 ADD MSTORE PUSH2 0x1AE0 PUSH1 0x12 DUP4 ADD DUP7 PUSH2 0x1922 JUMP JUMPDEST PUSH1 0x11 PUSH1 0xF9 SHL DUP2 MSTORE PUSH1 0x7D PUSH1 0xF8 SHL PUSH1 0x1 DUP3 ADD MSTORE ADD SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH2 0x1B11 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x146F JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x646174613A6170706C69636174696F6E2F6A736F6E3B6261736536342C000000 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1B53 DUP2 PUSH1 0x1D DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x146F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1D ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH8 0x3D913730B6B2911D PUSH1 0xC1 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x8 DUP3 ADD MSTORE DUP5 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1B8E DUP2 PUSH1 0x9 DUP6 ADD PUSH1 0x20 DUP11 ADD PUSH2 0x146F JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL PUSH1 0x9 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE PUSH14 0x113232B9B1B934B83A34B7B7111D PUSH1 0x91 SHL PUSH1 0xB DUP3 ADD MSTORE PUSH2 0x1BC4 PUSH1 0x19 DUP3 ADD PUSH1 0x11 PUSH1 0xF9 SHL SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1BD1 PUSH1 0x1A DUP3 ADD DUP8 PUSH2 0x1AFF JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP1 POP PUSH8 0x1134B6B0B3B2911D PUSH1 0xC1 SHL PUSH1 0x2 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0xA DUP3 ADD MSTORE PUSH2 0x1C03 PUSH1 0xB DUP3 ADD DUP7 PUSH2 0x1AFF JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP1 POP PUSH15 0x2261747472696275746573223A205B PUSH1 0x88 SHL PUSH1 0x2 DUP3 ADD MSTORE PUSH2 0x1C32 PUSH1 0x11 DUP3 ADD DUP6 PUSH2 0x1AFF JUMP JUMPDEST PUSH1 0x5D PUSH1 0xF8 SHL DUP2 MSTORE PUSH1 0x7D PUSH1 0xF8 SHL PUSH1 0x1 DUP3 ADD MSTORE PUSH1 0x2 ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH5 0x4E46542023 PUSH1 0xD8 SHL DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C71 DUP2 PUSH1 0x5 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x146F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x5 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH12 0x4E4654204D656D6265722023 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1CA5 DUP2 PUSH1 0xC DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x146F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0xC ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC PUSH23 0xDE9B5DCC4FAA18CBAAB2D7F0CF4C0E350702B56482F4AF SDIV MOD 0xAD 0xED SWAP3 GAS 0xD9 PUSH5 0x736F6C6343 STOP ADDMOD 0xF STOP CALLER ",
              "sourceMap": "184:543:10:-:0;;;232:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1022:17:5::1;:38:::0;;-1:-1:-1;;;;;1022:38:5;;::::1;-1:-1:-1::0;;;;;;1022:38:5;;::::1;;::::0;;;;1066:42;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1114:28;;352:11:10;;365:13;;380;;;;1114:12:5::1;::::0;;;:28:::1;::::0;:12;:28:::1;:::i;:::-;-1:-1:-1::0;1114:28:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;1114:28:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;1114:28:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;1114:28:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;1114:28:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;1148:28:5::1;::::0;-1:-1:-1;1165:10:5::1;::::0;-1:-1:-1;1148:16:5::1;:28::i;:::-;883:298:::0;;;232:165:10;;;184:543;;5240:405:2;-1:-1:-1;;;;;5386:26:2;-1:-1:-1;;5461:38:2;;;5386:26;5617:1;5577:38;5617:1;;5566:63;5240:405;:::o;14:177:11:-;93:13;;-1:-1:-1;;;;;135:31:11;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:252;399:2;393:9;441:4;429:17;;-1:-1:-1;;;;;461:34:11;;497:22;;;458:62;455:88;;;523:18;;:::i;:::-;559:2;552:22;328:252;:::o;585:275::-;656:2;650:9;721:2;702:13;;-1:-1:-1;;698:27:11;686:40;;-1:-1:-1;;;;;741:34:11;;777:22;;;738:62;735:88;;;803:18;;:::i;:::-;839:2;832:22;585:275;;-1:-1:-1;585:275:11:o;865:695::-;919:5;972:3;965:4;957:6;953:17;949:27;939:55;;990:1;987;980:12;939:55;1013:13;;-1:-1:-1;;;;;1038:26:11;;1035:52;;;1067:18;;:::i;:::-;1106:4;1134:53;1177:2;1158:13;;-1:-1:-1;;1154:27:11;1150:36;;1134:53;:::i;:::-;1212:2;1203:7;1196:19;1256:3;1251:2;1246;1238:6;1234:15;1230:24;1227:33;1224:53;;;1273:1;1270;1263:12;1224:53;1295:1;1305:134;1319:2;1316:1;1313:9;1305:134;;;1408:14;;;1404:23;;1398:30;1376:15;;;1372:24;;1365:64;1330:10;;1305:134;;;1457:2;1454:1;1451:9;1448:81;;;1517:1;1512:2;1507;1498:7;1494:16;1490:25;1483:36;1448:81;-1:-1:-1;1547:7:11;865:695;-1:-1:-1;;;;;865:695:11:o;1565:1679::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;1790:40;1820:9;1790:40;:::i;:::-;1780:50;;1849:49;1894:2;1883:9;1879:18;1849:49;:::i;:::-;1942:2;1927:18;;1921:25;1839:59;;-1:-1:-1;;;;;;1995:14:11;;;1992:34;;;2022:1;2019;2012:12;1992:34;2045:22;;;;2101:4;2083:16;;;2079:27;2076:47;;;2119:1;2116;2109:12;2076:47;2145:21;;:::i;:::-;2197:2;2191:9;2225:2;2215:8;2212:16;2209:36;;;2241:1;2238;2231:12;2209:36;2268:56;2316:7;2305:8;2301:2;2297:17;2268:56;:::i;:::-;2261:5;2254:71;;2364:2;2360;2356:11;2350:18;2393:2;2383:8;2380:16;2377:36;;;2409:1;2406;2399:12;2377:36;2445:56;2493:7;2482:8;2478:2;2474:17;2445:56;:::i;:::-;2440:2;2433:5;2429:14;2422:80;;2541:2;2537;2533:11;2527:18;2570:2;2560:8;2557:16;2554:36;;;2586:1;2583;2576:12;2554:36;2622:56;2670:7;2659:8;2655:2;2651:17;2622:56;:::i;:::-;2617:2;2610:5;2606:14;2599:80;;2718:2;2714;2710:11;2704:18;2747:2;2737:8;2734:16;2731:36;;;2763:1;2760;2753:12;2731:36;2799:56;2847:7;2836:8;2832:2;2828:17;2799:56;:::i;:::-;2794:2;2787:5;2783:14;2776:80;;2895:3;2891:2;2887:12;2881:19;2925:2;2915:8;2912:16;2909:36;;;2941:1;2938;2931:12;2909:36;2978:56;3026:7;3015:8;3011:2;3007:17;2978:56;:::i;:::-;2972:3;2965:5;2961:15;2954:81;;3074:3;3070:2;3066:12;3060:19;3104:2;3094:8;3091:16;3088:36;;;3120:1;3117;3110:12;3088:36;3157:56;3205:7;3194:8;3190:2;3186:17;3157:56;:::i;:::-;3151:3;3144:5;3140:15;3133:81;;3233:5;3223:15;;;;;1565:1679;;;;;:::o;3249:380::-;3328:1;3324:12;;;;3371;;;3392:61;;3446:4;3438:6;3434:17;3424:27;;3392:61;3499:2;3491:6;3488:14;3468:18;3465:38;3462:161;;3545:10;3540:3;3536:20;3533:1;3526:31;3580:4;3577:1;3570:15;3608:4;3605:1;3598:15;3462:161;;3249:380;;;:::o;3760:545::-;3862:2;3857:3;3854:11;3851:448;;;3898:1;3923:5;3919:2;3912:17;3968:4;3964:2;3954:19;4038:2;4026:10;4022:19;4019:1;4015:27;4009:4;4005:38;4074:4;4062:10;4059:20;4056:47;;;-1:-1:-1;4097:4:11;4056:47;4152:2;4147:3;4143:12;4140:1;4136:20;4130:4;4126:31;4116:41;;4207:82;4225:2;4218:5;4215:13;4207:82;;;4270:17;;;4251:1;4240:13;4207:82;;;4211:3;;;3851:448;3760:545;;;:::o;4481:1352::-;4601:10;;-1:-1:-1;;;;;4623:30:11;;4620:56;;;4656:18;;:::i;:::-;4685:97;4775:6;4735:38;4767:4;4761:11;4735:38;:::i;:::-;4729:4;4685:97;:::i;:::-;4837:4;;4901:2;4890:14;;4918:1;4913:663;;;;5620:1;5637:6;5634:89;;;-1:-1:-1;5689:19:11;;;5683:26;5634:89;-1:-1:-1;;4438:1:11;4434:11;;;4430:24;4426:29;4416:40;4462:1;4458:11;;;4413:57;5736:81;;4883:944;;4913:663;3707:1;3700:14;;;3744:4;3731:18;;-1:-1:-1;;4949:20:11;;;5067:236;5081:7;5078:1;5075:14;5067:236;;;5170:19;;;5164:26;5149:42;;5262:27;;;;5230:1;5218:14;;;;5097:19;;5067:236;;;5071:3;5331:6;5322:7;5319:19;5316:201;;;5392:19;;;5386:26;-1:-1:-1;;5475:1:11;5471:14;;;5487:3;5467:24;5463:37;5459:42;5444:58;5429:74;;5316:201;-1:-1:-1;;;;;5563:1:11;5547:14;;;5543:22;5530:36;;-1:-1:-1;4481:1352:11:o;:::-;184:543:10;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_grantRoles_1137": {
                  "entryPoint": 3834,
                  "id": 1137,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_parseDescription_3873": {
                  "entryPoint": 3973,
                  "id": 3873,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_parseName_3854": {
                  "entryPoint": 3924,
                  "id": 3854,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_removeRoles_1147": {
                  "entryPoint": 3753,
                  "id": 1147,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@cancelOwnershipHandover_1186": {
                  "entryPoint": 1626,
                  "id": 1186,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@completeOwnershipHandover_1196": {
                  "entryPoint": 3191,
                  "id": 1196,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@constructContractURI_3097": {
                  "entryPoint": 1967,
                  "id": 3097,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@constructTokenURI_3042": {
                  "entryPoint": 3321,
                  "id": 3042,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@encode_2655": {
                  "entryPoint": 4000,
                  "id": 2655,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@encode_2672": {
                  "entryPoint": 3910,
                  "id": 2672,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getContractDescription_2959": {
                  "entryPoint": 2240,
                  "id": 2959,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@getERC721KRender_2942": {
                  "entryPoint": null,
                  "id": 2942,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@getERC72KTraits_2950": {
                  "entryPoint": null,
                  "id": 2950,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@grantRoles_1212": {
                  "entryPoint": 1231,
                  "id": 1212,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@hasAllRoles_1294": {
                  "entryPoint": null,
                  "id": 1294,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@hasAnyRole_1282": {
                  "entryPoint": null,
                  "id": 1282,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@log10_876": {
                  "entryPoint": 4402,
                  "id": 876,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@ordinalsFromRoles_1326": {
                  "entryPoint": 2063,
                  "id": 1326,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@owner_1249": {
                  "entryPoint": null,
                  "id": 1249,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@ownershipHandoverExpiresAt_1259": {
                  "entryPoint": null,
                  "id": 1259,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@ownershipHandoverValidFor_1270": {
                  "entryPoint": null,
                  "id": 1270,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@render_2974": {
                  "entryPoint": 1353,
                  "id": 2974,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@renounceOwnership_1165": {
                  "entryPoint": 1889,
                  "id": 1165,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@renounceRoles_1241": {
                  "entryPoint": 1218,
                  "id": 1241,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@requestOwnershipHandover_1180": {
                  "entryPoint": 1272,
                  "id": 1180,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@revokeRoles_1228": {
                  "entryPoint": 1589,
                  "id": 1228,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@rolesFromOrdinals_1315": {
                  "entryPoint": 1167,
                  "id": 1315,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@rolesOf_1304": {
                  "entryPoint": null,
                  "id": 1304,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@setContractURI_3146": {
                  "entryPoint": 1687,
                  "id": 3146,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setSvgRender_3113": {
                  "entryPoint": 2135,
                  "id": 3113,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setTraitsFetch_3129": {
                  "entryPoint": 1477,
                  "id": 3129,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@toString_57": {
                  "entryPoint": 4255,
                  "id": 57,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@transferOwnership_1157": {
                  "entryPoint": 3650,
                  "id": 1157,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 4940,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_bytes": {
                  "entryPoint": 5084,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 5010,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 4968,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_array$_t_uint8_$dyn_memory_ptr": {
                  "entryPoint": 4730,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_bytes_memory_ptr": {
                  "entryPoint": 5170,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptr_fromMemory": {
                  "entryPoint": 5995,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_struct$_ContractURI_$2877_memory_ptr": {
                  "entryPoint": 5342,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 4915,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256t_bytes_memory_ptrt_bytes_memory_ptr": {
                  "entryPoint": 5886,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_encode_string": {
                  "entryPoint": 6911,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_string_memory_ptr": {
                  "entryPoint": 5279,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_string_storage": {
                  "entryPoint": 6434,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_stringliteral": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_0474": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_40bb": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_5a0f": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_6e9f": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_891c": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_8e2f": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_a9d6": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_b36b": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_d167": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_stringliteral_edb9": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_encode_tuple_packed_t_stringliteral_069451256e9c303da8ca9e1bc2b0169a5b7887e42aded86f386bd8602908e76a_t_string_memory_ptr__to_t_bytes12_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7294,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_a9d6c84473de3f3a866c16d436066b8d4df325a647d2d3a768ffba45df210f3c_t_string_memory_ptr_t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes14_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_string_memory_ptr_t_bytes1_t_bytes1__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7008,
                  "id": null,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_edb9dfb434f39030c7e6c0ebaca14c5292f46611913432e75654d81f7110ccf5_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_5a0f64621135531f27a699625627339d4f3757e3c959615dacead2ddd2286d1b_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_891c8a98c445fe915cd335eea8eb2435a302f46b695ab6cce63074b1689567fb_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes14_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes23_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_bytes1_t_string_memory_ptr_t_bytes1_t_bytes1__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 6549,
                  "id": null,
                  "parameterSlots": 7,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 6939,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_ced59f21625b6897a57b2eeb7821d625b97c7c05b34bbd66b713a22d6477d4c9_t_string_memory_ptr__to_t_bytes5_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7249,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_uint8_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 5631,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 5323,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_ContractURI_$2877_memory_ptr__to_t_struct$_ContractURI_$2877_memory_ptr__fromStack_reversed": {
                  "entryPoint": 5702,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 4681,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "allocate_memory_2311": {
                  "entryPoint": 4640,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "array_allocation_size_bytes": {
                  "entryPoint": 5044,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_dataslot_string_storage": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "clean_up_bytearray_end_slots_string_storage": {
                  "entryPoint": 6163,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": {
                  "entryPoint": 6242,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "copy_memory_to_memory": {
                  "entryPoint": 5231,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 6105,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "extract_used_part_and_set_length_of_short_byte_array": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "panic_error_0x12": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 4618,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:22063:11",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:11",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "46:95:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "63:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "70:3:11",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "75:10:11",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "66:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "66:20:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "56:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "56:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "56:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "103:1:11",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "106:4:11",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "96:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "96:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "96:15:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "127:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "130:4:11",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "120:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "120:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "120:15:11"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14:127:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "192:207:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "202:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "218:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "212:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "212:9:11"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "202:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "230:35:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "252:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "260:4:11",
                                    "type": "",
                                    "value": "0xc0"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "248:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "248:17:11"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "234:10:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "340:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "342:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "342:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "342:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:10:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "295:18:11",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "280:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "280:34:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "319:10:11"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "331:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "316:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "316:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "277:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "277:62:11"
                              },
                              "nodeType": "YulIf",
                              "src": "274:88:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "378:2:11",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "382:10:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "371:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "371:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "371:22:11"
                            }
                          ]
                        },
                        "name": "allocate_memory_2311",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "181:6:11",
                            "type": ""
                          }
                        ],
                        "src": "146:253:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "449:230:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "475:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:9:11"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "487:58:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "509:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "525:4:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "531:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "521:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "521:13:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "540:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "536:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "536:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "517:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "517:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "505:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "505:40:11"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "491:10:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "620:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "622:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "622:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "563:10:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "575:18:11",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "560:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "560:34:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "599:10:11"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "611:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "596:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "596:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "557:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "557:62:11"
                              },
                              "nodeType": "YulIf",
                              "src": "554:88:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "658:2:11",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "662:10:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "651:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "651:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "651:22:11"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "429:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "438:6:11",
                            "type": ""
                          }
                        ],
                        "src": "404:275:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "777:1020:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "787:12:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "797:2:11",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "791:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "844:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "853:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "856:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "846:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "846:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "846:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "819:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "828:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "815:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "815:23:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "840:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "811:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "811:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "808:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "869:37:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "896:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "883:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "883:23:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "873:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "915:28:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "925:18:11",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "919:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "970:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "979:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "982:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "972:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "972:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "972:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "958:6:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "966:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "955:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "955:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "952:34:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "995:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1009:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1020:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1005:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1005:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "999:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1075:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1084:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1087:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1077:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1077:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1077:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1054:2:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1058:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1050:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1050:13:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1065:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1046:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1046:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1039:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1039:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1036:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1100:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1123:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1110:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1110:16:11"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1104:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1149:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1151:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1151:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1151:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "1141:2:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1145:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1138:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1138:10:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1135:36:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1180:20:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1194:1:11",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "1197:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1190:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1190:10:11"
                              },
                              "variables": [
                                {
                                  "name": "_5",
                                  "nodeType": "YulTypedName",
                                  "src": "1184:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1209:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "1240:2:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1244:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1236:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1236:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1220:15:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1220:28:11"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "1213:3:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1257:16:11",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "1270:3:11"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1261:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "1289:3:11"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "1294:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1282:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1282:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1282:15:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1306:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "1317:3:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1322:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1313:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1313:12:11"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "1306:3:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1334:34:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "1356:2:11"
                                      },
                                      {
                                        "name": "_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "1360:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1352:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1352:11:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1365:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1348:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1348:20:11"
                              },
                              "variables": [
                                {
                                  "name": "srcEnd",
                                  "nodeType": "YulTypedName",
                                  "src": "1338:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1400:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1409:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1402:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1402:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1402:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "srcEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1383:6:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1391:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1380:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1380:19:11"
                              },
                              "nodeType": "YulIf",
                              "src": "1377:39:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1425:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1440:2:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1444:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1436:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1436:11:11"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "1429:3:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1512:255:11",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1526:30:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1552:3:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "calldataload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1539:12:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1539:17:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "1530:5:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "1620:74:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "1638:11:11",
                                          "value": {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1648:1:11",
                                            "type": "",
                                            "value": "0"
                                          },
                                          "variables": [
                                            {
                                              "name": "_6",
                                              "nodeType": "YulTypedName",
                                              "src": "1642:2:11",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "_6",
                                                "nodeType": "YulIdentifier",
                                                "src": "1673:2:11"
                                              },
                                              {
                                                "name": "_6",
                                                "nodeType": "YulIdentifier",
                                                "src": "1677:2:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "1666:6:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1666:14:11"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "1666:14:11"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "1582:5:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1593:5:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1600:4:11",
                                                  "type": "",
                                                  "value": "0xff"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "1589:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1589:16:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "1579:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1579:27:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "1572:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1572:35:11"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "1569:125:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1714:3:11"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "1719:5:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1707:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1707:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1707:18:11"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1738:19:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "1749:3:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1754:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1745:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1745:12:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "1738:3:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "1467:3:11"
                                  },
                                  {
                                    "name": "srcEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1472:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1464:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1464:15:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1480:23:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1482:19:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "1493:3:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1498:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1489:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1489:12:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "1482:3:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1460:3:11",
                                "statements": []
                              },
                              "src": "1456:311:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1776:15:11",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "1786:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1776:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_uint8_$dyn_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "743:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "754:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "766:6:11",
                            "type": ""
                          }
                        ],
                        "src": "684:1113:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1903:76:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1913:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1925:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1936:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1921:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1921:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1913:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1955:9:11"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1966:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1948:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1948:25:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1948:25:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1872:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1883:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1894:4:11",
                            "type": ""
                          }
                        ],
                        "src": "1802:177:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2054:110:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2100:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2109:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2112:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2102:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2102:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2102:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2075:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2084:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2071:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2071:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2096:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2067:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2067:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2064:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2125:33:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2148:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2135:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2135:23:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2125:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2020:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2031:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2043:6:11",
                            "type": ""
                          }
                        ],
                        "src": "1984:180:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2218:124:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2228:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2250:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2237:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2237:20:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "2228:5:11"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2320:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2329:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2332:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2322:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2322:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2322:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2279:5:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2290:5:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2305:3:11",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2310:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2301:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2301:11:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2314:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "2297:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2297:19:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2286:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2286:31:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2276:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2276:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2269:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2269:50:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2266:70:11"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2197:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2208:5:11",
                            "type": ""
                          }
                        ],
                        "src": "2169:173:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2434:167:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2480:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2489:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2492:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2482:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2482:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2482:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2455:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2464:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2451:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2451:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2476:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2447:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2447:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "2444:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2505:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2534:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2515:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2515:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2505:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2553:42:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2580:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2591:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2576:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2576:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2563:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2563:32:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2553:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2392:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2403:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2415:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2423:6:11",
                            "type": ""
                          }
                        ],
                        "src": "2347:254:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2701:92:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2711:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2723:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2734:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2719:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2719:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2711:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2753:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2778:6:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2771:6:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2771:14:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "2764:6:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2764:22:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2746:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2746:41:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2746:41:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2670:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2681:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2692:4:11",
                            "type": ""
                          }
                        ],
                        "src": "2606:187:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2899:102:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2909:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2921:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2932:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2917:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2917:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2909:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2951:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2966:6:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2982:3:11",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2987:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2978:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2978:11:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2991:1:11",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2974:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2974:19:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2962:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2962:32:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2944:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2944:51:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2944:51:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2868:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2879:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2890:4:11",
                            "type": ""
                          }
                        ],
                        "src": "2798:203:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3076:116:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3122:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3131:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3134:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3124:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3124:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3124:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3097:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3106:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3093:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3093:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3118:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3089:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3089:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3086:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3147:39:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3176:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3157:18:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3157:29:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3147:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3042:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3053:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3065:6:11",
                            "type": ""
                          }
                        ],
                        "src": "3006:186:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3254:129:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3298:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "3300:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3300:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3300:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3270:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3278:18:11",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3267:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3267:30:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3264:56:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3329:48:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "3349:6:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3357:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3345:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3345:15:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3366:2:11",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "3362:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3362:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3341:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3341:29:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3372:4:11",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3337:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3337:40:11"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "3329:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "3234:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "3245:4:11",
                            "type": ""
                          }
                        ],
                        "src": "3197:186:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3440:410:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3489:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3498:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3501:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3491:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3491:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3491:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "3468:6:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3476:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3464:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3464:17:11"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "3483:3:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3460:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3460:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3453:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3453:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3450:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3514:30:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3537:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3524:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3524:20:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3518:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3553:63:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3612:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "3584:27:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3584:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3568:15:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3568:48:11"
                              },
                              "variables": [
                                {
                                  "name": "array_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3557:7:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3632:7:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3641:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3625:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3625:19:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3625:19:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3692:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3701:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3704:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3694:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3694:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3694:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "3667:6:11"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "3675:2:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3663:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3663:15:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3680:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3659:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3659:26:11"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "3687:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3656:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3656:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3653:55:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3734:7:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3743:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3730:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3730:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3754:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3762:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3750:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3750:17:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3769:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "3717:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3717:55:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3717:55:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "array_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "3796:7:11"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "3805:2:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3792:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3792:16:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3810:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3788:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3788:27:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3817:1:11",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3781:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3781:38:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3781:38:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3828:16:11",
                              "value": {
                                "name": "array_1",
                                "nodeType": "YulIdentifier",
                                "src": "3837:7:11"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "3828:5:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "3414:6:11",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3422:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "3430:5:11",
                            "type": ""
                          }
                        ],
                        "src": "3388:462:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3934:241:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3980:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3989:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3992:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3982:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3982:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3982:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3955:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3964:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3951:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3951:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3976:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3947:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3947:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "3944:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4005:37:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4032:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4019:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4019:23:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "4009:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4085:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4094:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4097:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4087:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4087:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4087:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4057:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4065:18:11",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4054:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4054:30:11"
                              },
                              "nodeType": "YulIf",
                              "src": "4051:50:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4110:59:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4141:9:11"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "4152:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4137:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4137:22:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4161:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "4120:16:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4120:49:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4110:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3900:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3911:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3923:6:11",
                            "type": ""
                          }
                        ],
                        "src": "3855:320:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4233:205:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4243:10:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4252:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "4247:1:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4312:63:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "4337:3:11"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "4342:1:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4333:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4333:11:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4356:3:11"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4361:1:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "4352:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4352:11:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "4346:5:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4346:18:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4326:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4326:39:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4326:39:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4273:1:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4276:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4270:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4270:13:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4284:19:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4286:15:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4295:1:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4298:2:11",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4291:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4291:10:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "4286:1:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "4266:3:11",
                                "statements": []
                              },
                              "src": "4262:113:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4401:31:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "4414:3:11"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "4419:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4410:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4410:16:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4428:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4403:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4403:27:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4403:27:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4390:1:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4393:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4387:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4387:13:11"
                              },
                              "nodeType": "YulIf",
                              "src": "4384:48:11"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "4211:3:11",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "4216:3:11",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "4221:6:11",
                            "type": ""
                          }
                        ],
                        "src": "4180:258:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4504:208:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4514:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4534:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4528:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4528:12:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4518:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4556:3:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4561:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4549:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4549:19:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4549:19:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "4603:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4610:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4599:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4599:16:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4621:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4626:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4617:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4617:14:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4633:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4577:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4577:63:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4577:63:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4649:57:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "4664:3:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "4677:6:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4685:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4673:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4673:15:11"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4694:2:11",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4690:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4690:7:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "4669:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4669:29:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4660:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4660:39:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4701:4:11",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4656:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4656:50:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4649:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_string_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "4481:5:11",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "4488:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4496:3:11",
                            "type": ""
                          }
                        ],
                        "src": "4443:269:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4838:110:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4855:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4866:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4848:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4848:21:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4848:21:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4878:64:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4915:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4927:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4938:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4923:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4923:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4886:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4886:56:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4878:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4807:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4818:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4829:4:11",
                            "type": ""
                          }
                        ],
                        "src": "4717:231:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5052:1377:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5098:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5107:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5110:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5100:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5100:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5100:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5073:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5082:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5069:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5069:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5094:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5065:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5065:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5062:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5123:37:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5150:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5137:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5137:23:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5127:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5169:28:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5179:18:11",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5173:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5224:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5233:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5236:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5226:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5226:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5226:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5212:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5220:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5209:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5209:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5206:34:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5249:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5263:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5274:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5259:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5259:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5253:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5321:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5330:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5333:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5323:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5323:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5323:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5301:7:11"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5310:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5297:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5297:16:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5315:4:11",
                                    "type": "",
                                    "value": "0xc0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5293:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5293:27:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5290:47:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5346:35:11",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "allocate_memory_2311",
                                  "nodeType": "YulIdentifier",
                                  "src": "5359:20:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5359:22:11"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5350:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5390:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5419:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5406:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5406:16:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5394:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5451:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5460:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5463:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5453:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5453:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5453:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5437:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5447:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5434:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5434:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5431:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5483:5:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "5511:2:11"
                                          },
                                          {
                                            "name": "offset_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "5515:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5507:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5507:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5526:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "5490:16:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5490:44:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5476:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5476:59:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5476:59:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5544:41:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5577:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5581:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5573:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5573:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5560:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5560:25:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5548:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5614:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5623:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5626:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5616:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5616:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5616:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5600:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5610:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5597:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5597:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5594:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5650:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5657:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5646:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5646:14:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "5683:2:11"
                                          },
                                          {
                                            "name": "offset_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "5687:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5679:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5679:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5698:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "5662:16:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5662:44:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5639:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5639:68:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5639:68:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5716:41:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5749:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5753:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5745:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5745:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5732:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5732:25:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_3",
                                  "nodeType": "YulTypedName",
                                  "src": "5720:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5786:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5795:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5798:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5788:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5788:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5788:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "5772:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5782:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5769:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5769:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5766:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5822:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5829:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5818:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5818:14:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "5855:2:11"
                                          },
                                          {
                                            "name": "offset_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "5859:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "5851:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5851:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5870:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "5834:16:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5834:44:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5811:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5811:68:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5811:68:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5888:41:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5921:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5925:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5917:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5917:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5904:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5904:25:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_4",
                                  "nodeType": "YulTypedName",
                                  "src": "5892:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5958:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5967:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5970:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5960:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5960:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5960:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "5944:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5954:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5941:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5941:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "5938:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5994:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6001:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5990:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5990:14:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6027:2:11"
                                          },
                                          {
                                            "name": "offset_4",
                                            "nodeType": "YulIdentifier",
                                            "src": "6031:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6023:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6023:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6042:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "6006:16:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6006:44:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5983:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5983:68:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5983:68:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6060:42:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "6093:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6097:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6089:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6089:12:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6076:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6076:26:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_5",
                                  "nodeType": "YulTypedName",
                                  "src": "6064:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6131:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6140:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6143:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6133:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6133:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6133:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "6117:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6127:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6114:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6114:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6111:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "6167:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6174:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6163:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6163:15:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6201:2:11"
                                          },
                                          {
                                            "name": "offset_5",
                                            "nodeType": "YulIdentifier",
                                            "src": "6205:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6197:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6197:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6216:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "6180:16:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6180:44:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6156:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6156:69:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6156:69:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6234:42:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "6267:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6271:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6263:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6263:12:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6250:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6250:26:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_6",
                                  "nodeType": "YulTypedName",
                                  "src": "6238:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6305:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6314:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6317:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6307:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6307:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6307:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "6291:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6301:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6288:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6288:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "6285:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "6341:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6348:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6337:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6337:15:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6375:2:11"
                                          },
                                          {
                                            "name": "offset_6",
                                            "nodeType": "YulIdentifier",
                                            "src": "6379:8:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6371:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6371:17:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6390:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "6354:16:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6354:44:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6330:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6330:69:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6330:69:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6408:15:11",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "6418:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6408:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_ContractURI_$2877_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5018:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5029:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5041:6:11",
                            "type": ""
                          }
                        ],
                        "src": "4953:1476:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6581:492:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6591:12:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6601:2:11",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6595:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6612:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6630:9:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6641:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6626:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6626:18:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6616:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6660:9:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6671:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6653:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6653:21:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6653:21:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6683:17:11",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "6694:6:11"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "6687:3:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6709:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6729:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6723:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6723:13:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6713:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6752:6:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6760:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6745:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6745:22:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6745:22:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6776:25:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6787:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6798:2:11",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6783:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6783:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "6776:3:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6810:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6828:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6836:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6824:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6824:15:11"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "6814:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6848:10:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6857:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6852:1:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6916:131:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6937:3:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6952:6:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "6946:5:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6946:13:11"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6961:4:11",
                                              "type": "",
                                              "value": "0xff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6942:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6942:24:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6930:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6930:37:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6930:37:11"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6980:19:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6991:3:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6996:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6987:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6987:12:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6980:3:11"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7012:25:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "7026:6:11"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7034:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7022:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7022:15:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "7012:6:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6878:1:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6881:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6875:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6875:13:11"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6889:18:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6891:14:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6900:1:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6903:1:11",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6896:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6896:9:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6891:1:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6871:3:11",
                                "statements": []
                              },
                              "src": "6867:180:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7056:11:11",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "7064:3:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7056:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_uint8_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6550:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6561:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6572:4:11",
                            "type": ""
                          }
                        ],
                        "src": "6434:639:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7237:1212:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7254:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7265:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7247:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7247:21:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7247:21:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7277:33:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7303:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7297:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7297:13:11"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0",
                                  "nodeType": "YulTypedName",
                                  "src": "7281:12:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7330:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7341:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7326:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7326:18:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7346:4:11",
                                    "type": "",
                                    "value": "0xc0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7319:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7319:32:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7319:32:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7360:77:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7403:12:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7421:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7432:3:11",
                                        "type": "",
                                        "value": "224"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7417:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7417:19:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7374:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7374:63:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7364:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7446:44:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7478:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7486:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7474:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7474:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7468:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7468:22:11"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7450:14:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7499:17:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7513:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "7509:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7509:7:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7503:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7536:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7547:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7532:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7532:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "tail_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "7560:6:11"
                                          },
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "7568:9:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7556:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7556:22:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7580:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7552:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7552:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7525:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7525:59:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7525:59:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7593:66:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7636:14:11"
                                  },
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7652:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7607:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7607:52:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_2",
                                  "nodeType": "YulTypedName",
                                  "src": "7597:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7668:44:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7700:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7708:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7696:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7696:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7690:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7690:22:11"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_2",
                                  "nodeType": "YulTypedName",
                                  "src": "7672:14:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7732:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7743:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7728:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7728:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "tail_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7756:6:11"
                                          },
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "7764:9:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7752:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7752:22:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7776:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7748:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7748:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7721:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7721:59:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7721:59:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7789:66:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7832:14:11"
                                  },
                                  {
                                    "name": "tail_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7848:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7803:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7803:52:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_3",
                                  "nodeType": "YulTypedName",
                                  "src": "7793:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7864:44:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7896:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7904:2:11",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7892:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7892:15:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7886:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7886:22:11"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_3",
                                  "nodeType": "YulTypedName",
                                  "src": "7868:14:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7928:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7939:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7924:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7924:19:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "tail_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "7953:6:11"
                                          },
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "7961:9:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7949:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7949:22:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7973:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7945:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7945:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7917:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7917:60:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7917:60:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7986:66:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "8029:14:11"
                                  },
                                  {
                                    "name": "tail_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "8045:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8000:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8000:52:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_4",
                                  "nodeType": "YulTypedName",
                                  "src": "7990:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8061:45:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8093:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8101:3:11",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8089:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8089:16:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8083:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8083:23:11"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_4",
                                  "nodeType": "YulTypedName",
                                  "src": "8065:14:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8126:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8137:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8122:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8122:19:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "tail_4",
                                            "nodeType": "YulIdentifier",
                                            "src": "8151:6:11"
                                          },
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "8159:9:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "8147:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8147:22:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8171:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8143:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8143:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8115:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8115:60:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8115:60:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8184:66:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "8227:14:11"
                                  },
                                  {
                                    "name": "tail_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "8243:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8198:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8198:52:11"
                              },
                              "variables": [
                                {
                                  "name": "tail_5",
                                  "nodeType": "YulTypedName",
                                  "src": "8188:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8259:45:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8291:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8299:3:11",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8287:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8287:16:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8281:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8281:23:11"
                              },
                              "variables": [
                                {
                                  "name": "memberValue0_5",
                                  "nodeType": "YulTypedName",
                                  "src": "8263:14:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8324:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8335:4:11",
                                        "type": "",
                                        "value": "0xc0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8320:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8320:20:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "tail_5",
                                            "nodeType": "YulIdentifier",
                                            "src": "8350:6:11"
                                          },
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "8358:9:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "8346:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8346:22:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8370:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8342:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8342:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8313:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8313:61:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8313:61:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8383:60:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memberValue0_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "8420:14:11"
                                  },
                                  {
                                    "name": "tail_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "8436:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8391:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8391:52:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8383:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_ContractURI_$2877_memory_ptr__to_t_struct$_ContractURI_$2877_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7206:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7217:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7228:4:11",
                            "type": ""
                          }
                        ],
                        "src": "7078:1371:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8553:101:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8563:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8575:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8586:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8571:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8571:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8563:4:11"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8605:9:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8620:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8628:18:11",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8616:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8616:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8598:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8598:50:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8598:50:11"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8522:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8533:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8544:4:11",
                            "type": ""
                          }
                        ],
                        "src": "8454:200:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8781:485:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8827:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8836:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8839:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8829:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8829:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8829:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "8802:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8811:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "8798:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8798:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8823:2:11",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8794:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8794:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "8791:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8852:33:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8875:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8862:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8862:23:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "8852:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8894:46:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8925:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8936:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8921:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8921:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8908:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8908:32:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "8898:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8949:28:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8959:18:11",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8953:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9004:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9013:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9016:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9006:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9006:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9006:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "8992:6:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9000:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8989:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8989:14:11"
                              },
                              "nodeType": "YulIf",
                              "src": "8986:34:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9029:59:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9060:9:11"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "9071:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9056:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9056:22:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "9080:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "9039:16:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9039:49:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "9029:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9097:48:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9130:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9141:2:11",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9126:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9126:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9113:12:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9113:32:11"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9101:8:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9174:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9183:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9186:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9176:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9176:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9176:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9160:8:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9170:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9157:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9157:16:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9154:36:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9199:61:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9230:9:11"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9241:8:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9226:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9226:24:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "9252:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "9209:16:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9209:51:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "9199:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_bytes_memory_ptrt_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8731:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "8742:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8754:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8762:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8770:6:11",
                            "type": ""
                          }
                        ],
                        "src": "8659:607:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9390:110:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9407:9:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9418:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9400:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9400:21:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9400:21:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9430:64:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9467:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9479:9:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9490:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9475:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9475:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "9438:28:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9438:56:11"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9430:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9359:9:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9370:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9381:4:11",
                            "type": ""
                          }
                        ],
                        "src": "9271:229:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9596:544:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9642:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9651:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9654:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9644:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9644:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9644:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9617:7:11"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9626:9:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "9613:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9613:23:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9638:2:11",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9609:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9609:32:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9606:52:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9667:30:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9687:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9681:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9681:16:11"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "9671:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9740:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9749:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9752:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9742:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9742:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9742:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "9712:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9720:18:11",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9709:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9709:30:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9706:50:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9765:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9779:9:11"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "9790:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9775:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9775:22:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9769:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9845:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9854:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "9857:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "9847:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9847:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9847:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "9824:2:11"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9828:4:11",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9820:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9820:13:11"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "9835:7:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9816:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9816:27:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9809:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9809:35:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9806:55:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9870:19:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9886:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9880:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9880:9:11"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "9874:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9898:61:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "9955:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_bytes",
                                      "nodeType": "YulIdentifier",
                                      "src": "9927:27:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9927:31:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "9911:15:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9911:48:11"
                              },
                              "variables": [
                                {
                                  "name": "array",
                                  "nodeType": "YulTypedName",
                                  "src": "9902:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "9975:5:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9982:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9968:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9968:17:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9968:17:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10031:16:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10040:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10043:1:11",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10033:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10033:12:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10033:12:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10008:2:11"
                                          },
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "10012:2:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10004:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10004:11:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10017:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10000:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10000:20:11"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "10022:7:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9997:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9997:33:11"
                              },
                              "nodeType": "YulIf",
                              "src": "9994:53:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10082:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10086:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10078:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10078:11:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array",
                                        "nodeType": "YulIdentifier",
                                        "src": "10095:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10102:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10091:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10091:14:11"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10107:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "10056:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10056:54:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10056:54:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10119:15:11",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "10129:5:11"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "10119:6:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9562:9:11",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "9573:7:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9585:6:11",
                            "type": ""
                          }
                        ],
                        "src": "9505:635:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10200:325:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10210:22:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10224:1:11",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "10227:4:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "10220:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10220:12:11"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "10210:6:11"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10241:38:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "10271:4:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10277:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10267:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10267:12:11"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "10245:18:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10318:31:11",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10320:27:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "10334:6:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10342:4:11",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "10330:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10330:17:11"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "10320:6:11"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "10298:18:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10291:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10291:26:11"
                              },
                              "nodeType": "YulIf",
                              "src": "10288:61:11"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10408:111:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10429:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "10436:3:11",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "10441:10:11",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "10432:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10432:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10422:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10422:31:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10422:31:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10473:1:11",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10476:4:11",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10466:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10466:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10466:15:11"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10501:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10504:4:11",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "10494:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10494:15:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10494:15:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "10364:18:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "10387:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10395:2:11",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10384:2:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10384:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10361:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10361:38:11"
                              },
                              "nodeType": "YulIf",
                              "src": "10358:161:11"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "10180:4:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "10189:6:11",
                            "type": ""
                          }
                        ],
                        "src": "10145:380:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10586:65:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10603:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "10606:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10596:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10596:14:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10596:14:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10619:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10637:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10640:4:11",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "10627:9:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10627:18:11"
                              },
                              "variableNames": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "10619:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_dataslot_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "10569:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "10577:4:11",
                            "type": ""
                          }
                        ],
                        "src": "10530:121:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10737:464:11",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10770:425:11",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "10784:11:11",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "10794:1:11",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulTypedName",
                                        "src": "10788:2:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10815:2:11"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "10819:5:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10808:6:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10808:17:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10808:17:11"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "10838:31:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "10860:2:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10864:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "10850:9:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10850:19:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulTypedName",
                                        "src": "10842:4:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "10882:57:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "10905:4:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "10915:1:11",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "startIndex",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10922:10:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "10934:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "10918:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10918:19:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "10911:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10911:27:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10901:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10901:38:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "deleteStart",
                                        "nodeType": "YulTypedName",
                                        "src": "10886:11:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "10976:23:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "10978:19:11",
                                          "value": {
                                            "name": "data",
                                            "nodeType": "YulIdentifier",
                                            "src": "10993:4:11"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "deleteStart",
                                              "nodeType": "YulIdentifier",
                                              "src": "10978:11:11"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "startIndex",
                                          "nodeType": "YulIdentifier",
                                          "src": "10958:10:11"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10970:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "10955:2:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10955:20:11"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "10952:47:11"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "11012:41:11",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "11026:4:11"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "11036:1:11",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "len",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11043:3:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "11048:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "11039:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11039:12:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "11032:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11032:20:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "11022:3:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11022:31:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulTypedName",
                                        "src": "11016:2:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "11066:24:11",
                                    "value": {
                                      "name": "deleteStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "11079:11:11"
                                    },
                                    "variables": [
                                      {
                                        "name": "start",
                                        "nodeType": "YulTypedName",
                                        "src": "11070:5:11",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "11164:21:11",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "start",
                                                "nodeType": "YulIdentifier",
                                                "src": "11173:5:11"
                                              },
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "11180:2:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "11166:6:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11166:17:11"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "11166:17:11"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "start",
                                          "nodeType": "YulIdentifier",
                                          "src": "11114:5:11"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "11121:2:11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "11111:2:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11111:13:11"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "11125:26:11",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "11127:22:11",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "start",
                                                "nodeType": "YulIdentifier",
                                                "src": "11140:5:11"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11147:1:11",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "11136:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11136:13:11"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "start",
                                              "nodeType": "YulIdentifier",
                                              "src": "11127:5:11"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "11107:3:11",
                                      "statements": []
                                    },
                                    "src": "11103:82:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "len",
                                    "nodeType": "YulIdentifier",
                                    "src": "10753:3:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10758:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10750:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10750:11:11"
                              },
                              "nodeType": "YulIf",
                              "src": "10747:448:11"
                            }
                          ]
                        },
                        "name": "clean_up_bytearray_end_slots_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "10709:5:11",
                            "type": ""
                          },
                          {
                            "name": "len",
                            "nodeType": "YulTypedName",
                            "src": "10716:3:11",
                            "type": ""
                          },
                          {
                            "name": "startIndex",
                            "nodeType": "YulTypedName",
                            "src": "10721:10:11",
                            "type": ""
                          }
                        ],
                        "src": "10656:545:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11291:81:11",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11301:65:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "11316:4:11"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "11334:1:11",
                                                    "type": "",
                                                    "value": "3"
                                                  },
                                                  {
                                                    "name": "len",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "11337:3:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11330:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "11330:11:11"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "11347:1:11",
                                                    "type": "",
                                                    "value": "0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "not",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11343:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "11343:6:11"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shr",
                                              "nodeType": "YulIdentifier",
                                              "src": "11326:3:11"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11326:24:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "11322:3:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11322:29:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11312:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11312:40:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11358:1:11",
                                        "type": "",
                                        "value": "1"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "11361:3:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11354:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11354:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "11309:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11309:57:11"
                              },
                              "variableNames": [
                                {
                                  "name": "used",
                                  "nodeType": "YulIdentifier",
                                  "src": "11301:4:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "extract_used_part_and_set_length_of_short_byte_array",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "11268:4:11",
                            "type": ""
                          },
                          {
                            "name": "len",
                            "nodeType": "YulTypedName",
                            "src": "11274:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "used",
                            "nodeType": "YulTypedName",
                            "src": "11282:4:11",
                            "type": ""
                          }
                        ],
                        "src": "11206:166:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11473:1256:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11483:24:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "11503:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11497:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11497:10:11"
                              },
                              "variables": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulTypedName",
                                  "src": "11487:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11550:22:11",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "11552:16:11"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11552:18:11"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11552:18:11"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "11522:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11530:18:11",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11519:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11519:30:11"
                              },
                              "nodeType": "YulIf",
                              "src": "11516:56:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "slot",
                                    "nodeType": "YulIdentifier",
                                    "src": "11625:4:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "slot",
                                            "nodeType": "YulIdentifier",
                                            "src": "11663:4:11"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11657:5:11"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11657:11:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "extract_byte_array_length",
                                      "nodeType": "YulIdentifier",
                                      "src": "11631:25:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11631:38:11"
                                  },
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "11671:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "clean_up_bytearray_end_slots_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "11581:43:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11581:97:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11581:97:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11687:18:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11704:1:11",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "srcOffset",
                                  "nodeType": "YulTypedName",
                                  "src": "11691:9:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11714:23:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11733:4:11",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "srcOffset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11718:11:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11746:24:11",
                              "value": {
                                "name": "srcOffset_1",
                                "nodeType": "YulIdentifier",
                                "src": "11759:11:11"
                              },
                              "variableNames": [
                                {
                                  "name": "srcOffset",
                                  "nodeType": "YulIdentifier",
                                  "src": "11746:9:11"
                                }
                              ]
                            },
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "11816:656:11",
                                    "statements": [
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "11830:35:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "newLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "11849:6:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "11861:2:11",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "not",
                                                "nodeType": "YulIdentifier",
                                                "src": "11857:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11857:7:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "11845:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11845:20:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "loopEnd",
                                            "nodeType": "YulTypedName",
                                            "src": "11834:7:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "11878:49:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "11922:4:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "array_dataslot_string_storage",
                                            "nodeType": "YulIdentifier",
                                            "src": "11892:29:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11892:35:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "dstPtr",
                                            "nodeType": "YulTypedName",
                                            "src": "11882:6:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "11940:10:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11949:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "i",
                                            "nodeType": "YulTypedName",
                                            "src": "11944:1:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "12027:172:11",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12052:6:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "src",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "12070:3:11"
                                                          },
                                                          {
                                                            "name": "srcOffset",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "12075:9:11"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "12066:3:11"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "12066:19:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "12060:5:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "12060:26:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12045:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12045:42:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "12045:42:11"
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "12104:24:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12118:6:11"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12126:1:11",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12114:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12114:14:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "dstPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12104:6:11"
                                                }
                                              ]
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "12145:40:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "srcOffset",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12162:9:11"
                                                  },
                                                  {
                                                    "name": "srcOffset_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12173:11:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12158:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12158:27:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "srcOffset",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12145:9:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "11974:1:11"
                                            },
                                            {
                                              "name": "loopEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "11977:7:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "11971:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11971:14:11"
                                        },
                                        "nodeType": "YulForLoop",
                                        "post": {
                                          "nodeType": "YulBlock",
                                          "src": "11986:28:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "11988:24:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "i",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "11997:1:11"
                                                  },
                                                  {
                                                    "name": "srcOffset_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12000:11:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11993:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "11993:19:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11988:1:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "pre": {
                                          "nodeType": "YulBlock",
                                          "src": "11967:3:11",
                                          "statements": []
                                        },
                                        "src": "11963:236:11"
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "12247:166:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulVariableDeclaration",
                                              "src": "12265:43:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "12292:3:11"
                                                      },
                                                      {
                                                        "name": "srcOffset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "12297:9:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "12288:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "12288:19:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12282:5:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12282:26:11"
                                              },
                                              "variables": [
                                                {
                                                  "name": "lastValue",
                                                  "nodeType": "YulTypedName",
                                                  "src": "12269:9:11",
                                                  "type": ""
                                                }
                                              ]
                                            },
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "dstPtr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12332:6:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "lastValue",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "12344:9:11"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "arguments": [
                                                                      {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "12371:1:11",
                                                                        "type": "",
                                                                        "value": "3"
                                                                      },
                                                                      {
                                                                        "name": "newLen",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "12374:6:11"
                                                                      }
                                                                    ],
                                                                    "functionName": {
                                                                      "name": "shl",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "12367:3:11"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "12367:14:11"
                                                                  },
                                                                  {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "12383:3:11",
                                                                    "type": "",
                                                                    "value": "248"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "and",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "12363:3:11"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "12363:24:11"
                                                              },
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "kind": "number",
                                                                    "nodeType": "YulLiteral",
                                                                    "src": "12393:1:11",
                                                                    "type": "",
                                                                    "value": "0"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "not",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "12389:3:11"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "12389:6:11"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "shr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "12359:3:11"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "12359:37:11"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "not",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "12355:3:11"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "12355:42:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "12340:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "12340:58:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12325:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12325:74:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "12325:74:11"
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "loopEnd",
                                              "nodeType": "YulIdentifier",
                                              "src": "12218:7:11"
                                            },
                                            {
                                              "name": "newLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "12227:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "12215:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12215:19:11"
                                        },
                                        "nodeType": "YulIf",
                                        "src": "12212:201:11"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "12433:4:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "12447:1:11",
                                                      "type": "",
                                                      "value": "1"
                                                    },
                                                    {
                                                      "name": "newLen",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "12450:6:11"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "12443:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "12443:14:11"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "12459:1:11",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "12439:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "12439:22:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "12426:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12426:36:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "12426:36:11"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "11809:663:11",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11814:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "12489:234:11",
                                    "statements": [
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "12503:14:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12516:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulTypedName",
                                            "src": "12507:5:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "12552:67:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "12570:35:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "src",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "12589:3:11"
                                                      },
                                                      {
                                                        "name": "srcOffset",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "12594:9:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "12585:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "12585:19:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12579:5:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12579:26:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12570:5:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "12533:6:11"
                                        },
                                        "nodeType": "YulIf",
                                        "src": "12530:89:11"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "slot",
                                              "nodeType": "YulIdentifier",
                                              "src": "12639:4:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "value",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12698:5:11"
                                                },
                                                {
                                                  "name": "newLen",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12705:6:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "extract_used_part_and_set_length_of_short_byte_array",
                                                "nodeType": "YulIdentifier",
                                                "src": "12645:52:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "12645:67:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "12632:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12632:81:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "12632:81:11"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "12481:242:11",
                                  "value": "default"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "newLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "11789:6:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11797:2:11",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11786:2:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11786:14:11"
                              },
                              "nodeType": "YulSwitch",
                              "src": "11779:944:11"
                            }
                          ]
                        },
                        "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "slot",
                            "nodeType": "YulTypedName",
                            "src": "11458:4:11",
                            "type": ""
                          },
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "11464:3:11",
                            "type": ""
                          }
                        ],
                        "src": "11377:1352:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12782:57:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "12799:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12808:3:11",
                                        "type": "",
                                        "value": "193"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12813:18:11",
                                        "type": "",
                                        "value": "0x3d913730b6b2911d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12804:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12804:28:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12792:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12792:41:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12792:41:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_40bb",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "12773:3:11",
                            "type": ""
                          }
                        ],
                        "src": "12734:105:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12892:29:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "12901:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12910:3:11",
                                        "type": "",
                                        "value": "249"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12915:2:11",
                                        "type": "",
                                        "value": "17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12906:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12906:12:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12894:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12894:25:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12894:25:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_6e9f",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "12883:3:11",
                            "type": ""
                          }
                        ],
                        "src": "12844:77:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12984:664:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12994:29:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "13017:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "sload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13011:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13011:12:11"
                              },
                              "variables": [
                                {
                                  "name": "slotValue",
                                  "nodeType": "YulTypedName",
                                  "src": "12998:9:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13032:50:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "slotValue",
                                    "nodeType": "YulIdentifier",
                                    "src": "13072:9:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "extract_byte_array_length",
                                  "nodeType": "YulIdentifier",
                                  "src": "13046:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13046:36:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "13036:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13091:11:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "13101:1:11",
                                "type": "",
                                "value": "1"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13095:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "13152:126:11",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "pos",
                                              "nodeType": "YulIdentifier",
                                              "src": "13173:3:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "slotValue",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13182:9:11"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "13197:3:11",
                                                      "type": "",
                                                      "value": "255"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "not",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "13193:3:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "13193:8:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "13178:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "13178:24:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "13166:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13166:37:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "13166:37:11"
                                      },
                                      {
                                        "nodeType": "YulAssignment",
                                        "src": "13216:52:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "pos",
                                              "nodeType": "YulIdentifier",
                                              "src": "13227:3:11"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "length",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13236:6:11"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "name": "length",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "13258:6:11"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "iszero",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "13251:6:11"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "13251:14:11"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "iszero",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "13244:6:11"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "13244:22:11"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mul",
                                                "nodeType": "YulIdentifier",
                                                "src": "13232:3:11"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "13232:35:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "13223:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13223:45:11"
                                        },
                                        "variableNames": [
                                          {
                                            "name": "ret",
                                            "nodeType": "YulIdentifier",
                                            "src": "13216:3:11"
                                          }
                                        ]
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "13145:133:11",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13150:1:11",
                                    "type": "",
                                    "value": "0"
                                  }
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "13294:348:11",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "13315:1:11",
                                              "type": "",
                                              "value": "0"
                                            },
                                            {
                                              "name": "value",
                                              "nodeType": "YulIdentifier",
                                              "src": "13318:5:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "13308:6:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13308:16:11"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "13308:16:11"
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "13337:14:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13347:4:11",
                                          "type": "",
                                          "value": "0x20"
                                        },
                                        "variables": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulTypedName",
                                            "src": "13341:2:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "13364:31:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "13389:1:11",
                                              "type": "",
                                              "value": "0"
                                            },
                                            {
                                              "name": "_2",
                                              "nodeType": "YulIdentifier",
                                              "src": "13392:2:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "keccak256",
                                            "nodeType": "YulIdentifier",
                                            "src": "13379:9:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13379:16:11"
                                        },
                                        "variables": [
                                          {
                                            "name": "dataPos",
                                            "nodeType": "YulTypedName",
                                            "src": "13368:7:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "nodeType": "YulVariableDeclaration",
                                        "src": "13408:10:11",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13417:1:11",
                                          "type": "",
                                          "value": "0"
                                        },
                                        "variables": [
                                          {
                                            "name": "i",
                                            "nodeType": "YulTypedName",
                                            "src": "13412:1:11",
                                            "type": ""
                                          }
                                        ]
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "13485:111:11",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "pos",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "13514:3:11"
                                                      },
                                                      {
                                                        "name": "i",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "13519:1:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "13510:3:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "13510:11:11"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "dataPos",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "13529:7:11"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "sload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "13523:5:11"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "13523:14:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13503:6:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "13503:35:11"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "13503:35:11"
                                            },
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "13555:27:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "dataPos",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "13570:7:11"
                                                  },
                                                  {
                                                    "name": "_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "13579:2:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13566:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "13566:16:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "dataPos",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13555:7:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "arguments": [
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "13442:1:11"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "13445:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "lt",
                                            "nodeType": "YulIdentifier",
                                            "src": "13439:2:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13439:13:11"
                                        },
                                        "nodeType": "YulForLoop",
                                        "post": {
                                          "nodeType": "YulBlock",
                                          "src": "13453:19:11",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "13455:15:11",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "i",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "13464:1:11"
                                                  },
                                                  {
                                                    "name": "_2",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "13467:2:11"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13460:3:11"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "13460:10:11"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13455:1:11"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "pre": {
                                          "nodeType": "YulBlock",
                                          "src": "13435:3:11",
                                          "statements": []
                                        },
                                        "src": "13431:165:11"
                                      },
                                      {
                                        "nodeType": "YulAssignment",
                                        "src": "13609:23:11",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "pos",
                                              "nodeType": "YulIdentifier",
                                              "src": "13620:3:11"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "13625:6:11"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "13616:3:11"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13616:16:11"
                                        },
                                        "variableNames": [
                                          {
                                            "name": "ret",
                                            "nodeType": "YulIdentifier",
                                            "src": "13609:3:11"
                                          }
                                        ]
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "13287:355:11",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13292:1:11",
                                    "type": "",
                                    "value": "1"
                                  }
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "slotValue",
                                    "nodeType": "YulIdentifier",
                                    "src": "13122:9:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13133:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "13118:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13118:18:11"
                              },
                              "nodeType": "YulSwitch",
                              "src": "13111:531:11"
                            }
                          ]
                        },
                        "name": "abi_encode_string_storage",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12961:5:11",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "12968:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "12976:3:11",
                            "type": ""
                          }
                        ],
                        "src": "12926:722:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13696:31:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "13705:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13714:3:11",
                                        "type": "",
                                        "value": "242"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13719:4:11",
                                        "type": "",
                                        "value": "2187"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13710:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13710:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13698:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13698:27:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13698:27:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "13687:3:11",
                            "type": ""
                          }
                        ],
                        "src": "13653:74:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13780:69:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "13797:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13806:3:11",
                                        "type": "",
                                        "value": "145"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13811:30:11",
                                        "type": "",
                                        "value": "0x113232b9b1b934b83a34b7b7111d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13802:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13802:40:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13790:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13790:53:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13790:53:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_d167",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "13771:3:11",
                            "type": ""
                          }
                        ],
                        "src": "13732:117:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13902:57:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "13919:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13928:3:11",
                                        "type": "",
                                        "value": "193"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13933:18:11",
                                        "type": "",
                                        "value": "0x1134b6b0b3b2911d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13924:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13924:28:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13912:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13912:41:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13912:41:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_0474",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "13893:3:11",
                            "type": ""
                          }
                        ],
                        "src": "13854:105:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14012:71:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "14029:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14038:3:11",
                                        "type": "",
                                        "value": "137"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14043:32:11",
                                        "type": "",
                                        "value": "0x1132bc3a32b93730b62634b735911d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14034:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14034:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14022:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14022:55:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14022:55:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_edb9",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "14003:3:11",
                            "type": ""
                          }
                        ],
                        "src": "13964:119:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14136:95:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "14153:3:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14158:66:11",
                                    "type": "",
                                    "value": "0x2273656c6c65724665654261736973506f696e7473223a000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14146:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14146:79:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14146:79:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_5a0f",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "14127:3:11",
                            "type": ""
                          }
                        ],
                        "src": "14088:143:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14284:71:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "14301:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14310:3:11",
                                        "type": "",
                                        "value": "137"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14315:32:11",
                                        "type": "",
                                        "value": "0x113332b2a932b1b4b834b2b73a111d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14306:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14306:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14294:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14294:55:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14294:55:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_891c",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "14275:3:11",
                            "type": ""
                          }
                        ],
                        "src": "14236:119:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14408:20:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "14417:3:11"
                                  },
                                  {
                                    "hexValue": "7d",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "14422:3:11",
                                    "type": "",
                                    "value": "}"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14410:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14410:16:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14410:16:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_8e2f",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "14399:3:11",
                            "type": ""
                          }
                        ],
                        "src": "14360:68:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16508:1412:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "16548:3:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_40bb",
                                  "nodeType": "YulIdentifier",
                                  "src": "16518:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16518:34:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16518:34:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "16595:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16600:1:11",
                                        "type": "",
                                        "value": "8"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16591:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16591:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "16561:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16561:42:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16561:42:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16612:59:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "16651:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "16663:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16668:1:11",
                                        "type": "",
                                        "value": "9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16659:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16659:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "16625:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16625:46:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulTypedName",
                                  "src": "16616:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16705:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "16680:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16680:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16680:31:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16720:11:11",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16730:1:11",
                                "type": "",
                                "value": "2"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "16724:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "16774:5:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "16781:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16770:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16770:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_d167",
                                  "nodeType": "YulIdentifier",
                                  "src": "16740:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16740:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16740:45:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "16828:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16835:2:11",
                                        "type": "",
                                        "value": "16"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16824:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16824:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "16794:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16794:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16794:45:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16848:62:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16887:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "16899:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16906:2:11",
                                        "type": "",
                                        "value": "17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16895:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16895:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "16861:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16861:49:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_2",
                                  "nodeType": "YulTypedName",
                                  "src": "16852:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "16944:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "16919:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16919:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16919:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "16993:5:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "17000:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16989:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16989:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_0474",
                                  "nodeType": "YulIdentifier",
                                  "src": "16959:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16959:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16959:45:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "17047:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17054:2:11",
                                        "type": "",
                                        "value": "10"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17043:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17043:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17013:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17013:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17013:45:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17067:62:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "17106:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "17118:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17125:2:11",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17114:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17114:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "17080:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17080:49:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_3",
                                  "nodeType": "YulTypedName",
                                  "src": "17071:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "17163:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "17138:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17138:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17138:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "17212:5:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "17219:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17208:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17208:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_edb9",
                                  "nodeType": "YulIdentifier",
                                  "src": "17178:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17178:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17178:45:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "17266:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17273:2:11",
                                        "type": "",
                                        "value": "17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17262:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17262:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17232:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17232:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17232:45:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17286:62:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "17325:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "17337:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17344:2:11",
                                        "type": "",
                                        "value": "18"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17333:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17333:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "17299:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17299:49:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_4",
                                  "nodeType": "YulTypedName",
                                  "src": "17290:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "17382:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "17357:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17357:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17357:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "17431:5:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "17438:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17427:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17427:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_5a0f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17397:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17397:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17397:45:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "17485:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17492:2:11",
                                        "type": "",
                                        "value": "25"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17481:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17481:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17451:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17451:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17451:45:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17505:62:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "17544:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "17556:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17563:2:11",
                                        "type": "",
                                        "value": "26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17552:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17552:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "17518:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17518:49:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_5",
                                  "nodeType": "YulTypedName",
                                  "src": "17509:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_5",
                                    "nodeType": "YulIdentifier",
                                    "src": "17601:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "17576:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17576:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17576:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "17650:5:11"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "17657:2:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17646:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17646:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_891c",
                                  "nodeType": "YulIdentifier",
                                  "src": "17616:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17616:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17616:45:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "17704:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17711:2:11",
                                        "type": "",
                                        "value": "17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17700:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17700:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17670:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17670:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17670:45:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17724:62:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value5",
                                    "nodeType": "YulIdentifier",
                                    "src": "17763:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_5",
                                        "nodeType": "YulIdentifier",
                                        "src": "17775:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17782:2:11",
                                        "type": "",
                                        "value": "18"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17771:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17771:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string_storage",
                                  "nodeType": "YulIdentifier",
                                  "src": "17737:25:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17737:49:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_6",
                                  "nodeType": "YulTypedName",
                                  "src": "17728:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "17825:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17795:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17795:36:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17795:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_6",
                                        "nodeType": "YulIdentifier",
                                        "src": "17874:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17881:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17870:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17870:13:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_8e2f",
                                  "nodeType": "YulIdentifier",
                                  "src": "17840:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17840:44:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17840:44:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17893:21:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos_6",
                                    "nodeType": "YulIdentifier",
                                    "src": "17904:5:11"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "17911:2:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "17900:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17900:14:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "17893:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_edb9dfb434f39030c7e6c0ebaca14c5292f46611913432e75654d81f7110ccf5_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_5a0f64621135531f27a699625627339d4f3757e3c959615dacead2ddd2286d1b_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_891c8a98c445fe915cd335eea8eb2435a302f46b695ab6cce63074b1689567fb_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes14_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes23_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_bytes1_t_string_memory_ptr_t_bytes1_t_bytes1__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "16444:3:11",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "16449:6:11",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "16457:6:11",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "16465:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "16473:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "16481:6:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "16489:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "16500:3:11",
                            "type": ""
                          }
                        ],
                        "src": "14433:3487:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17975:135:11",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "17985:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "18005:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "17999:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17999:12:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "17989:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "18046:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18053:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18042:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18042:16:11"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "18060:3:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "18065:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "18020:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18020:52:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18020:52:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18081:23:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "18092:3:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "18097:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "18088:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18088:16:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "18081:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_string",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "17952:5:11",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "17959:3:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "17967:3:11",
                            "type": ""
                          }
                        ],
                        "src": "17925:185:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18355:208:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "18372:3:11"
                                  },
                                  {
                                    "hexValue": "646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "18377:31:11",
                                    "type": "",
                                    "value": "data:application/json;base64,"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18365:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18365:44:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18365:44:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "18418:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "18438:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "18432:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18432:13:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "18422:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "18480:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18488:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18476:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18476:17:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "18499:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18504:2:11",
                                        "type": "",
                                        "value": "29"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18495:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18495:12:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "18509:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "18454:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18454:62:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18454:62:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "18525:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "18540:3:11"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "18545:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18536:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18536:16:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18554:2:11",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "18532:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18532:25:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "18525:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "18331:3:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "18336:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "18347:3:11",
                            "type": ""
                          }
                        ],
                        "src": "18115:448:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18616:71:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "18633:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18642:3:11",
                                        "type": "",
                                        "value": "136"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18647:32:11",
                                        "type": "",
                                        "value": "0x2261747472696275746573223a205b"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "18638:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18638:42:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18626:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18626:55:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18626:55:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_a9d6",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "18607:3:11",
                            "type": ""
                          }
                        ],
                        "src": "18568:119:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "18740:20:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "18749:3:11"
                                  },
                                  {
                                    "hexValue": "5d",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "18754:3:11",
                                    "type": "",
                                    "value": "]"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18742:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18742:16:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18742:16:11"
                            }
                          ]
                        },
                        "name": "abi_encode_stringliteral_b36b",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "18731:3:11",
                            "type": ""
                          }
                        ],
                        "src": "18692:68:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "20130:957:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "20147:3:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20156:3:11",
                                        "type": "",
                                        "value": "193"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20161:18:11",
                                        "type": "",
                                        "value": "0x3d913730b6b2911d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "20152:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20152:28:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20140:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20140:41:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20140:41:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "20201:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20206:1:11",
                                        "type": "",
                                        "value": "8"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20197:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20197:11:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20214:3:11",
                                        "type": "",
                                        "value": "249"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20219:2:11",
                                        "type": "",
                                        "value": "17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "20210:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20210:12:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20190:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20190:33:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20190:33:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20232:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "20252:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "20246:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20246:13:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "20236:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "20294:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20302:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20290:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20290:17:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "20313:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20318:1:11",
                                        "type": "",
                                        "value": "9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20309:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20309:11:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "20322:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "20268:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20268:61:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20268:61:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20338:26:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "20352:3:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "20357:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "20348:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20348:16:11"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "20342:2:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20384:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20388:1:11",
                                        "type": "",
                                        "value": "9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20380:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20380:10:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20396:3:11",
                                        "type": "",
                                        "value": "242"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20401:4:11",
                                        "type": "",
                                        "value": "2187"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "20392:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20392:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20373:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20373:34:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20373:34:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20427:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20431:2:11",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20423:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20423:11:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20440:3:11",
                                        "type": "",
                                        "value": "145"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20445:30:11",
                                        "type": "",
                                        "value": "0x113232b9b1b934b83a34b7b7111d"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "20436:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20436:40:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "20416:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20416:61:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20416:61:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20520:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20524:2:11",
                                        "type": "",
                                        "value": "25"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20516:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20516:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "20486:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20486:42:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20486:42:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20537:51:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "20568:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20580:2:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20584:2:11",
                                        "type": "",
                                        "value": "26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20576:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20576:11:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "20550:17:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20550:38:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_1",
                                  "nodeType": "YulTypedName",
                                  "src": "20541:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "20622:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "20597:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20597:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20597:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20671:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20678:1:11",
                                        "type": "",
                                        "value": "2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20667:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20667:13:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_0474",
                                  "nodeType": "YulIdentifier",
                                  "src": "20637:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20637:44:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20637:44:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20724:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20731:2:11",
                                        "type": "",
                                        "value": "10"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20720:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20720:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_6e9f",
                                  "nodeType": "YulIdentifier",
                                  "src": "20690:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20690:45:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20690:45:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20744:54:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "20775:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "20787:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20794:2:11",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20783:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20783:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "20757:17:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20757:41:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_2",
                                  "nodeType": "YulTypedName",
                                  "src": "20748:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "20832:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral",
                                  "nodeType": "YulIdentifier",
                                  "src": "20807:24:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20807:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20807:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "20881:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20888:1:11",
                                        "type": "",
                                        "value": "2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20877:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20877:13:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_a9d6",
                                  "nodeType": "YulIdentifier",
                                  "src": "20847:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20847:44:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20847:44:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "20900:54:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "20931:6:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "20943:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20950:2:11",
                                        "type": "",
                                        "value": "17"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20939:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20939:14:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "20913:17:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20913:41:11"
                              },
                              "variables": [
                                {
                                  "name": "pos_3",
                                  "nodeType": "YulTypedName",
                                  "src": "20904:5:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "20993:5:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_b36b",
                                  "nodeType": "YulIdentifier",
                                  "src": "20963:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "20963:36:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "20963:36:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "21042:5:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21049:1:11",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21038:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21038:13:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_stringliteral_8e2f",
                                  "nodeType": "YulIdentifier",
                                  "src": "21008:29:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21008:44:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21008:44:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21061:20:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "21072:5:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21079:1:11",
                                    "type": "",
                                    "value": "2"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21068:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21068:13:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21061:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_a9d6c84473de3f3a866c16d436066b8d4df325a647d2d3a768ffba45df210f3c_t_string_memory_ptr_t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes14_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_string_memory_ptr_t_bytes1_t_bytes1__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "20082:3:11",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "20087:6:11",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "20095:6:11",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "20103:6:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "20111:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "20122:3:11",
                            "type": ""
                          }
                        ],
                        "src": "18765:2322:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21321:182:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21338:3:11"
                                  },
                                  {
                                    "hexValue": "4e46542023",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "21343:7:11",
                                    "type": "",
                                    "value": "NFT #"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21331:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21331:20:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21331:20:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "21360:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "21380:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "21374:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21374:13:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "21364:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "21422:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21430:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21418:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21418:17:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21441:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21446:1:11",
                                        "type": "",
                                        "value": "5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21437:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21437:11:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "21450:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "21396:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21396:61:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21396:61:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21466:31:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21481:3:11"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "21486:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21477:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21477:16:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21495:1:11",
                                    "type": "",
                                    "value": "5"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21473:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21473:24:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21466:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_ced59f21625b6897a57b2eeb7821d625b97c7c05b34bbd66b713a22d6477d4c9_t_string_memory_ptr__to_t_bytes5_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21297:3:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21302:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "21313:3:11",
                            "type": ""
                          }
                        ],
                        "src": "21092:411:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21738:191:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "21755:3:11"
                                  },
                                  {
                                    "hexValue": "4e4654204d656d6265722023",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "21760:14:11",
                                    "type": "",
                                    "value": "NFT Member #"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21748:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21748:27:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21748:27:11"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "21784:27:11",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "21804:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "21798:5:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21798:13:11"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "21788:6:11",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "21846:6:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21854:4:11",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21842:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21842:17:11"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21865:3:11"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21870:2:11",
                                        "type": "",
                                        "value": "12"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21861:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21861:12:11"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "21875:6:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "21820:21:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21820:62:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21820:62:11"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "21891:32:11",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "21906:3:11"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "21911:6:11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "21902:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21902:16:11"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21920:2:11",
                                    "type": "",
                                    "value": "12"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "21898:3:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21898:25:11"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "21891:3:11"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_069451256e9c303da8ca9e1bc2b0169a5b7887e42aded86f386bd8602908e76a_t_string_memory_ptr__to_t_bytes12_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "21714:3:11",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "21719:6:11",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "21730:3:11",
                            "type": ""
                          }
                        ],
                        "src": "21508:421:11"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "21966:95:11",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "21983:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21990:3:11",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "21995:10:11",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "21986:3:11"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "21986:20:11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "21976:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "21976:31:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "21976:31:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22023:1:11",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22026:4:11",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "22016:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22016:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22016:15:11"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22047:1:11",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "22050:4:11",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "22040:6:11"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "22040:15:11"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "22040:15:11"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "21934:127:11"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_2311() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xc0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_array$_t_uint8_$dyn_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := calldataload(src)\n            if iszero(eq(value, and(value, 0xff)))\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string_memory_ptr(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string_memory_ptr(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_struct$_ContractURI_$2877_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0xc0) { revert(0, 0) }\n        let value := allocate_memory_2311()\n        let offset_1 := calldataload(_2)\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(value, abi_decode_bytes(add(_2, offset_1), dataEnd))\n        let offset_2 := calldataload(add(_2, 32))\n        if gt(offset_2, _1) { revert(0, 0) }\n        mstore(add(value, 32), abi_decode_bytes(add(_2, offset_2), dataEnd))\n        let offset_3 := calldataload(add(_2, 64))\n        if gt(offset_3, _1) { revert(0, 0) }\n        mstore(add(value, 64), abi_decode_bytes(add(_2, offset_3), dataEnd))\n        let offset_4 := calldataload(add(_2, 96))\n        if gt(offset_4, _1) { revert(0, 0) }\n        mstore(add(value, 96), abi_decode_bytes(add(_2, offset_4), dataEnd))\n        let offset_5 := calldataload(add(_2, 128))\n        if gt(offset_5, _1) { revert(0, 0) }\n        mstore(add(value, 128), abi_decode_bytes(add(_2, offset_5), dataEnd))\n        let offset_6 := calldataload(add(_2, 160))\n        if gt(offset_6, _1) { revert(0, 0) }\n        mstore(add(value, 160), abi_decode_bytes(add(_2, offset_6), dataEnd))\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_uint8_$dyn_memory_ptr__to_t_array$_t_uint8_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_struct$_ContractURI_$2877_memory_ptr__to_t_struct$_ContractURI_$2877_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let memberValue0 := mload(value0)\n        mstore(add(headStart, 32), 0xc0)\n        let tail_1 := abi_encode_string_memory_ptr(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value0, 32))\n        let _1 := not(31)\n        mstore(add(headStart, 64), add(sub(tail_1, headStart), _1))\n        let tail_2 := abi_encode_string_memory_ptr(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value0, 64))\n        mstore(add(headStart, 96), add(sub(tail_2, headStart), _1))\n        let tail_3 := abi_encode_string_memory_ptr(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value0, 96))\n        mstore(add(headStart, 128), add(sub(tail_3, headStart), _1))\n        let tail_4 := abi_encode_string_memory_ptr(memberValue0_3, tail_3)\n        let memberValue0_4 := mload(add(value0, 128))\n        mstore(add(headStart, 160), add(sub(tail_4, headStart), _1))\n        let tail_5 := abi_encode_string_memory_ptr(memberValue0_4, tail_4)\n        let memberValue0_5 := mload(add(value0, 160))\n        mstore(add(headStart, 0xc0), add(sub(tail_5, headStart), _1))\n        tail := abi_encode_string_memory_ptr(memberValue0_5, tail_5)\n    }\n    function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string_memory_ptr(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_stringliteral_40bb(pos)\n    {\n        mstore(pos, shl(193, 0x3d913730b6b2911d))\n    }\n    function abi_encode_stringliteral_6e9f(pos)\n    { mstore(pos, shl(249, 17)) }\n    function abi_encode_string_storage(value, pos) -> ret\n    {\n        let slotValue := sload(value)\n        let length := extract_byte_array_length(slotValue)\n        let _1 := 1\n        switch and(slotValue, _1)\n        case 0 {\n            mstore(pos, and(slotValue, not(255)))\n            ret := add(pos, mul(length, iszero(iszero(length))))\n        }\n        case 1 {\n            mstore(0, value)\n            let _2 := 0x20\n            let dataPos := keccak256(0, _2)\n            let i := 0\n            for { } lt(i, length) { i := add(i, _2) }\n            {\n                mstore(add(pos, i), sload(dataPos))\n                dataPos := add(dataPos, _1)\n            }\n            ret := add(pos, length)\n        }\n    }\n    function abi_encode_stringliteral(pos)\n    { mstore(pos, shl(242, 2187)) }\n    function abi_encode_stringliteral_d167(pos)\n    {\n        mstore(pos, shl(145, 0x113232b9b1b934b83a34b7b7111d))\n    }\n    function abi_encode_stringliteral_0474(pos)\n    {\n        mstore(pos, shl(193, 0x1134b6b0b3b2911d))\n    }\n    function abi_encode_stringliteral_edb9(pos)\n    {\n        mstore(pos, shl(137, 0x1132bc3a32b93730b62634b735911d))\n    }\n    function abi_encode_stringliteral_5a0f(pos)\n    {\n        mstore(pos, 0x2273656c6c65724665654261736973506f696e7473223a000000000000000000)\n    }\n    function abi_encode_stringliteral_891c(pos)\n    {\n        mstore(pos, shl(137, 0x113332b2a932b1b4b834b2b73a111d))\n    }\n    function abi_encode_stringliteral_8e2f(pos)\n    { mstore(pos, \"}\") }\n    function abi_encode_tuple_packed_t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_edb9dfb434f39030c7e6c0ebaca14c5292f46611913432e75654d81f7110ccf5_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_5a0f64621135531f27a699625627339d4f3757e3c959615dacead2ddd2286d1b_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_891c8a98c445fe915cd335eea8eb2435a302f46b695ab6cce63074b1689567fb_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_storage_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes14_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes23_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_bytes1_t_string_memory_ptr_t_bytes1_t_bytes1__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        abi_encode_stringliteral_40bb(pos)\n        abi_encode_stringliteral_6e9f(add(pos, 8))\n        let pos_1 := abi_encode_string_storage(value0, add(pos, 9))\n        abi_encode_stringliteral(pos_1)\n        let _1 := 2\n        abi_encode_stringliteral_d167(add(pos_1, _1))\n        abi_encode_stringliteral_6e9f(add(pos_1, 16))\n        let pos_2 := abi_encode_string_storage(value1, add(pos_1, 17))\n        abi_encode_stringliteral(pos_2)\n        abi_encode_stringliteral_0474(add(pos_2, _1))\n        abi_encode_stringliteral_6e9f(add(pos_2, 10))\n        let pos_3 := abi_encode_string_storage(value2, add(pos_2, 11))\n        abi_encode_stringliteral(pos_3)\n        abi_encode_stringliteral_edb9(add(pos_3, _1))\n        abi_encode_stringliteral_6e9f(add(pos_3, 17))\n        let pos_4 := abi_encode_string_storage(value3, add(pos_3, 18))\n        abi_encode_stringliteral(pos_4)\n        abi_encode_stringliteral_5a0f(add(pos_4, _1))\n        abi_encode_stringliteral_6e9f(add(pos_4, 25))\n        let pos_5 := abi_encode_string_storage(value4, add(pos_4, 26))\n        abi_encode_stringliteral(pos_5)\n        abi_encode_stringliteral_891c(add(pos_5, _1))\n        abi_encode_stringliteral_6e9f(add(pos_5, 17))\n        let pos_6 := abi_encode_string_storage(value5, add(pos_5, 18))\n        abi_encode_stringliteral_6e9f(pos_6)\n        abi_encode_stringliteral_8e2f(add(pos_6, 1))\n        end := add(pos_6, _1)\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        copy_memory_to_memory(add(value, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, \"data:application/json;base64,\")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 29), length)\n        end := add(add(pos, length), 29)\n    }\n    function abi_encode_stringliteral_a9d6(pos)\n    {\n        mstore(pos, shl(136, 0x2261747472696275746573223a205b))\n    }\n    function abi_encode_stringliteral_b36b(pos)\n    { mstore(pos, \"]\") }\n    function abi_encode_tuple_packed_t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_a9d6c84473de3f3a866c16d436066b8d4df325a647d2d3a768ffba45df210f3c_t_string_memory_ptr_t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes14_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes8_t_bytes1_t_string_memory_ptr_t_bytes2_t_bytes15_t_string_memory_ptr_t_bytes1_t_bytes1__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, shl(193, 0x3d913730b6b2911d))\n        mstore(add(pos, 8), shl(249, 17))\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 9), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 9), shl(242, 2187))\n        mstore(add(_1, 11), shl(145, 0x113232b9b1b934b83a34b7b7111d))\n        abi_encode_stringliteral_6e9f(add(_1, 25))\n        let pos_1 := abi_encode_string(value1, add(_1, 26))\n        abi_encode_stringliteral(pos_1)\n        abi_encode_stringliteral_0474(add(pos_1, 2))\n        abi_encode_stringliteral_6e9f(add(pos_1, 10))\n        let pos_2 := abi_encode_string(value2, add(pos_1, 11))\n        abi_encode_stringliteral(pos_2)\n        abi_encode_stringliteral_a9d6(add(pos_2, 2))\n        let pos_3 := abi_encode_string(value3, add(pos_2, 17))\n        abi_encode_stringliteral_b36b(pos_3)\n        abi_encode_stringliteral_8e2f(add(pos_3, 1))\n        end := add(pos_3, 2)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_ced59f21625b6897a57b2eeb7821d625b97c7c05b34bbd66b713a22d6477d4c9_t_string_memory_ptr__to_t_bytes5_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, \"NFT #\")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 5), length)\n        end := add(add(pos, length), 5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_069451256e9c303da8ca9e1bc2b0169a5b7887e42aded86f386bd8602908e76a_t_string_memory_ptr__to_t_bytes12_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, \"NFT Member #\")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 12), length)\n        end := add(add(pos, length), 12)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n}",
                  "id": 11,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600436106101665760003560e01c806357e30f44116100d1578063ae70ed131161008a578063f04e283e11610064578063f04e283e14610418578063f06796161461042b578063f2fde38b1461044b578063fee81cf41461045e57600080fd5b8063ae70ed13146103b8578063d12bcb12146103d8578063d7533f02146103fa57600080fd5b806357e30f4414610317578063715018a614610337578063725fa09c1461033f5780637359e41f146103545780638da5cb5b14610381578063a4cd86961461039a57600080fd5b80632de94807116101235780632de9480714610247578063316df61e146102785780633ee6fa92146102a55780634a4ee7b1146102c5578063514e62fc146102d857806354d1f13d1461030f57600080fd5b806313a661ed1461016b578063183a4f6e1461019e5780631c10893f146101b35780631cd64df4146101c6578063256929621461020d57806325c28b4a14610215575b600080fd5b34801561017757600080fd5b5061018b61018636600461127a565b61048f565b6040519081526020015b60405180910390f35b6101b16101ac366004611333565b6104c2565b005b6101b16101c1366004611368565b6104cf565b3480156101d257600080fd5b506101fd6101e1366004611368565b60609190911b638b78c6d8176000908152602090205481161490565b6040519015158152602001610195565b6101b16104f8565b34801561022157600080fd5b506001546001600160a01b03165b6040516001600160a01b039091168152602001610195565b34801561025357600080fd5b5061018b610262366004611392565b60601b638b78c6d8176000908152602090205490565b34801561028457600080fd5b50610298610293366004611432565b610549565b60405161019591906114cb565b3480156102b157600080fd5b506101b16102c0366004611392565b6105c5565b6101b16102d3366004611368565b610635565b3480156102e457600080fd5b506101fd6102f3366004611368565b60609190911b638b78c6d8176000908152602090205416151590565b6101b161065a565b34801561032357600080fd5b506101b16103323660046114de565b610697565b6101b1610761565b34801561034b57600080fd5b506102986107af565b34801561036057600080fd5b5061037461036f366004611333565b61080f565b60405161019591906115ff565b34801561038d57600080fd5b50638b78c6d8195461022f565b3480156103a657600080fd5b506000546001600160a01b031661022f565b3480156103c457600080fd5b506101b16103d3366004611392565b610857565b3480156103e457600080fd5b506103ed6108c0565b6040516101959190611646565b34801561040657600080fd5b506040516202a3008152602001610195565b6101b1610426366004611392565b610c77565b34801561043757600080fd5b506102986104463660046116fe565b610cf9565b6101b1610459366004611392565b610e42565b34801561046a57600080fd5b5061018b610479366004611392565b60601b63389a75e1176000908152602090205490565b600060208201825160051b81015b8082146104bb57600160ff8351161b8317925060208201915061049d565b5050919050565b6104cc3382610ea9565b50565b638b78c6d8195433146104ea576382b429006000526004601cfd5b6104f48282610efa565b5050565b60006202a30067ffffffffffffffff164201905063389a75e13360601b1760005280602060002055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6000546040516318b6fb0f60e11b81526060916001600160a01b03169063316df61e9061057a9085906004016114cb565b600060405180830381865afa158015610597573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105bf919081019061176b565b92915050565b638b78c6d8195433146105e0576382b429006000526004601cfd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f10c0817f42b2182992d55b707430b153f12e59d7e54a975bfec790497dd7f63f906020015b60405180910390a150565b638b78c6d819543314610650576382b429006000526004601cfd5b6104f48282610ea9565b63389a75e13360601b176000526000602060002055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b638b78c6d8195433146106b2576382b429006000526004601cfd5b8051819060029081906106c59082611862565b50602082015160018201906106da9082611862565b50604082015160028201906106ef9082611862565b50606082015160038201906107049082611862565b50608082015160048201906107199082611862565b5060a0820151600582019061072e9082611862565b509050507f03a10335d532669eac03b3b7e4ce44aff7f8cb14b7aa397c653fdcb40ae06bec8160405161062a9190611646565b638b78c6d81954331461077c576382b429006000526004601cfd5b6000337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36000638b78c6d81955565b6040516060906107eb906107d790600290600390600490600590600690600790602001611995565b604051602081830303815290604052610f46565b6040516020016107fb9190611b1b565b604051602081830303815290604052905090565b606060206040510160005b8082526001841660051b820191508360011c9350831561083c5760010161081a565b5060405191508060405260208201810360051c825250919050565b638b78c6d819543314610872576382b429006000526004601cfd5b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c2715cb5e4b39dd4af38ac12bb292a030fb6a063dbd5467ed49da665bcaa9739060200161062a565b6108f96040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b60026040518060c0016040529081600082018054610916906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610942906117d9565b801561098f5780601f106109645761010080835404028352916020019161098f565b820191906000526020600020905b81548152906001019060200180831161097257829003601f168201915b505050505081526020016001820180546109a8906117d9565b80601f01602080910402602001604051908101604052809291908181526020018280546109d4906117d9565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b50505050508152602001600282018054610a3a906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a66906117d9565b8015610ab35780601f10610a8857610100808354040283529160200191610ab3565b820191906000526020600020905b815481529060010190602001808311610a9657829003601f168201915b50505050508152602001600382018054610acc906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610af8906117d9565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b50505050508152602001600482018054610b5e906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a906117d9565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b50505050508152602001600582018054610bf0906117d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1c906117d9565b8015610c695780601f10610c3e57610100808354040283529160200191610c69565b820191906000526020600020905b815481529060010190602001808311610c4c57829003601f168201915b505050505081525050905090565b638b78c6d819543314610c92576382b429006000526004601cfd5b8060601b60601c905063389a75e18160601b1760005260206000208054421115610cc457636f5e88186000526004601cfd5b600081555080337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b600080546040516318b6fb0f60e11b8152606092916001600160a01b03169063316df61e90610d2c9087906004016114cb565b600060405180830381865afa158015610d49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d71919081019061176b565b60015460405163f6559a6b60e01b81529192506000916001600160a01b039091169063f6559a6b90610da79087906004016114cb565b600060405180830381865afa158015610dc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dec919081019061176b565b9050610e18610dfa87610f54565b610e0388610f85565b84846040516020016107d79493929190611b60565b604051602001610e289190611b1b565b604051602081830303815290604052925050509392505050565b638b78c6d819543314610e5d576382b429006000526004601cfd5b6001600160a01b031680610e7957637448fbae6000526004601cfd5b80337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3638b78c6d81955565b638b78c6d88260601b176000526020600020805482811681189050808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b638b78c6d88260601b17600052602060002081815417808255808460601b60601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b60606105bf82600080610fa0565b6060610f5f8261109f565b604051602001610f6f9190611c51565b6040516020818303038152906040529050919050565b6060610f908261109f565b604051602001610f6f9190611c7e565b606083518015611097576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526102308515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f03603f52602083018181015b6003880197508751603f8160121c16518353603f81600c1c16516001840153603f8160061c16516002840153603f811651600384015350600482019150808210611010576003840686801561107057600182148215150185038752611088565b603d821515850353603d6001831460011b8503538487525b5050601f01601f191660405250505b509392505050565b606060006110ac83611132565b600101905060008167ffffffffffffffff8111156110cc576110cc61120a565b6040519080825280601f01601f1916602001820160405280156110f6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461110057509392505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106111715772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061119d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106111bb57662386f26fc10000830492506010015b6305f5e10083106111d3576305f5e100830492506008015b61271083106111e757612710830492506004015b606483106111f9576064830492506002015b600a83106105bf5760010192915050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156112435761124361120a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156112725761127261120a565b604052919050565b6000602080838503121561128d57600080fd5b823567ffffffffffffffff808211156112a557600080fd5b818501915085601f8301126112b957600080fd5b8135818111156112cb576112cb61120a565b8060051b91506112dc848301611249565b81815291830184019184810190888411156112f657600080fd5b938501935b83851015611327578435925060ff831683146113175760008081fd5b82825293850193908501906112fb565b98975050505050505050565b60006020828403121561134557600080fd5b5035919050565b80356001600160a01b038116811461136357600080fd5b919050565b6000806040838503121561137b57600080fd5b6113848361134c565b946020939093013593505050565b6000602082840312156113a457600080fd5b6113ad8261134c565b9392505050565b600067ffffffffffffffff8211156113ce576113ce61120a565b50601f01601f191660200190565b600082601f8301126113ed57600080fd5b81356114006113fb826113b4565b611249565b81815284602083860101111561141557600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561144457600080fd5b813567ffffffffffffffff81111561145b57600080fd5b611467848285016113dc565b949350505050565b60005b8381101561148a578181015183820152602001611472565b83811115611499576000848401525b50505050565b600081518084526114b781602086016020860161146f565b601f01601f19169290920160200192915050565b6020815260006113ad602083018461149f565b6000602082840312156114f057600080fd5b813567ffffffffffffffff8082111561150857600080fd5b9083019060c0828603121561151c57600080fd5b611524611220565b82358281111561153357600080fd5b61153f878286016113dc565b82525060208301358281111561155457600080fd5b611560878286016113dc565b60208301525060408301358281111561157857600080fd5b611584878286016113dc565b60408301525060608301358281111561159c57600080fd5b6115a8878286016113dc565b6060830152506080830135828111156115c057600080fd5b6115cc878286016113dc565b60808301525060a0830135828111156115e457600080fd5b6115f0878286016113dc565b60a08301525095945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561163a57835160ff168352928401929184019160010161161b565b50909695505050505050565b602081526000825160c0602084015261166260e084018261149f565b90506020840151601f1980858403016040860152611680838361149f565b9250604086015191508085840301606086015261169d838361149f565b925060608601519150808584030160808601526116ba838361149f565b925060808601519150808584030160a08601526116d7838361149f565b925060a08601519150808584030160c0860152506116f5828261149f565b95945050505050565b60008060006060848603121561171357600080fd5b83359250602084013567ffffffffffffffff8082111561173257600080fd5b61173e878388016113dc565b9350604086013591508082111561175457600080fd5b50611761868287016113dc565b9150509250925092565b60006020828403121561177d57600080fd5b815167ffffffffffffffff81111561179457600080fd5b8201601f810184136117a557600080fd5b80516117b36113fb826113b4565b8181528560208385010111156117c857600080fd5b6116f582602083016020860161146f565b600181811c908216806117ed57607f821691505b60208210810361180d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561185d57600081815260208120601f850160051c8101602086101561183a5750805b601f850160051c820191505b8181101561185957828155600101611846565b5050505b505050565b815167ffffffffffffffff81111561187c5761187c61120a565b6118908161188a84546117d9565b84611813565b602080601f8311600181146118c557600084156118ad5750858301515b600019600386901b1c1916600185901b178555611859565b600085815260208120601f198616915b828110156118f4578886015182559484019460019091019084016118d5565b50858210156119125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000815461192f816117d9565b60018281168015611947576001811461195c5761198b565b60ff198416875282151583028701945061198b565b8560005260208060002060005b858110156119825781548a820152908401908201611969565b50505082870194505b5050505092915050565b673d913730b6b2911d60c11b8152601160f91b600882015260006119bc6009830189611922565b61088b60f21b815260026119e28183016d113232b9b1b934b83a34b7b7111d60911b9052565b601160f91b60108301526119f9601183018a611922565b61088b60f21b81529150671134b6b0b3b2911d60c11b82820152601160f91b600a830152611a2a600b830189611922565b61088b60f21b815291506e1132bc3a32b93730b62634b735911d60891b82820152601160f91b6011830152611a626012830188611922565b61088b60f21b815291507f2273656c6c65724665654261736973506f696e7473223a00000000000000000082820152601160f91b6019830152611aa8601a830187611922565b61088b60f21b815291506e113332b2a932b1b4b834b2b73a111d60891b82820152601160f91b6011830152611ae06012830186611922565b601160f91b8152607d60f81b6001820152019998505050505050505050565b60008151611b1181856020860161146f565b9290920192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611b5381601d85016020870161146f565b91909101601d0192915050565b673d913730b6b2911d60c11b8152601160f91b60088201528451600090611b8e816009850160208a0161146f565b61088b60f21b6009918401918201526d113232b9b1b934b83a34b7b7111d60911b600b820152611bc460198201601160f91b9052565b611bd1601a820187611aff565b61088b60f21b81529050671134b6b0b3b2911d60c11b6002820152601160f91b600a820152611c03600b820186611aff565b61088b60f21b815290506e2261747472696275746573223a205b60881b6002820152611c326011820185611aff565b605d60f81b8152607d60f81b6001820152600201979650505050505050565b644e4654202360d81b815260008251611c7181600585016020870161146f565b9190910160050192915050565b6b4e4654204d656d626572202360a01b815260008251611ca581600c85016020870161146f565b91909101600c019291505056fea2646970667358221220ec76de9b5dcc4faa18cbaab2d7f0cf4c0e350702b56482f4af0506aded925ad964736f6c634300080f0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x166 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57E30F44 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xAE70ED13 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xF04E283E GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xF04E283E EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0xF0679616 EQ PUSH2 0x42B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0xFEE81CF4 EQ PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAE70ED13 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD12BCB12 EQ PUSH2 0x3D8 JUMPI DUP1 PUSH4 0xD7533F02 EQ PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x57E30F44 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0x725FA09C EQ PUSH2 0x33F JUMPI DUP1 PUSH4 0x7359E41F EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0xA4CD8696 EQ PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2DE94807 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x2DE94807 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0x316DF61E EQ PUSH2 0x278 JUMPI DUP1 PUSH4 0x3EE6FA92 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0x4A4EE7B1 EQ PUSH2 0x2C5 JUMPI DUP1 PUSH4 0x514E62FC EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x54D1F13D EQ PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13A661ED EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x183A4F6E EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x1C10893F EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x1CD64DF4 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x25692962 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x25C28B4A EQ PUSH2 0x215 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x186 CALLDATASIZE PUSH1 0x4 PUSH2 0x127A JUMP JUMPDEST PUSH2 0x48F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x1333 JUMP JUMPDEST PUSH2 0x4C2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B1 PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH2 0x4CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x195 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x4F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x195 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x253 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x262 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x298 PUSH2 0x293 CALLDATASIZE PUSH1 0x4 PUSH2 0x1432 JUMP JUMPDEST PUSH2 0x549 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x14CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH2 0x2C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0x5C5 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x2D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH2 0x635 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1368 JUMP JUMPDEST PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL PUSH4 0x8B78C6D8 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x65A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH2 0x332 CALLDATASIZE PUSH1 0x4 PUSH2 0x14DE JUMP JUMPDEST PUSH2 0x697 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x761 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x298 PUSH2 0x7AF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x374 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x1333 JUMP JUMPDEST PUSH2 0x80F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x15FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH4 0x8B78C6D8 NOT SLOAD PUSH2 0x22F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH2 0x3D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0x857 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3ED PUSH2 0x8C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x1646 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2A300 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x195 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0xC77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x298 PUSH2 0x446 CALLDATASIZE PUSH1 0x4 PUSH2 0x16FE JUMP JUMPDEST PUSH2 0xCF9 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x459 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH2 0xE42 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x1392 JUMP JUMPDEST PUSH1 0x60 SHL PUSH4 0x389A75E1 OR PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP3 MLOAD PUSH1 0x5 SHL DUP2 ADD JUMPDEST DUP1 DUP3 EQ PUSH2 0x4BB JUMPI PUSH1 0x1 PUSH1 0xFF DUP4 MLOAD AND SHL DUP4 OR SWAP3 POP PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x49D JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4CC CALLER DUP3 PUSH2 0xEA9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x4EA JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x4F4 DUP3 DUP3 PUSH2 0xEFA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2A300 PUSH8 0xFFFFFFFFFFFFFFFF AND TIMESTAMP ADD SWAP1 POP PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE DUP1 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xDBF36A107DA19E49527A7176A1BABF963B4B0FF8CDE35EE35D6CD8F1F9AC7E1D PUSH1 0x0 DUP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18B6FB0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x316DF61E SWAP1 PUSH2 0x57A SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x14CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x597 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x5BF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x5E0 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x10C0817F42B2182992D55B707430B153F12E59D7E54A975BFEC790497DD7F63F SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x650 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH2 0x4F4 DUP3 DUP3 PUSH2 0xEA9 JUMP JUMPDEST PUSH4 0x389A75E1 CALLER PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x0 KECCAK256 SSTORE CALLER PUSH32 0xFA7B8EAB7DA67F412CC9575ED43464468F9BFBAE89D1675917346CA6D8FE3C92 PUSH1 0x0 DUP1 LOG2 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x6B2 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 MLOAD DUP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 SWAP1 PUSH2 0x6C5 SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SWAP1 PUSH2 0x6DA SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x2 DUP3 ADD SWAP1 PUSH2 0x6EF SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD SWAP1 PUSH2 0x704 SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x719 SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD SWAP1 PUSH2 0x72E SWAP1 DUP3 PUSH2 0x1862 JUMP JUMPDEST POP SWAP1 POP POP PUSH32 0x3A10335D532669EAC03B3B7E4CE44AFF7F8CB14B7AA397C653FDCB40AE06BEC DUP2 PUSH1 0x40 MLOAD PUSH2 0x62A SWAP2 SWAP1 PUSH2 0x1646 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x77C JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH1 0x0 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x7EB SWAP1 PUSH2 0x7D7 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x6 SWAP1 PUSH1 0x7 SWAP1 PUSH1 0x20 ADD PUSH2 0x1995 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0xF46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7FB SWAP2 SWAP1 PUSH2 0x1B1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x20 PUSH1 0x40 MLOAD ADD PUSH1 0x0 JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1 DUP5 AND PUSH1 0x5 SHL DUP3 ADD SWAP2 POP DUP4 PUSH1 0x1 SHR SWAP4 POP DUP4 ISZERO PUSH2 0x83C JUMPI PUSH1 0x1 ADD PUSH2 0x81A JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 POP DUP1 PUSH1 0x40 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SUB PUSH1 0x5 SHR DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0x872 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x3C2715CB5E4B39DD4AF38AC12BB292A030FB6A063DBD5467ED49DA665BCAA973 SWAP1 PUSH1 0x20 ADD PUSH2 0x62A JUMP JUMPDEST PUSH2 0x8F9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD DUP1 SLOAD PUSH2 0x916 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x942 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x98F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x964 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x98F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x972 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH2 0x9A8 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x9D4 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xA21 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9F6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA21 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA04 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH2 0xA3A SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xA66 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xAB3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA88 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xAB3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA96 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH2 0xACC SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xAF8 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB45 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB1A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB45 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB28 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH2 0xB5E SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB8A SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xBD7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBAC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBD7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBBA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH2 0xBF0 SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xC1C SWAP1 PUSH2 0x17D9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC69 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC3E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC69 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC4C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xC92 JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 PUSH1 0x60 SHL PUSH1 0x60 SHR SWAP1 POP PUSH4 0x389A75E1 DUP2 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD TIMESTAMP GT ISZERO PUSH2 0xCC4 JUMPI PUSH4 0x6F5E8818 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x0 DUP2 SSTORE POP DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x18B6FB0F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x60 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x316DF61E SWAP1 PUSH2 0xD2C SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x14CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xD71 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xF6559A6B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xF6559A6B SWAP1 PUSH2 0xDA7 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x14CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xDEC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST SWAP1 POP PUSH2 0xE18 PUSH2 0xDFA DUP8 PUSH2 0xF54 JUMP JUMPDEST PUSH2 0xE03 DUP9 PUSH2 0xF85 JUMP JUMPDEST DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7D7 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE28 SWAP2 SWAP1 PUSH2 0x1B1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 NOT SLOAD CALLER EQ PUSH2 0xE5D JUMPI PUSH4 0x82B42900 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xE79 JUMPI PUSH4 0x7448FBAE PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x1C REVERT JUMPDEST DUP1 CALLER PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x0 DUP1 LOG3 PUSH4 0x8B78C6D8 NOT SSTORE JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP1 SLOAD DUP3 DUP2 AND DUP2 XOR SWAP1 POP DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH4 0x8B78C6D8 DUP3 PUSH1 0x60 SHL OR PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 DUP2 DUP2 SLOAD OR DUP1 DUP3 SSTORE DUP1 DUP5 PUSH1 0x60 SHL PUSH1 0x60 SHR PUSH32 0x715AD5CE61FC9595C7B415289D59CF203F23A94FA06F04AF7E489A0A76E1FE26 PUSH1 0x0 DUP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5BF DUP3 PUSH1 0x0 DUP1 PUSH2 0xFA0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF5F DUP3 PUSH2 0x109F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF6F SWAP2 SWAP1 PUSH2 0x1C51 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF90 DUP3 PUSH2 0x109F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF6F SWAP2 SWAP1 PUSH2 0x1C7E JUMP JUMPDEST PUSH1 0x60 DUP4 MLOAD DUP1 ISZERO PUSH2 0x1097 JUMPI PUSH1 0x3 PUSH1 0x2 DUP3 ADD DIV PUSH1 0x2 SHL PUSH1 0x40 MLOAD SWAP3 POP PUSH32 0x4142434445464748494A4B4C4D4E4F505152535455565758595A616263646566 PUSH1 0x1F MSTORE PUSH2 0x230 DUP6 ISZERO MUL PUSH32 0x6768696A6B6C6D6E6F707172737475767778797A303132333435363738392D5F SUB PUSH1 0x3F MSTORE PUSH1 0x20 DUP4 ADD DUP2 DUP2 ADD JUMPDEST PUSH1 0x3 DUP9 ADD SWAP8 POP DUP8 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND MLOAD DUP4 MSTORE8 PUSH1 0x3F DUP2 PUSH1 0xC SHR AND MLOAD PUSH1 0x1 DUP5 ADD MSTORE8 PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND MLOAD PUSH1 0x2 DUP5 ADD MSTORE8 PUSH1 0x3F DUP2 AND MLOAD PUSH1 0x3 DUP5 ADD MSTORE8 POP PUSH1 0x4 DUP3 ADD SWAP2 POP DUP1 DUP3 LT PUSH2 0x1010 JUMPI PUSH1 0x3 DUP5 MOD DUP7 DUP1 ISZERO PUSH2 0x1070 JUMPI PUSH1 0x1 DUP3 EQ DUP3 ISZERO ISZERO ADD DUP6 SUB DUP8 MSTORE PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x3D DUP3 ISZERO ISZERO DUP6 SUB MSTORE8 PUSH1 0x3D PUSH1 0x1 DUP4 EQ PUSH1 0x1 SHL DUP6 SUB MSTORE8 DUP5 DUP8 MSTORE JUMPDEST POP POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x40 MSTORE POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x10AC DUP4 PUSH2 0x1132 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10CC JUMPI PUSH2 0x10CC PUSH2 0x120A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH1 0x0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0x1100 JUMPI POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0x1171 JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x119D JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x11BB JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x11D3 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x11E7 JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x11F9 JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x5BF JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1243 JUMPI PUSH2 0x1243 PUSH2 0x120A JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1272 JUMPI PUSH2 0x1272 PUSH2 0x120A JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x128D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x12A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x12B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x120A JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x12DC DUP5 DUP4 ADD PUSH2 0x1249 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x1327 JUMPI DUP5 CALLDATALOAD SWAP3 POP PUSH1 0xFF DUP4 AND DUP4 EQ PUSH2 0x1317 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x12FB JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x137B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1384 DUP4 PUSH2 0x134C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13AD DUP3 PUSH2 0x134C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x13CE JUMPI PUSH2 0x13CE PUSH2 0x120A JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x13ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1400 PUSH2 0x13FB DUP3 PUSH2 0x13B4 JUMP JUMPDEST PUSH2 0x1249 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1415 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x145B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1467 DUP5 DUP3 DUP6 ADD PUSH2 0x13DC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x148A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1472 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1499 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x14B7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x146F JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x13AD PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x149F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xC0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x151C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1524 PUSH2 0x1220 JUMP JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1533 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x153F DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1560 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1584 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x159C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15A8 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x15C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15CC DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x15E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15F0 DUP8 DUP3 DUP7 ADD PUSH2 0x13DC JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x163A JUMPI DUP4 MLOAD PUSH1 0xFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x161B JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH1 0xC0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1662 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x149F JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1F NOT DUP1 DUP6 DUP5 SUB ADD PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x1680 DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x169D DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x16BA DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x16D7 DUP4 DUP4 PUSH2 0x149F JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP6 DUP5 SUB ADD PUSH1 0xC0 DUP7 ADD MSTORE POP PUSH2 0x16F5 DUP3 DUP3 PUSH2 0x149F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1713 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1732 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x173E DUP8 DUP4 DUP9 ADD PUSH2 0x13DC JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1761 DUP7 DUP3 DUP8 ADD PUSH2 0x13DC JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x177D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1794 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x17A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x17B3 PUSH2 0x13FB DUP3 PUSH2 0x13B4 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x17C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16F5 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x146F JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x17ED JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x180D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x185D JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x183A JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1859 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1846 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x187C JUMPI PUSH2 0x187C PUSH2 0x120A JUMP JUMPDEST PUSH2 0x1890 DUP2 PUSH2 0x188A DUP5 SLOAD PUSH2 0x17D9 JUMP JUMPDEST DUP5 PUSH2 0x1813 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x18C5 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x18AD JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x1859 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x18F4 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x18D5 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x1912 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH2 0x192F DUP2 PUSH2 0x17D9 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP2 AND DUP1 ISZERO PUSH2 0x1947 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x195C JUMPI PUSH2 0x198B JUMP JUMPDEST PUSH1 0xFF NOT DUP5 AND DUP8 MSTORE DUP3 ISZERO ISZERO DUP4 MUL DUP8 ADD SWAP5 POP PUSH2 0x198B JUMP JUMPDEST DUP6 PUSH1 0x0 MSTORE PUSH1 0x20 DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1982 JUMPI DUP2 SLOAD DUP11 DUP3 ADD MSTORE SWAP1 DUP5 ADD SWAP1 DUP3 ADD PUSH2 0x1969 JUMP JUMPDEST POP POP POP DUP3 DUP8 ADD SWAP5 POP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH8 0x3D913730B6B2911D PUSH1 0xC1 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x8 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x19BC PUSH1 0x9 DUP4 ADD DUP10 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE PUSH1 0x2 PUSH2 0x19E2 DUP2 DUP4 ADD PUSH14 0x113232B9B1B934B83A34B7B7111D PUSH1 0x91 SHL SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x10 DUP4 ADD MSTORE PUSH2 0x19F9 PUSH1 0x11 DUP4 ADD DUP11 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH8 0x1134B6B0B3B2911D PUSH1 0xC1 SHL DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0xA DUP4 ADD MSTORE PUSH2 0x1A2A PUSH1 0xB DUP4 ADD DUP10 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH15 0x1132BC3A32B93730B62634B735911D PUSH1 0x89 SHL DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x11 DUP4 ADD MSTORE PUSH2 0x1A62 PUSH1 0x12 DUP4 ADD DUP9 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH32 0x2273656C6C65724665654261736973506F696E7473223A000000000000000000 DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x19 DUP4 ADD MSTORE PUSH2 0x1AA8 PUSH1 0x1A DUP4 ADD DUP8 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP2 POP PUSH15 0x113332B2A932B1B4B834B2B73A111D PUSH1 0x89 SHL DUP3 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x11 DUP4 ADD MSTORE PUSH2 0x1AE0 PUSH1 0x12 DUP4 ADD DUP7 PUSH2 0x1922 JUMP JUMPDEST PUSH1 0x11 PUSH1 0xF9 SHL DUP2 MSTORE PUSH1 0x7D PUSH1 0xF8 SHL PUSH1 0x1 DUP3 ADD MSTORE ADD SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH2 0x1B11 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x146F JUMP JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x646174613A6170706C69636174696F6E2F6A736F6E3B6261736536342C000000 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1B53 DUP2 PUSH1 0x1D DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x146F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1D ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH8 0x3D913730B6B2911D PUSH1 0xC1 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0x8 DUP3 ADD MSTORE DUP5 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1B8E DUP2 PUSH1 0x9 DUP6 ADD PUSH1 0x20 DUP11 ADD PUSH2 0x146F JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL PUSH1 0x9 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE PUSH14 0x113232B9B1B934B83A34B7B7111D PUSH1 0x91 SHL PUSH1 0xB DUP3 ADD MSTORE PUSH2 0x1BC4 PUSH1 0x19 DUP3 ADD PUSH1 0x11 PUSH1 0xF9 SHL SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1BD1 PUSH1 0x1A DUP3 ADD DUP8 PUSH2 0x1AFF JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP1 POP PUSH8 0x1134B6B0B3B2911D PUSH1 0xC1 SHL PUSH1 0x2 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0xF9 SHL PUSH1 0xA DUP3 ADD MSTORE PUSH2 0x1C03 PUSH1 0xB DUP3 ADD DUP7 PUSH2 0x1AFF JUMP JUMPDEST PUSH2 0x88B PUSH1 0xF2 SHL DUP2 MSTORE SWAP1 POP PUSH15 0x2261747472696275746573223A205B PUSH1 0x88 SHL PUSH1 0x2 DUP3 ADD MSTORE PUSH2 0x1C32 PUSH1 0x11 DUP3 ADD DUP6 PUSH2 0x1AFF JUMP JUMPDEST PUSH1 0x5D PUSH1 0xF8 SHL DUP2 MSTORE PUSH1 0x7D PUSH1 0xF8 SHL PUSH1 0x1 DUP3 ADD MSTORE PUSH1 0x2 ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH5 0x4E46542023 PUSH1 0xD8 SHL DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C71 DUP2 PUSH1 0x5 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x146F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x5 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH12 0x4E4654204D656D6265722023 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1CA5 DUP2 PUSH1 0xC DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x146F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0xC ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC PUSH23 0xDE9B5DCC4FAA18CBAAB2D7F0CF4C0E350702B56482F4AF SDIV MOD 0xAD 0xED SWAP3 GAS 0xD9 PUSH5 0x736F6C6343 STOP ADDMOD 0xF STOP CALLER ",
              "sourceMap": "184:543:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14792:489:2;;;;;;;;;;-1:-1:-1;14792:489:2;;;;;:::i;:::-;;:::i;:::-;;;1948:25:11;;;1936:2;1921:18;14792:489:2;;;;;;;;12111:109;;;;;;:::i;:::-;;:::i;:::-;;11572:123;;;;;;:::i;:::-;;:::i;13831:382::-;;;;;;;;;;-1:-1:-1;13831:382:2;;;;;:::i;:::-;14014:2;14010:13;;;;14025:15;14007:34;13910:11;13994:48;;;14175:4;14159:21;;14153:28;14149:40;;14146:51;;13831:382;;;;2771:14:11;;2764:22;2746:41;;2734:2;2719:18;13831:382:2;2606:187:11;9265:545:2;;;:::i;2032:96:5:-;;;;;;;;;;-1:-1:-1;2104:19:5;;-1:-1:-1;;;;;2104:19:5;2032:96;;;-1:-1:-1;;;;;2962:32:11;;;2944:51;;2932:2;2917:18;2032:96:5;2798:203:11;14261:298:2;;;;;;;;;;-1:-1:-1;14261:298:2;;;;;:::i;:::-;14427:2;14423:13;14438:15;14420:34;14321:13;14407:48;;;14537:4;14521:21;;14515:28;;14261:298;2243:138:5;;;;;;;;;;-1:-1:-1;2243:138:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4545:150::-;;;;;;;;;;-1:-1:-1;4545:150:5;;;;;:::i;:::-;;:::i;11840:125:2:-;;;;;;:::i;:::-;;:::i;13320:449::-;;;;;;;;;;-1:-1:-1;13320:449:2;;;;;:::i;:::-;13502:2;13498:13;;;;13513:15;13495:34;13398:11;13482:48;;;13737:4;13721:21;;13715:28;13711:40;13704:48;13697:56;;13320:449;9892:401;;;:::i;4699:154:5:-;;;;;;;;;;-1:-1:-1;4699:154:5;;;;;:::i;:::-;;:::i;8795:308:2:-;;;:::i;3354:1045:5:-;;;;;;;;;;;;;:::i;15516:1113:2:-;;;;;;;;;;-1:-1:-1;15516:1113:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12465:148::-;;;;;;;;;;-1:-1:-1;;;12570:27:2;12465:148;;1933:95:5;;;;;;;;;;-1:-1:-1;1984:7:5;2006:17;-1:-1:-1;;;;;2006:17:5;1933:95;;4403:138;;;;;;;;;;-1:-1:-1;4403:138:5;;;;;:::i;:::-;;:::i;2132:107::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13151::2:-;;;;;;;;;;-1:-1:-1;13151:107:2;;13242:9;8598:50:11;;8586:2;8571:18;13151:107:2;8454:200:11;10480:950:2;;;;;;:::i;:::-;;:::i;2385:965:5:-;;;;;;;;;;-1:-1:-1;2385:965:5;;;;;:::i;:::-;;:::i;8084:646:2:-;;;;;;:::i;:::-;;:::i;12716:344::-;;;;;;;;;;-1:-1:-1;12716:344:2;;;;;:::i;:::-;12914:2;12910:21;12933:19;12907:46;12803:14;12894:60;;;13038:4;13022:21;;13016:28;;12716:344;14792:489;14865:13;14973:4;14963:8;14959:19;15083:8;15077:15;15074:1;15070:23;15067:1;15063:31;15138:127;15158:3;15155:1;15152:10;15138:127;;15248:1;15241:4;15237:1;15231:8;15227:19;15223:27;15216:5;15213:38;15204:47;;15178:4;15175:1;15171:12;15166:17;;15138:127;;;15142:2;;14792:489;;;:::o;12111:109::-;12182:31;12195:10;12207:5;12182:12;:31::i;:::-;12111:109;:::o;11572:123::-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;11664:24:::1;11676:4;11682:5;11664:11;:24::i;:::-;11572:123:::0;;:::o;9265:545::-;9358:15;13242:9;9376:45;;:15;:45;9358:63;;9556:19;9545:8;9541:2;9537:17;9534:42;9528:4;9521:56;9624:7;9617:4;9611;9601:21;9594:38;9771:8;9724:45;9721:1;9718;9713:67;9444:350;9265:545::o;2243:138:5:-;2344:17;;2330:46;;-1:-1:-1;;;2330:46:5;;2302:13;;-1:-1:-1;;;;;2344:17:5;;2330:39;;:46;;2370:5;;2330:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2330:46:5;;;;;;;;;;;;:::i;:::-;2323:53;2243:138;-1:-1:-1;;2243:138:5:o;4545:150::-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;4615:19:5::1;:33:::0;;-1:-1:-1;;;;;;4615:33:5::1;-1:-1:-1::0;;;;;4615:33:5;::::1;::::0;;::::1;::::0;;;4659:31:::1;::::0;2944:51:11;;;4659:31:5::1;::::0;2932:2:11;2917:18;4659:31:5::1;;;;;;;;4545:150:::0;:::o;11840:125:2:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;11933:25:::1;11946:4;11952:5;11933:12;:25::i;9892:401::-:0;10073:19;10062:8;10058:2;10054:17;10051:42;10045:4;10038:56;10137:1;10130:4;10124;10114:21;10107:32;10268:8;10222:44;10219:1;10216;10211:66;9892:401::o;4699:154:5:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;4780:26:5;;4795:11;;4780:12:::1;::::0;;;:26:::1;::::0;:12;:26:::1;:::i;:::-;-1:-1:-1::0;4780:26:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;4780:26:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;4780:26:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;4780:26:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;4780:26:5::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;4817:31;4836:11;4817:31;;;;;;:::i;8795:308:2:-:0;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;9005:1:::1;8995:8;8955:38;8952:1;8949::::0;8944:63:::1;9085:1;-1:-1:-1::0;;9056:31:2;8795:308::o;3354:1045:5:-;3590:760;;3417:17;;3542:834;;3590:760;;3670:12;;3782:24;;3895:18;;4009:25;;4138:33;;4267:25;;3590:760;;;:::i;:::-;;;;;;;;;;;;;3542:13;:834::i;:::-;3471:915;;;;;;;;:::i;:::-;;;;;;;;;;;;;3442:952;;3354:1045;:::o;15516:1113:2:-;15579:23;15717:4;15710;15704:11;15700:22;15953:1;15938:395;16008:1;16003:3;15996:14;16198:1;16191:5;16187:13;16184:1;16180:21;16175:3;16171:31;16164:38;;16235:5;16232:1;16228:13;16219:22;;16303:5;16293:26;16312:5;16293:26;15973:1;15966:9;15938:395;;;15942:14;16427:4;16421:11;16409:23;;16494:3;16488:4;16481:17;16605:4;16595:8;16591:19;16586:3;16582:29;16579:1;16575:37;16565:8;16558:55;;15516:1113;;;:::o;4403:138:5:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;4469:17:5::1;:29:::0;;-1:-1:-1;;;;;;4469:29:5::1;-1:-1:-1::0;;;;;4469:29:5;::::1;::::0;;::::1;::::0;;;4509:27:::1;::::0;2944:51:11;;;4509:27:5::1;::::0;2932:2:11;2917:18;4509:27:5::1;2798:203:11::0;2132:107:5;2189:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2189:18:5;2222:12;2215:19;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2132:107;:::o;10480:950:2:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;10675:12:::1;10671:2;10667:21;10663:2;10659:30;10643:46;;10796:19;10781:12;10777:2;10773:21;10770:46;10764:4;10757:60;10866:4;10860;10850:21;10972:12;10966:19;10953:11;10950:36;10947:156;;;11018:35;11012:4;11005:49;11084:4;11078;11071:18;10947:156;11180:1;11166:12;11159:23;;11310:12;11300:8;11260:38;11257:1;11254::::0;11249:74:::1;-1:-1:-1::0;;11372:42:2;10480:950::o;2385:965:5:-;2543:20;2580:17;;2566:47;;-1:-1:-1;;;2566:47:5;;2518:17;;2543:20;-1:-1:-1;;;;;2580:17:5;;2566:39;;:47;;2606:6;;2566:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2566:47:5;;;;;;;;;;;;:::i;:::-;2658:19;;2643:49;;-1:-1:-1;;;2643:49:5;;2543:70;;-1:-1:-1;2619:21:5;;-1:-1:-1;;;;;2658:19:5;;;;2643:41;;:49;;2685:6;;2643:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2643:49:5;;;;;;;;;;;;:::i;:::-;2619:73;;2798:529;2926:19;2937:7;2926:10;:19::i;:::-;3040:26;3058:7;3040:17;:26::i;:::-;3155:6;3236:7;2846:455;;;;;;;;;;;:::i;2798:529::-;2727:610;;;;;;;;:::i;:::-;;;;;;;;;;;;;2698:647;;;;2385:965;;;;;:::o;8084:646:2:-;-1:-1:-1;;17022:27:2;17012:8;17009:41;16999:162;;17083:28;17077:4;17070:42;17142:4;17136;17129:18;16999:162;-1:-1:-1;;;;;8247:26:2;;8348:142:::1;;8399:41;8393:4;8386:55;8471:4;8465;8458:18;8348:142;8618:8;8608;8568:38;8565:1;8562::::0;8557:70:::1;-1:-1:-1::0;;8676:38:2;8084:646::o;7020:794::-;7190:15;7183:4;7179:2;7175:13;7172:34;7166:4;7159:48;7252:4;7246;7236:21;7335:8;7329:15;7575:5;7561:12;7557:24;7543:12;7539:43;7523:59;;7654:8;7644;7637:26;7789:8;7781:4;7777:2;7773:13;7769:2;7765:22;7733:30;7730:1;7727;7722:76;;;7020:794;;:::o;6303:581::-;6472:15;6465:4;6461:2;6457:13;6454:34;6448:4;6441:48;6534:4;6528;6518:21;6652:5;6641:8;6635:15;6632:26;6724:8;6714;6707:26;6859:8;6851:4;6847:2;6843:13;6839:2;6835:22;6803:30;6800:1;6797;6792:76;;;6303:581;;:::o;3669:132:3:-;3727:20;3768:26;3775:4;3781:5;3788;3768:6;:26::i;401:153:10:-;471:13;522:26;539:8;522:16;:26::i;:::-;499:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;492:57;;401:153;;;:::o;558:167::-;635:13;693:26;710:8;693:16;:26::i;:::-;663:57;;;;;;;;:::i;599:2935:3:-;688:20;767:4;761:11;789:10;786:2732;;;989:1;985;973:10;969:18;965:26;962:1;958:34;1100:4;1094:11;1084:21;;1472:34;1466:4;1459:48;1599:6;1588:8;1581:16;1577:29;1541:34;1537:70;1531:4;1524:84;1714:4;1706:6;1702:17;1756:13;1751:3;1747:23;1881:687;1933:1;1927:4;1923:12;1915:20;;1995:4;1989:11;2145:4;2137:5;2133:2;2129:14;2125:25;2119:32;2110:3;2098:54;2220:4;2212:5;2208:2;2204:14;2200:25;2194:32;2190:1;2185:3;2181:11;2173:54;2295:4;2287:5;2284:1;2279:14;2275:25;2269:32;2265:1;2260:3;2256:11;2248:54;2370:4;2362:5;2350:25;2344:32;2340:1;2335:3;2331:11;2323:54;;2435:1;2430:3;2426:11;2419:18;;2535:3;2530;2527:12;1881:687;2517:33;2611:1;2595:18;;2638:9;2664:409;;;;3238:1;3235;3232:8;3227:1;3220:9;3213:17;3209:32;3194:13;3190:52;3182:6;3175:68;2631:630;;2664:409;2818:4;2812:1;2805:9;2798:17;2793:3;2789:27;2781:42;2912:4;2906:1;2903;2900:8;2897:1;2893:16;2888:3;2884:26;2876:41;3041:13;3033:6;3026:29;2631:630;-1:-1:-1;;3499:2:3;3481:12;-1:-1:-1;;3477:26:3;3471:4;3464:40;-1:-1:-1;;786:2732:3;;599:2935;;;;;:::o;415:696:0:-;471:13;520:14;537:17;548:5;537:10;:17::i;:::-;557:1;537:21;520:38;;572:20;606:6;595:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;595:18:0;-1:-1:-1;572:41:0;-1:-1:-1;733:28:0;;;749:2;733:28;788:280;-1:-1:-1;;819:5:0;-1:-1:-1;;;953:2:0;942:14;;937:30;819:5;924:44;1012:2;1003:11;;;-1:-1:-1;1032:21:0;788:280;1032:21;-1:-1:-1;1088:6:0;415:696;-1:-1:-1;;;415:696:0:o;9889:890:1:-;9942:7;;-1:-1:-1;;;10017:15:1;;10013:99;;-1:-1:-1;;;10052:15:1;;;-1:-1:-1;10095:2:1;10085:12;10013:99;10138:6;10129:5;:15;10125:99;;10173:6;10164:15;;;-1:-1:-1;10207:2:1;10197:12;10125:99;10250:6;10241:5;:15;10237:99;;10285:6;10276:15;;;-1:-1:-1;10319:2:1;10309:12;10237:99;10362:5;10353;:14;10349:96;;10396:5;10387:14;;;-1:-1:-1;10429:1:1;10419:11;10349:96;10471:5;10462;:14;10458:96;;10505:5;10496:14;;;-1:-1:-1;10538:1:1;10528:11;10458:96;10580:5;10571;:14;10567:96;;10614:5;10605:14;;;-1:-1:-1;10647:1:1;10637:11;10567:96;10689:5;10680;:14;10676:64;;10724:1;10714:11;10766:6;9889:890;-1:-1:-1;;9889:890:1:o;14:127:11:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;295:18;280:34;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:275::-;475:2;469:9;540:2;521:13;;-1:-1:-1;;517:27:11;505:40;;575:18;560:34;;596:22;;;557:62;554:88;;;622:18;;:::i;:::-;658:2;651:22;404:275;;-1:-1:-1;404:275:11:o;684:1113::-;766:6;797:2;840;828:9;819:7;815:23;811:32;808:52;;;856:1;853;846:12;808:52;896:9;883:23;925:18;966:2;958:6;955:14;952:34;;;982:1;979;972:12;952:34;1020:6;1009:9;1005:22;995:32;;1065:7;1058:4;1054:2;1050:13;1046:27;1036:55;;1087:1;1084;1077:12;1036:55;1123:2;1110:16;1145:2;1141;1138:10;1135:36;;;1151:18;;:::i;:::-;1197:2;1194:1;1190:10;1180:20;;1220:28;1244:2;1240;1236:11;1220:28;:::i;:::-;1282:15;;;1352:11;;;1348:20;;;1313:12;;;;1380:19;;;1377:39;;;1412:1;1409;1402:12;1377:39;1436:11;;;;1456:311;1472:6;1467:3;1464:15;1456:311;;;1552:3;1539:17;1526:30;;1600:4;1593:5;1589:16;1582:5;1579:27;1569:125;;1648:1;1677:2;1673;1666:14;1569:125;1707:18;;;1489:12;;;;1745;;;;1456:311;;;1786:5;684:1113;-1:-1:-1;;;;;;;;684:1113:11:o;1984:180::-;2043:6;2096:2;2084:9;2075:7;2071:23;2067:32;2064:52;;;2112:1;2109;2102:12;2064:52;-1:-1:-1;2135:23:11;;1984:180;-1:-1:-1;1984:180:11:o;2169:173::-;2237:20;;-1:-1:-1;;;;;2286:31:11;;2276:42;;2266:70;;2332:1;2329;2322:12;2266:70;2169:173;;;:::o;2347:254::-;2415:6;2423;2476:2;2464:9;2455:7;2451:23;2447:32;2444:52;;;2492:1;2489;2482:12;2444:52;2515:29;2534:9;2515:29;:::i;:::-;2505:39;2591:2;2576:18;;;;2563:32;;-1:-1:-1;;;2347:254:11:o;3006:186::-;3065:6;3118:2;3106:9;3097:7;3093:23;3089:32;3086:52;;;3134:1;3131;3124:12;3086:52;3157:29;3176:9;3157:29;:::i;:::-;3147:39;3006:186;-1:-1:-1;;;3006:186:11:o;3197:::-;3245:4;3278:18;3270:6;3267:30;3264:56;;;3300:18;;:::i;:::-;-1:-1:-1;3366:2:11;3345:15;-1:-1:-1;;3341:29:11;3372:4;3337:40;;3197:186::o;3388:462::-;3430:5;3483:3;3476:4;3468:6;3464:17;3460:27;3450:55;;3501:1;3498;3491:12;3450:55;3537:6;3524:20;3568:48;3584:31;3612:2;3584:31;:::i;:::-;3568:48;:::i;:::-;3641:2;3632:7;3625:19;3687:3;3680:4;3675:2;3667:6;3663:15;3659:26;3656:35;3653:55;;;3704:1;3701;3694:12;3653:55;3769:2;3762:4;3754:6;3750:17;3743:4;3734:7;3730:18;3717:55;3817:1;3792:16;;;3810:4;3788:27;3781:38;;;;3796:7;3388:462;-1:-1:-1;;;3388:462:11:o;3855:320::-;3923:6;3976:2;3964:9;3955:7;3951:23;3947:32;3944:52;;;3992:1;3989;3982:12;3944:52;4032:9;4019:23;4065:18;4057:6;4054:30;4051:50;;;4097:1;4094;4087:12;4051:50;4120:49;4161:7;4152:6;4141:9;4137:22;4120:49;:::i;:::-;4110:59;3855:320;-1:-1:-1;;;;3855:320:11:o;4180:258::-;4252:1;4262:113;4276:6;4273:1;4270:13;4262:113;;;4352:11;;;4346:18;4333:11;;;4326:39;4298:2;4291:10;4262:113;;;4393:6;4390:1;4387:13;4384:48;;;4428:1;4419:6;4414:3;4410:16;4403:27;4384:48;;4180:258;;;:::o;4443:269::-;4496:3;4534:5;4528:12;4561:6;4556:3;4549:19;4577:63;4633:6;4626:4;4621:3;4617:14;4610:4;4603:5;4599:16;4577:63;:::i;:::-;4694:2;4673:15;-1:-1:-1;;4669:29:11;4660:39;;;;4701:4;4656:50;;4443:269;-1:-1:-1;;4443:269:11:o;4717:231::-;4866:2;4855:9;4848:21;4829:4;4886:56;4938:2;4927:9;4923:18;4915:6;4886:56;:::i;4953:1476::-;5041:6;5094:2;5082:9;5073:7;5069:23;5065:32;5062:52;;;5110:1;5107;5100:12;5062:52;5150:9;5137:23;5179:18;5220:2;5212:6;5209:14;5206:34;;;5236:1;5233;5226:12;5206:34;5259:22;;;;5315:4;5297:16;;;5293:27;5290:47;;;5333:1;5330;5323:12;5290:47;5359:22;;:::i;:::-;5419:2;5406:16;5447:2;5437:8;5434:16;5431:36;;;5463:1;5460;5453:12;5431:36;5490:44;5526:7;5515:8;5511:2;5507:17;5490:44;:::i;:::-;5483:5;5476:59;;5581:2;5577;5573:11;5560:25;5610:2;5600:8;5597:16;5594:36;;;5626:1;5623;5616:12;5594:36;5662:44;5698:7;5687:8;5683:2;5679:17;5662:44;:::i;:::-;5657:2;5650:5;5646:14;5639:68;;5753:2;5749;5745:11;5732:25;5782:2;5772:8;5769:16;5766:36;;;5798:1;5795;5788:12;5766:36;5834:44;5870:7;5859:8;5855:2;5851:17;5834:44;:::i;:::-;5829:2;5822:5;5818:14;5811:68;;5925:2;5921;5917:11;5904:25;5954:2;5944:8;5941:16;5938:36;;;5970:1;5967;5960:12;5938:36;6006:44;6042:7;6031:8;6027:2;6023:17;6006:44;:::i;:::-;6001:2;5994:5;5990:14;5983:68;;6097:3;6093:2;6089:12;6076:26;6127:2;6117:8;6114:16;6111:36;;;6143:1;6140;6133:12;6111:36;6180:44;6216:7;6205:8;6201:2;6197:17;6180:44;:::i;:::-;6174:3;6167:5;6163:15;6156:69;;6271:3;6267:2;6263:12;6250:26;6301:2;6291:8;6288:16;6285:36;;;6317:1;6314;6307:12;6285:36;6354:44;6390:7;6379:8;6375:2;6371:17;6354:44;:::i;:::-;6348:3;6337:15;;6330:69;-1:-1:-1;6341:5:11;4953:1476;-1:-1:-1;;;;;4953:1476:11:o;6434:639::-;6601:2;6653:21;;;6723:13;;6626:18;;;6745:22;;;6572:4;;6601:2;6824:15;;;;6798:2;6783:18;;;6572:4;6867:180;6881:6;6878:1;6875:13;6867:180;;;6946:13;;6961:4;6942:24;6930:37;;7022:15;;;;6987:12;;;;6903:1;6896:9;6867:180;;;-1:-1:-1;7064:3:11;;6434:639;-1:-1:-1;;;;;;6434:639:11:o;7078:1371::-;7265:2;7254:9;7247:21;7228:4;7303:6;7297:13;7346:4;7341:2;7330:9;7326:18;7319:32;7374:63;7432:3;7421:9;7417:19;7403:12;7374:63;:::i;:::-;7360:77;;7486:2;7478:6;7474:15;7468:22;7513:2;7509:7;7580:2;7568:9;7560:6;7556:22;7552:31;7547:2;7536:9;7532:18;7525:59;7607:52;7652:6;7636:14;7607:52;:::i;:::-;7593:66;;7708:2;7700:6;7696:15;7690:22;7668:44;;7776:2;7764:9;7756:6;7752:22;7748:31;7743:2;7732:9;7728:18;7721:59;7803:52;7848:6;7832:14;7803:52;:::i;:::-;7789:66;;7904:2;7896:6;7892:15;7886:22;7864:44;;7973:2;7961:9;7953:6;7949:22;7945:31;7939:3;7928:9;7924:19;7917:60;8000:52;8045:6;8029:14;8000:52;:::i;:::-;7986:66;;8101:3;8093:6;8089:16;8083:23;8061:45;;8171:2;8159:9;8151:6;8147:22;8143:31;8137:3;8126:9;8122:19;8115:60;8198:52;8243:6;8227:14;8198:52;:::i;:::-;8184:66;;8299:3;8291:6;8287:16;8281:23;8259:45;;8370:2;8358:9;8350:6;8346:22;8342:31;8335:4;8324:9;8320:20;8313:61;;8391:52;8436:6;8420:14;8391:52;:::i;:::-;8383:60;7078:1371;-1:-1:-1;;;;;7078:1371:11:o;8659:607::-;8754:6;8762;8770;8823:2;8811:9;8802:7;8798:23;8794:32;8791:52;;;8839:1;8836;8829:12;8791:52;8875:9;8862:23;8852:33;;8936:2;8925:9;8921:18;8908:32;8959:18;9000:2;8992:6;8989:14;8986:34;;;9016:1;9013;9006:12;8986:34;9039:49;9080:7;9071:6;9060:9;9056:22;9039:49;:::i;:::-;9029:59;;9141:2;9130:9;9126:18;9113:32;9097:48;;9170:2;9160:8;9157:16;9154:36;;;9186:1;9183;9176:12;9154:36;;9209:51;9252:7;9241:8;9230:9;9226:24;9209:51;:::i;:::-;9199:61;;;8659:607;;;;;:::o;9505:635::-;9585:6;9638:2;9626:9;9617:7;9613:23;9609:32;9606:52;;;9654:1;9651;9644:12;9606:52;9687:9;9681:16;9720:18;9712:6;9709:30;9706:50;;;9752:1;9749;9742:12;9706:50;9775:22;;9828:4;9820:13;;9816:27;-1:-1:-1;9806:55:11;;9857:1;9854;9847:12;9806:55;9886:2;9880:9;9911:48;9927:31;9955:2;9927:31;:::i;9911:48::-;9982:2;9975:5;9968:17;10022:7;10017:2;10012;10008;10004:11;10000:20;9997:33;9994:53;;;10043:1;10040;10033:12;9994:53;10056:54;10107:2;10102;10095:5;10091:14;10086:2;10082;10078:11;10056:54;:::i;10145:380::-;10224:1;10220:12;;;;10267;;;10288:61;;10342:4;10334:6;10330:17;10320:27;;10288:61;10395:2;10387:6;10384:14;10364:18;10361:38;10358:161;;10441:10;10436:3;10432:20;10429:1;10422:31;10476:4;10473:1;10466:15;10504:4;10501:1;10494:15;10358:161;;10145:380;;;:::o;10656:545::-;10758:2;10753:3;10750:11;10747:448;;;10794:1;10819:5;10815:2;10808:17;10864:4;10860:2;10850:19;10934:2;10922:10;10918:19;10915:1;10911:27;10905:4;10901:38;10970:4;10958:10;10955:20;10952:47;;;-1:-1:-1;10993:4:11;10952:47;11048:2;11043:3;11039:12;11036:1;11032:20;11026:4;11022:31;11012:41;;11103:82;11121:2;11114:5;11111:13;11103:82;;;11166:17;;;11147:1;11136:13;11103:82;;;11107:3;;;10747:448;10656:545;;;:::o;11377:1352::-;11503:3;11497:10;11530:18;11522:6;11519:30;11516:56;;;11552:18;;:::i;:::-;11581:97;11671:6;11631:38;11663:4;11657:11;11631:38;:::i;:::-;11625:4;11581:97;:::i;:::-;11733:4;;11797:2;11786:14;;11814:1;11809:663;;;;12516:1;12533:6;12530:89;;;-1:-1:-1;12585:19:11;;;12579:26;12530:89;-1:-1:-1;;11334:1:11;11330:11;;;11326:24;11322:29;11312:40;11358:1;11354:11;;;11309:57;12632:81;;11779:944;;11809:663;10603:1;10596:14;;;10640:4;10627:18;;-1:-1:-1;;11845:20:11;;;11963:236;11977:7;11974:1;11971:14;11963:236;;;12066:19;;;12060:26;12045:42;;12158:27;;;;12126:1;12114:14;;;;11993:19;;11963:236;;;11967:3;12227:6;12218:7;12215:19;12212:201;;;12288:19;;;12282:26;-1:-1:-1;;12371:1:11;12367:14;;;12383:3;12363:24;12359:37;12355:42;12340:58;12325:74;;12212:201;-1:-1:-1;;;;;12459:1:11;12443:14;;;12439:22;12426:36;;-1:-1:-1;11377:1352:11:o;12926:722::-;12976:3;13017:5;13011:12;13046:36;13072:9;13046:36;:::i;:::-;13101:1;13118:18;;;13145:133;;;;13292:1;13287:355;;;;13111:531;;13145:133;-1:-1:-1;;13178:24:11;;13166:37;;13251:14;;13244:22;13232:35;;13223:45;;;-1:-1:-1;13145:133:11;;13287:355;13318:5;13315:1;13308:16;13347:4;13392:2;13389:1;13379:16;13417:1;13431:165;13445:6;13442:1;13439:13;13431:165;;;13523:14;;13510:11;;;13503:35;13566:16;;;;13460:10;;13431:165;;;13435:3;;;13625:6;13620:3;13616:16;13609:23;;13111:531;;;;;12926:722;;;;:::o;14433:3487::-;-1:-1:-1;;;12792:41:11;;-1:-1:-1;;;16600:1:11;16591:11;;12894:25;16500:3;16625:46;16668:1;16663:3;16659:11;16651:6;16625:46;:::i;:::-;-1:-1:-1;;;13698:27:11;;16730:1;16740:45;16781:2;16774:5;16770:14;-1:-1:-1;;;13790:53:11;;13732:117;16740:45;-1:-1:-1;;;16835:2:11;16824:14;;12894:25;16861:49;16906:2;16899:5;16895:14;16887:6;16861:49;:::i;:::-;-1:-1:-1;;;13698:27:11;;16848:62;-1:-1:-1;;;;16989:14:11;;;13912:41;-1:-1:-1;;;17054:2:11;17043:14;;12894:25;17080:49;17125:2;17118:5;17114:14;17106:6;17080:49;:::i;:::-;-1:-1:-1;;;13698:27:11;;17067:62;-1:-1:-1;;;;17208:14:11;;;14022:55;-1:-1:-1;;;17273:2:11;17262:14;;12894:25;17299:49;17344:2;17337:5;17333:14;17325:6;17299:49;:::i;:::-;-1:-1:-1;;;13698:27:11;;17286:62;-1:-1:-1;14158:66:11;17427:14;;;14146:79;-1:-1:-1;;;17492:2:11;17481:14;;12894:25;17518:49;17563:2;17556:5;17552:14;17544:6;17518:49;:::i;:::-;-1:-1:-1;;;13698:27:11;;17505:62;-1:-1:-1;;;;17646:14:11;;;14294:55;-1:-1:-1;;;17711:2:11;17700:14;;12894:25;17737:49;17782:2;17775:5;17771:14;17763:6;17737:49;:::i;:::-;-1:-1:-1;;;12894:25:11;;-1:-1:-1;;;17881:1:11;17870:13;;14410:16;17900:14;;;-1:-1:-1;;;;;;;;;14433:3487:11:o;17925:185::-;17967:3;18005:5;17999:12;18020:52;18065:6;18060:3;18053:4;18046:5;18042:16;18020:52;:::i;:::-;18088:16;;;;;17925:185;-1:-1:-1;;17925:185:11:o;18115:448::-;18377:31;18372:3;18365:44;18347:3;18438:6;18432:13;18454:62;18509:6;18504:2;18499:3;18495:12;18488:4;18480:6;18476:17;18454:62;:::i;:::-;18536:16;;;;18554:2;18532:25;;18115:448;-1:-1:-1;;18115:448:11:o;18765:2322::-;-1:-1:-1;;;20140:41:11;;-1:-1:-1;;;20206:1:11;20197:11;;20190:33;20246:13;;-1:-1:-1;;20268:61:11;20246:13;20318:1;20309:11;;20302:4;20290:17;;20268:61;:::i;:::-;-1:-1:-1;;;20388:1:11;20348:16;;;20380:10;;;20373:34;-1:-1:-1;;;20431:2:11;20423:11;;20416:61;20486:42;20524:2;20516:11;;-1:-1:-1;;;12894:25:11;;12844:77;20486:42;20550:38;20584:2;20580;20576:11;20568:6;20550:38;:::i;:::-;-1:-1:-1;;;13698:27:11;;20537:51;-1:-1:-1;;;;20678:1:11;20667:13;;13912:41;-1:-1:-1;;;20731:2:11;20720:14;;12894:25;20757:41;20794:2;20787:5;20783:14;20775:6;20757:41;:::i;:::-;-1:-1:-1;;;13698:27:11;;20744:54;-1:-1:-1;;;;20888:1:11;20877:13;;18626:55;20913:41;20950:2;20943:5;20939:14;20931:6;20913:41;:::i;:::-;-1:-1:-1;;;18742:16:11;;-1:-1:-1;;;21049:1:11;21038:13;;14410:16;21079:1;21068:13;;;-1:-1:-1;;;;;;;18765:2322:11:o;21092:411::-;-1:-1:-1;;;21338:3:11;21331:20;21313:3;21380:6;21374:13;21396:61;21450:6;21446:1;21441:3;21437:11;21430:4;21422:6;21418:17;21396:61;:::i;:::-;21477:16;;;;21495:1;21473:24;;21092:411;-1:-1:-1;;21092:411:11:o;21508:421::-;-1:-1:-1;;;21755:3:11;21748:27;21730:3;21804:6;21798:13;21820:62;21875:6;21870:2;21865:3;21861:12;21854:4;21846:6;21842:17;21820:62;:::i;:::-;21902:16;;;;21920:2;21898:25;;21508:421;-1:-1:-1;;21508:421:11:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1480000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "cancelOwnershipHandover()": "6454",
                "completeOwnershipHandover(address)": "28583",
                "constructContractURI()": "infinite",
                "constructTokenURI(uint256,bytes,bytes)": "infinite",
                "getContractDescription()": "infinite",
                "getERC721KRender()": "1164",
                "getERC72KTraits()": "1154",
                "grantRoles(address,uint256)": "23639",
                "hasAllRoles(address,uint256)": "1351",
                "hasAnyRole(address,uint256)": "1372",
                "ordinalsFromRoles(uint256)": "infinite",
                "owner()": "1127",
                "ownershipHandoverExpiresAt(address)": "1315",
                "ownershipHandoverValidFor()": "266",
                "render(bytes)": "infinite",
                "renounceOwnership()": "7513",
                "renounceRoles(uint256)": "22701",
                "requestOwnershipHandover()": "21457",
                "revokeRoles(address,uint256)": "23674",
                "rolesFromOrdinals(uint8[])": "infinite",
                "rolesOf(address)": "1228",
                "setContractURI((string,string,string,string,string,string))": "infinite",
                "setSvgRender(address)": "23106",
                "setTraitsFetch(address)": "23117",
                "transferOwnership(address)": "22746"
              },
              "internal": {
                "_parseDescription(uint256)": "infinite",
                "_parseName(uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "cancelOwnershipHandover()": "54d1f13d",
              "completeOwnershipHandover(address)": "f04e283e",
              "constructContractURI()": "725fa09c",
              "constructTokenURI(uint256,bytes,bytes)": "f0679616",
              "getContractDescription()": "d12bcb12",
              "getERC721KRender()": "a4cd8696",
              "getERC72KTraits()": "25c28b4a",
              "grantRoles(address,uint256)": "1c10893f",
              "hasAllRoles(address,uint256)": "1cd64df4",
              "hasAnyRole(address,uint256)": "514e62fc",
              "ordinalsFromRoles(uint256)": "7359e41f",
              "owner()": "8da5cb5b",
              "ownershipHandoverExpiresAt(address)": "fee81cf4",
              "ownershipHandoverValidFor()": "d7533f02",
              "render(bytes)": "316df61e",
              "renounceOwnership()": "715018a6",
              "renounceRoles(uint256)": "183a4f6e",
              "requestOwnershipHandover()": "25692962",
              "revokeRoles(address,uint256)": "4a4ee7b1",
              "rolesFromOrdinals(uint8[])": "13a661ed",
              "rolesOf(address)": "2de94807",
              "setContractURI((string,string,string,string,string,string))": "57e30f44",
              "setSvgRender(address)": "ae70ed13",
              "setTraitsFetch(address)": "3ee6fa92",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_svgRender_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_traitsFetch_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"_contractURI_\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"contractURI\",\"type\":\"tuple\"}],\"name\":\"ContractURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"RolesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"svgRender\",\"type\":\"address\"}],\"name\":\"SvgRenderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"traitsFetch\",\"type\":\"address\"}],\"name\":\"TraitsFetchUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"constructContractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"input0\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"input1\",\"type\":\"bytes\"}],\"name\":\"constructTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractDescription\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERC721KRender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERC72KTraits\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"grantRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAllRoles\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"hasAnyRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"ordinalsFromRoles\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownershipHandoverValidFor\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"render\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"renounceRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"name\":\"revokeRoles\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8[]\",\"name\":\"ordinals\",\"type\":\"uint8[]\"}],\"name\":\"rolesFromOrdinals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rolesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"roles\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalLink\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sellerFeeBasisPoints\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"}],\"internalType\":\"struct ERC721Storage.ContractURI\",\"name\":\"contractURI\",\"type\":\"tuple\"}],\"name\":\"setContractURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"svgRender\",\"type\":\"address\"}],\"name\":\"setSvgRender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"traitsFetch\",\"type\":\"address\"}],\"name\":\"setTraitsFetch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"kind\":\"dev\",\"methods\":{\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"grantRoles(address,uint256)\":{\"details\":\"Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role.\"},\"hasAllRoles(address,uint256)\":{\"details\":\"Returns whether `user` has all of `roles`.\"},\"hasAnyRole(address,uint256)\":{\"details\":\"Returns whether `user` has any of `roles`.\"},\"ordinalsFromRoles(uint256)\":{\"details\":\"Convenience function to return an array of `ordinals` from the `roles` bitmap. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"ownershipHandoverValidFor()\":{\"details\":\"Returns how long a two-step ownership handover is valid for in seconds.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"renounceRoles(uint256)\":{\"details\":\"Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will be automatically expire in 48 hours (172800 seconds) by default.\"},\"revokeRoles(address,uint256)\":{\"details\":\"Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role.\"},\"rolesFromOrdinals(uint8[])\":{\"details\":\"Convenience function to return a `roles` bitmap from an array of `ordinals`. This is meant for frontends like Etherscan, and is therefore not fully optimized. Not recommended to be called on-chain.\"},\"rolesOf(address)\":{\"details\":\"Returns the roles of `user`.\"},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockERC721Storage.sol\":\"MockERC721Storage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\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            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\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        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] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\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 representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\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 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 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 up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / 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 prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\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 works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\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^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice 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 + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\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 + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\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 + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\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 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\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 log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Simple single owner and multiroles authorization mixin.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\\n/// @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\\n/// for compatibility, the nomenclature for the 2-step ownership handover and roles\\n/// may be unique to this codebase.\\nabstract contract OwnedRoles {\\n    /// -----------------------------------------------------------------------\\n    /// Events\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.\\n    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be\\n    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\\n    /// despite it not being as lightweight as a single argument event.\\n    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\\n\\n    /// @dev An ownership handover to `pendingOwner` has been requested.\\n    event OwnershipHandoverRequested(address indexed pendingOwner);\\n\\n    /// @dev The ownership handover to `pendingOwner` has been canceled.\\n    event OwnershipHandoverCanceled(address indexed pendingOwner);\\n\\n    /// @dev The `user`'s roles is updated to `roles`.\\n    /// Each bit of `roles` represents whether the role is set.\\n    event RolesUpdated(address indexed user, uint256 indexed roles);\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipTransferred(address,address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =\\n        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverRequested(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =\\n        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;\\n\\n    /// @dev `keccak256(bytes(\\\"OwnershipHandoverCanceled(address)\\\"))`.\\n    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =\\n        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;\\n\\n    /// @dev `keccak256(bytes(\\\"RolesUpdated(address,uint256)\\\"))`.\\n    uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =\\n        0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Custom Errors\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The caller is not authorized to call the function.\\n    error Unauthorized();\\n\\n    /// @dev The `newOwner` cannot be the zero address.\\n    error NewOwnerIsZeroAddress();\\n\\n    /// @dev The `pendingOwner` does not have a valid handover request.\\n    error NoHandoverRequest();\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"Unauthorized()\\\")))`.\\n    uint256 private constant _UNAUTHORIZED_ERROR_SELECTOR = 0x82b42900;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NewOwnerIsZeroAddress()\\\")))`.\\n    uint256 private constant _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR = 0x7448fbae;\\n\\n    /// @dev `bytes4(keccak256(bytes(\\\"NoHandoverRequest()\\\")))`.\\n    uint256 private constant _NO_HANDOVER_REQUEST_ERROR_SELECTOR = 0x6f5e8818;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Storage\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\\n    /// It is intentionally choosen to be a high value\\n    /// to avoid collision with lower slots.\\n    /// The choice of manual storage layout is to enable compatibility\\n    /// with both regular and upgradeable contracts.\\n    ///\\n    /// The role slot of `user` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n    ///     let roleSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// This automatically ignores the upper bits of the `user` in case\\n    /// they are not clean, as well as keep the `keccak256` under 32-bytes.\\n    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;\\n\\n    /// The ownership handover slot of `newOwner` is given by:\\n    /// ```\\n    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\\n    ///     let handoverSlot := keccak256(0x00, 0x20)\\n    /// ```\\n    /// It stores the expiry timestamp of the two-step ownership handover.\\n    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;\\n\\n    /// -----------------------------------------------------------------------\\n    /// Internal Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Initializes the owner directly without authorization guard.\\n    /// This function must be called upon initialization,\\n    /// regardless of whether the contract is upgradeable or not.\\n    /// This is to enable generalization to both regular and upgradeable contracts,\\n    /// and to save gas in case the initial owner is not the caller.\\n    /// For performance reasons, this function will not check if there\\n    /// is an existing owner.\\n    function _initializeOwner(address newOwner) internal virtual {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)\\n        }\\n    }\\n\\n    /// @dev Sets the owner directly without authorization guard.\\n    function _setOwner(address newOwner) internal virtual {\\n        assembly {\\n            let ownerSlot := not(_OWNER_SLOT_NOT)\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)\\n            // Store the new value.\\n            sstore(ownerSlot, newOwner)\\n        }\\n    }\\n\\n    /// @dev Grants the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn on.\\n    function _grantRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value and `or` it with `roles`.\\n            let newRoles := or(sload(roleSlot), roles)\\n            // Store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// @dev Removes the roles directly without authorization guard.\\n    /// Each bit of `roles` represents the role to turn off.\\n    function _removeRoles(address user, uint256 roles) internal virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            let roleSlot := keccak256(0x00, 0x20)\\n            // Load the current value.\\n            let currentRoles := sload(roleSlot)\\n            // Use `and` to compute the intersection of `currentRoles` and `roles`,\\n            // `xor` it with `currentRoles` to flip the bits in the intersection.\\n            let newRoles := xor(currentRoles, and(currentRoles, roles))\\n            // Then, store the new value.\\n            sstore(roleSlot, newRoles)\\n            // Emit the {RolesUpdated} event.\\n            log3(0, 0, _ROLES_UPDATED_EVENT_SIGNATURE, shr(96, shl(96, user)), newRoles)\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Update Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Allows the owner to transfer the ownership to `newOwner`.\\n    function transferOwnership(address newOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            newOwner := shr(96, shl(96, newOwner))\\n            // Reverts if the `newOwner` is the zero address.\\n            if iszero(newOwner) {\\n                mstore(0x00, _NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), newOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), newOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to renounce their ownership.\\n    function renounceOwnership() public payable virtual onlyOwner {\\n        assembly {\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), 0)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), 0)\\n        }\\n    }\\n\\n    /// @dev Request a two-step ownership handover to the caller.\\n    /// The request will be automatically expire in 48 hours (172800 seconds) by default.\\n    function requestOwnershipHandover() public payable virtual {\\n        unchecked {\\n            uint256 expires = block.timestamp + ownershipHandoverValidFor();\\n            assembly {\\n                // Compute and set the handover slot to 1.\\n                mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n                sstore(keccak256(0x00, 0x20), expires)\\n                // Emit the {OwnershipHandoverRequested} event.\\n                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())\\n            }\\n        }\\n    }\\n\\n    /// @dev Cancels the two-step ownership handover to the caller, if any.\\n    function cancelOwnershipHandover() public payable virtual {\\n        assembly {\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, caller()), _HANDOVER_SLOT_SEED))\\n            sstore(keccak256(0x00, 0x20), 0)\\n            // Emit the {OwnershipHandoverCanceled} event.\\n            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())\\n        }\\n    }\\n\\n    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\\n    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.\\n    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {\\n        assembly {\\n            // Clean the upper 96 bits.\\n            pendingOwner := shr(96, shl(96, pendingOwner))\\n            // Compute and set the handover slot to 0.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            let handoverSlot := keccak256(0x00, 0x20)\\n            // If the handover does not exist, or has expired.\\n            if gt(timestamp(), sload(handoverSlot)) {\\n                mstore(0x00, _NO_HANDOVER_REQUEST_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n            // Set the handover slot to 0.\\n            sstore(handoverSlot, 0)\\n            // Emit the {OwnershipTransferred} event.\\n            log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, caller(), pendingOwner)\\n            // Store the new value.\\n            sstore(not(_OWNER_SLOT_NOT), pendingOwner)\\n        }\\n    }\\n\\n    /// @dev Allows the owner to grant `user` `roles`.\\n    /// If the `user` already has a role, then it will be an no-op for the role.\\n    function grantRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _grantRoles(user, roles);\\n    }\\n\\n    /// @dev Allows the owner to remove `user` `roles`.\\n    /// If the `user` does not have a role, then it will be an no-op for the role.\\n    function revokeRoles(address user, uint256 roles) public payable virtual onlyOwner {\\n        _removeRoles(user, roles);\\n    }\\n\\n    /// @dev Allow the caller to remove their own roles.\\n    /// If the caller does not have a role, then it will be an no-op for the role.\\n    function renounceRoles(uint256 roles) public payable virtual {\\n        _removeRoles(msg.sender, roles);\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Public Read Functions\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Returns the owner of the contract.\\n    function owner() public view virtual returns (address result) {\\n        assembly {\\n            result := sload(not(_OWNER_SLOT_NOT))\\n        }\\n    }\\n\\n    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\\n    function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) {\\n        assembly {\\n            // Compute the handover slot.\\n            mstore(0x00, or(shl(96, pendingOwner), _HANDOVER_SLOT_SEED))\\n            // Load the handover slot.\\n            result := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Returns how long a two-step ownership handover is valid for in seconds.\\n    function ownershipHandoverValidFor() public view virtual returns (uint64) {\\n        return 48 * 3600;\\n    }\\n\\n    /// @dev Returns whether `user` has any of `roles`.\\n    function hasAnyRole(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value, and set the result to whether the\\n            // `and` intersection of the value and `roles` is not zero.\\n            result := iszero(iszero(and(sload(keccak256(0x00, 0x20)), roles)))\\n        }\\n    }\\n\\n    /// @dev Returns whether `user` has all of `roles`.\\n    function hasAllRoles(address user, uint256 roles) public view virtual returns (bool result) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Whether the stored value is contains all the set bits in `roles`.\\n            result := eq(and(sload(keccak256(0x00, 0x20)), roles), roles)\\n        }\\n    }\\n\\n    /// @dev Returns the roles of `user`.\\n    function rolesOf(address user) public view virtual returns (uint256 roles) {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\\n            // Load the stored value.\\n            roles := sload(keccak256(0x00, 0x20))\\n        }\\n    }\\n\\n    /// @dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function rolesFromOrdinals(uint8[] memory ordinals) public pure returns (uint256 roles) {\\n        assembly {\\n            // Skip the length slot.\\n            let o := add(ordinals, 0x20)\\n            // `shl` 5 is equivalent to multiplying by 0x20.\\n            let end := add(o, shl(5, mload(ordinals)))\\n            // prettier-ignore\\n            for {} iszero(eq(o, end)) { o := add(o, 0x20) } {\\n                roles := or(roles, shl(and(mload(o), 0xff), 1))\\n            }\\n        }\\n    }\\n\\n    /// @dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\\n    /// This is meant for frontends like Etherscan, and is therefore not fully optimized.\\n    /// Not recommended to be called on-chain.\\n    function ordinalsFromRoles(uint256 roles) public pure returns (uint8[] memory ordinals) {\\n        assembly {\\n            // Grab the pointer to the free memory.\\n            let ptr := add(mload(0x40), 0x20)\\n            // The absence of lookup tables, De Bruijn, etc., here is intentional for\\n            // smaller bytecode, as this function is not meant to be called on-chain.\\n            // prettier-ignore\\n            for { let i := 0 } 1 { i := add(i, 1) } {\\n                mstore(ptr, i)\\n                // `shr` 5 is equivalent to multiplying by 0x20.\\n                // Push back into the ordinals array if the bit is set.\\n                ptr := add(ptr, shl(5, and(roles, 1)))\\n                roles := shr(1, roles)\\n                // prettier-ignore\\n                if iszero(roles) { break }\\n            }\\n            // Set `ordinals` to the start of the free memory.\\n            ordinals := mload(0x40)\\n            // Allocate the memory.\\n            mstore(0x40, ptr)\\n            // Store the length of `ordinals`.\\n            mstore(ordinals, shr(5, sub(ptr, add(ordinals, 0x20))))\\n        }\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Modifiers\\n    /// -----------------------------------------------------------------------\\n\\n    /// @dev Marks a function as only callable by the owner.\\n    modifier onlyOwner() virtual {\\n        assembly {\\n            // If the caller is not the stored owner, revert.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`.\\n    modifier onlyRoles(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                revert(0x1c, 0x04)\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by the owner or by an account\\n    /// with `roles`. Checks for ownership first, then lazily checks for roles.\\n    modifier onlyOwnerOrRoles(uint256 roles) virtual {\\n        assembly {\\n            // If the caller is not the stored owner.\\n            if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                // Compute the role slot.\\n                mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n                // Load the stored value, and if the `and` intersection\\n                // of the value and `roles` is zero, revert.\\n                if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// @dev Marks a function as only callable by an account with `roles`\\n    /// or the owner. Checks for roles first, then lazily checks for ownership.\\n    modifier onlyRolesOrOwner(uint256 roles) virtual {\\n        assembly {\\n            // Compute the role slot.\\n            mstore(0x00, or(shl(96, caller()), _OWNER_SLOT_NOT))\\n            // Load the stored value, and if the `and` intersection\\n            // of the value and `roles` is zero, revert.\\n            if iszero(and(sload(keccak256(0x00, 0x20)), roles)) {\\n                // If the caller is not the stored owner.\\n                if iszero(eq(caller(), sload(not(_OWNER_SLOT_NOT)))) {\\n                    mstore(0x00, _UNAUTHORIZED_ERROR_SELECTOR)\\n                    revert(0x1c, 0x04)\\n                }\\n            }\\n        }\\n        _;\\n    }\\n\\n    /// -----------------------------------------------------------------------\\n    /// Role Constants\\n    /// -----------------------------------------------------------------------\\n\\n    uint256 internal constant _ROLE_0 = 1 << 0;\\n    uint256 internal constant _ROLE_1 = 1 << 1;\\n    uint256 internal constant _ROLE_2 = 1 << 2;\\n    uint256 internal constant _ROLE_3 = 1 << 3;\\n    uint256 internal constant _ROLE_4 = 1 << 4;\\n    uint256 internal constant _ROLE_5 = 1 << 5;\\n    uint256 internal constant _ROLE_6 = 1 << 6;\\n    uint256 internal constant _ROLE_7 = 1 << 7;\\n    uint256 internal constant _ROLE_8 = 1 << 8;\\n    uint256 internal constant _ROLE_9 = 1 << 9;\\n    uint256 internal constant _ROLE_10 = 1 << 10;\\n    uint256 internal constant _ROLE_11 = 1 << 11;\\n    uint256 internal constant _ROLE_12 = 1 << 12;\\n    uint256 internal constant _ROLE_13 = 1 << 13;\\n    uint256 internal constant _ROLE_14 = 1 << 14;\\n    uint256 internal constant _ROLE_15 = 1 << 15;\\n    uint256 internal constant _ROLE_16 = 1 << 16;\\n    uint256 internal constant _ROLE_17 = 1 << 17;\\n    uint256 internal constant _ROLE_18 = 1 << 18;\\n    uint256 internal constant _ROLE_19 = 1 << 19;\\n    uint256 internal constant _ROLE_20 = 1 << 20;\\n    uint256 internal constant _ROLE_21 = 1 << 21;\\n    uint256 internal constant _ROLE_22 = 1 << 22;\\n    uint256 internal constant _ROLE_23 = 1 << 23;\\n    uint256 internal constant _ROLE_24 = 1 << 24;\\n    uint256 internal constant _ROLE_25 = 1 << 25;\\n    uint256 internal constant _ROLE_26 = 1 << 26;\\n    uint256 internal constant _ROLE_27 = 1 << 27;\\n    uint256 internal constant _ROLE_28 = 1 << 28;\\n    uint256 internal constant _ROLE_29 = 1 << 29;\\n    uint256 internal constant _ROLE_30 = 1 << 30;\\n    uint256 internal constant _ROLE_31 = 1 << 31;\\n    uint256 internal constant _ROLE_32 = 1 << 32;\\n    uint256 internal constant _ROLE_33 = 1 << 33;\\n    uint256 internal constant _ROLE_34 = 1 << 34;\\n    uint256 internal constant _ROLE_35 = 1 << 35;\\n    uint256 internal constant _ROLE_36 = 1 << 36;\\n    uint256 internal constant _ROLE_37 = 1 << 37;\\n    uint256 internal constant _ROLE_38 = 1 << 38;\\n    uint256 internal constant _ROLE_39 = 1 << 39;\\n    uint256 internal constant _ROLE_40 = 1 << 40;\\n    uint256 internal constant _ROLE_41 = 1 << 41;\\n    uint256 internal constant _ROLE_42 = 1 << 42;\\n    uint256 internal constant _ROLE_43 = 1 << 43;\\n    uint256 internal constant _ROLE_44 = 1 << 44;\\n    uint256 internal constant _ROLE_45 = 1 << 45;\\n    uint256 internal constant _ROLE_46 = 1 << 46;\\n    uint256 internal constant _ROLE_47 = 1 << 47;\\n    uint256 internal constant _ROLE_48 = 1 << 48;\\n    uint256 internal constant _ROLE_49 = 1 << 49;\\n    uint256 internal constant _ROLE_50 = 1 << 50;\\n    uint256 internal constant _ROLE_51 = 1 << 51;\\n    uint256 internal constant _ROLE_52 = 1 << 52;\\n    uint256 internal constant _ROLE_53 = 1 << 53;\\n    uint256 internal constant _ROLE_54 = 1 << 54;\\n    uint256 internal constant _ROLE_55 = 1 << 55;\\n    uint256 internal constant _ROLE_56 = 1 << 56;\\n    uint256 internal constant _ROLE_57 = 1 << 57;\\n    uint256 internal constant _ROLE_58 = 1 << 58;\\n    uint256 internal constant _ROLE_59 = 1 << 59;\\n    uint256 internal constant _ROLE_60 = 1 << 60;\\n    uint256 internal constant _ROLE_61 = 1 << 61;\\n    uint256 internal constant _ROLE_62 = 1 << 62;\\n    uint256 internal constant _ROLE_63 = 1 << 63;\\n    uint256 internal constant _ROLE_64 = 1 << 64;\\n    uint256 internal constant _ROLE_65 = 1 << 65;\\n    uint256 internal constant _ROLE_66 = 1 << 66;\\n    uint256 internal constant _ROLE_67 = 1 << 67;\\n    uint256 internal constant _ROLE_68 = 1 << 68;\\n    uint256 internal constant _ROLE_69 = 1 << 69;\\n    uint256 internal constant _ROLE_70 = 1 << 70;\\n    uint256 internal constant _ROLE_71 = 1 << 71;\\n    uint256 internal constant _ROLE_72 = 1 << 72;\\n    uint256 internal constant _ROLE_73 = 1 << 73;\\n    uint256 internal constant _ROLE_74 = 1 << 74;\\n    uint256 internal constant _ROLE_75 = 1 << 75;\\n    uint256 internal constant _ROLE_76 = 1 << 76;\\n    uint256 internal constant _ROLE_77 = 1 << 77;\\n    uint256 internal constant _ROLE_78 = 1 << 78;\\n    uint256 internal constant _ROLE_79 = 1 << 79;\\n    uint256 internal constant _ROLE_80 = 1 << 80;\\n    uint256 internal constant _ROLE_81 = 1 << 81;\\n    uint256 internal constant _ROLE_82 = 1 << 82;\\n    uint256 internal constant _ROLE_83 = 1 << 83;\\n    uint256 internal constant _ROLE_84 = 1 << 84;\\n    uint256 internal constant _ROLE_85 = 1 << 85;\\n    uint256 internal constant _ROLE_86 = 1 << 86;\\n    uint256 internal constant _ROLE_87 = 1 << 87;\\n    uint256 internal constant _ROLE_88 = 1 << 88;\\n    uint256 internal constant _ROLE_89 = 1 << 89;\\n    uint256 internal constant _ROLE_90 = 1 << 90;\\n    uint256 internal constant _ROLE_91 = 1 << 91;\\n    uint256 internal constant _ROLE_92 = 1 << 92;\\n    uint256 internal constant _ROLE_93 = 1 << 93;\\n    uint256 internal constant _ROLE_94 = 1 << 94;\\n    uint256 internal constant _ROLE_95 = 1 << 95;\\n    uint256 internal constant _ROLE_96 = 1 << 96;\\n    uint256 internal constant _ROLE_97 = 1 << 97;\\n    uint256 internal constant _ROLE_98 = 1 << 98;\\n    uint256 internal constant _ROLE_99 = 1 << 99;\\n    uint256 internal constant _ROLE_100 = 1 << 100;\\n    uint256 internal constant _ROLE_101 = 1 << 101;\\n    uint256 internal constant _ROLE_102 = 1 << 102;\\n    uint256 internal constant _ROLE_103 = 1 << 103;\\n    uint256 internal constant _ROLE_104 = 1 << 104;\\n    uint256 internal constant _ROLE_105 = 1 << 105;\\n    uint256 internal constant _ROLE_106 = 1 << 106;\\n    uint256 internal constant _ROLE_107 = 1 << 107;\\n    uint256 internal constant _ROLE_108 = 1 << 108;\\n    uint256 internal constant _ROLE_109 = 1 << 109;\\n    uint256 internal constant _ROLE_110 = 1 << 110;\\n    uint256 internal constant _ROLE_111 = 1 << 111;\\n    uint256 internal constant _ROLE_112 = 1 << 112;\\n    uint256 internal constant _ROLE_113 = 1 << 113;\\n    uint256 internal constant _ROLE_114 = 1 << 114;\\n    uint256 internal constant _ROLE_115 = 1 << 115;\\n    uint256 internal constant _ROLE_116 = 1 << 116;\\n    uint256 internal constant _ROLE_117 = 1 << 117;\\n    uint256 internal constant _ROLE_118 = 1 << 118;\\n    uint256 internal constant _ROLE_119 = 1 << 119;\\n    uint256 internal constant _ROLE_120 = 1 << 120;\\n    uint256 internal constant _ROLE_121 = 1 << 121;\\n    uint256 internal constant _ROLE_122 = 1 << 122;\\n    uint256 internal constant _ROLE_123 = 1 << 123;\\n    uint256 internal constant _ROLE_124 = 1 << 124;\\n    uint256 internal constant _ROLE_125 = 1 << 125;\\n    uint256 internal constant _ROLE_126 = 1 << 126;\\n    uint256 internal constant _ROLE_127 = 1 << 127;\\n    uint256 internal constant _ROLE_128 = 1 << 128;\\n    uint256 internal constant _ROLE_129 = 1 << 129;\\n    uint256 internal constant _ROLE_130 = 1 << 130;\\n    uint256 internal constant _ROLE_131 = 1 << 131;\\n    uint256 internal constant _ROLE_132 = 1 << 132;\\n    uint256 internal constant _ROLE_133 = 1 << 133;\\n    uint256 internal constant _ROLE_134 = 1 << 134;\\n    uint256 internal constant _ROLE_135 = 1 << 135;\\n    uint256 internal constant _ROLE_136 = 1 << 136;\\n    uint256 internal constant _ROLE_137 = 1 << 137;\\n    uint256 internal constant _ROLE_138 = 1 << 138;\\n    uint256 internal constant _ROLE_139 = 1 << 139;\\n    uint256 internal constant _ROLE_140 = 1 << 140;\\n    uint256 internal constant _ROLE_141 = 1 << 141;\\n    uint256 internal constant _ROLE_142 = 1 << 142;\\n    uint256 internal constant _ROLE_143 = 1 << 143;\\n    uint256 internal constant _ROLE_144 = 1 << 144;\\n    uint256 internal constant _ROLE_145 = 1 << 145;\\n    uint256 internal constant _ROLE_146 = 1 << 146;\\n    uint256 internal constant _ROLE_147 = 1 << 147;\\n    uint256 internal constant _ROLE_148 = 1 << 148;\\n    uint256 internal constant _ROLE_149 = 1 << 149;\\n    uint256 internal constant _ROLE_150 = 1 << 150;\\n    uint256 internal constant _ROLE_151 = 1 << 151;\\n    uint256 internal constant _ROLE_152 = 1 << 152;\\n    uint256 internal constant _ROLE_153 = 1 << 153;\\n    uint256 internal constant _ROLE_154 = 1 << 154;\\n    uint256 internal constant _ROLE_155 = 1 << 155;\\n    uint256 internal constant _ROLE_156 = 1 << 156;\\n    uint256 internal constant _ROLE_157 = 1 << 157;\\n    uint256 internal constant _ROLE_158 = 1 << 158;\\n    uint256 internal constant _ROLE_159 = 1 << 159;\\n    uint256 internal constant _ROLE_160 = 1 << 160;\\n    uint256 internal constant _ROLE_161 = 1 << 161;\\n    uint256 internal constant _ROLE_162 = 1 << 162;\\n    uint256 internal constant _ROLE_163 = 1 << 163;\\n    uint256 internal constant _ROLE_164 = 1 << 164;\\n    uint256 internal constant _ROLE_165 = 1 << 165;\\n    uint256 internal constant _ROLE_166 = 1 << 166;\\n    uint256 internal constant _ROLE_167 = 1 << 167;\\n    uint256 internal constant _ROLE_168 = 1 << 168;\\n    uint256 internal constant _ROLE_169 = 1 << 169;\\n    uint256 internal constant _ROLE_170 = 1 << 170;\\n    uint256 internal constant _ROLE_171 = 1 << 171;\\n    uint256 internal constant _ROLE_172 = 1 << 172;\\n    uint256 internal constant _ROLE_173 = 1 << 173;\\n    uint256 internal constant _ROLE_174 = 1 << 174;\\n    uint256 internal constant _ROLE_175 = 1 << 175;\\n    uint256 internal constant _ROLE_176 = 1 << 176;\\n    uint256 internal constant _ROLE_177 = 1 << 177;\\n    uint256 internal constant _ROLE_178 = 1 << 178;\\n    uint256 internal constant _ROLE_179 = 1 << 179;\\n    uint256 internal constant _ROLE_180 = 1 << 180;\\n    uint256 internal constant _ROLE_181 = 1 << 181;\\n    uint256 internal constant _ROLE_182 = 1 << 182;\\n    uint256 internal constant _ROLE_183 = 1 << 183;\\n    uint256 internal constant _ROLE_184 = 1 << 184;\\n    uint256 internal constant _ROLE_185 = 1 << 185;\\n    uint256 internal constant _ROLE_186 = 1 << 186;\\n    uint256 internal constant _ROLE_187 = 1 << 187;\\n    uint256 internal constant _ROLE_188 = 1 << 188;\\n    uint256 internal constant _ROLE_189 = 1 << 189;\\n    uint256 internal constant _ROLE_190 = 1 << 190;\\n    uint256 internal constant _ROLE_191 = 1 << 191;\\n    uint256 internal constant _ROLE_192 = 1 << 192;\\n    uint256 internal constant _ROLE_193 = 1 << 193;\\n    uint256 internal constant _ROLE_194 = 1 << 194;\\n    uint256 internal constant _ROLE_195 = 1 << 195;\\n    uint256 internal constant _ROLE_196 = 1 << 196;\\n    uint256 internal constant _ROLE_197 = 1 << 197;\\n    uint256 internal constant _ROLE_198 = 1 << 198;\\n    uint256 internal constant _ROLE_199 = 1 << 199;\\n    uint256 internal constant _ROLE_200 = 1 << 200;\\n    uint256 internal constant _ROLE_201 = 1 << 201;\\n    uint256 internal constant _ROLE_202 = 1 << 202;\\n    uint256 internal constant _ROLE_203 = 1 << 203;\\n    uint256 internal constant _ROLE_204 = 1 << 204;\\n    uint256 internal constant _ROLE_205 = 1 << 205;\\n    uint256 internal constant _ROLE_206 = 1 << 206;\\n    uint256 internal constant _ROLE_207 = 1 << 207;\\n    uint256 internal constant _ROLE_208 = 1 << 208;\\n    uint256 internal constant _ROLE_209 = 1 << 209;\\n    uint256 internal constant _ROLE_210 = 1 << 210;\\n    uint256 internal constant _ROLE_211 = 1 << 211;\\n    uint256 internal constant _ROLE_212 = 1 << 212;\\n    uint256 internal constant _ROLE_213 = 1 << 213;\\n    uint256 internal constant _ROLE_214 = 1 << 214;\\n    uint256 internal constant _ROLE_215 = 1 << 215;\\n    uint256 internal constant _ROLE_216 = 1 << 216;\\n    uint256 internal constant _ROLE_217 = 1 << 217;\\n    uint256 internal constant _ROLE_218 = 1 << 218;\\n    uint256 internal constant _ROLE_219 = 1 << 219;\\n    uint256 internal constant _ROLE_220 = 1 << 220;\\n    uint256 internal constant _ROLE_221 = 1 << 221;\\n    uint256 internal constant _ROLE_222 = 1 << 222;\\n    uint256 internal constant _ROLE_223 = 1 << 223;\\n    uint256 internal constant _ROLE_224 = 1 << 224;\\n    uint256 internal constant _ROLE_225 = 1 << 225;\\n    uint256 internal constant _ROLE_226 = 1 << 226;\\n    uint256 internal constant _ROLE_227 = 1 << 227;\\n    uint256 internal constant _ROLE_228 = 1 << 228;\\n    uint256 internal constant _ROLE_229 = 1 << 229;\\n    uint256 internal constant _ROLE_230 = 1 << 230;\\n    uint256 internal constant _ROLE_231 = 1 << 231;\\n    uint256 internal constant _ROLE_232 = 1 << 232;\\n    uint256 internal constant _ROLE_233 = 1 << 233;\\n    uint256 internal constant _ROLE_234 = 1 << 234;\\n    uint256 internal constant _ROLE_235 = 1 << 235;\\n    uint256 internal constant _ROLE_236 = 1 << 236;\\n    uint256 internal constant _ROLE_237 = 1 << 237;\\n    uint256 internal constant _ROLE_238 = 1 << 238;\\n    uint256 internal constant _ROLE_239 = 1 << 239;\\n    uint256 internal constant _ROLE_240 = 1 << 240;\\n    uint256 internal constant _ROLE_241 = 1 << 241;\\n    uint256 internal constant _ROLE_242 = 1 << 242;\\n    uint256 internal constant _ROLE_243 = 1 << 243;\\n    uint256 internal constant _ROLE_244 = 1 << 244;\\n    uint256 internal constant _ROLE_245 = 1 << 245;\\n    uint256 internal constant _ROLE_246 = 1 << 246;\\n    uint256 internal constant _ROLE_247 = 1 << 247;\\n    uint256 internal constant _ROLE_248 = 1 << 248;\\n    uint256 internal constant _ROLE_249 = 1 << 249;\\n    uint256 internal constant _ROLE_250 = 1 << 250;\\n    uint256 internal constant _ROLE_251 = 1 << 251;\\n    uint256 internal constant _ROLE_252 = 1 << 252;\\n    uint256 internal constant _ROLE_253 = 1 << 253;\\n    uint256 internal constant _ROLE_254 = 1 << 254;\\n    uint256 internal constant _ROLE_255 = 1 << 255;\\n}\\n\",\"keccak256\":\"0x27a1c151d748174587f74b79b7c42274ecaa722d100e473d750a8b4704addcfd\",\"license\":\"MIT\"},\"@turbo-eth/solbase-sol/src/utils/Base64.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/// @notice Library to encode and decode strings in Base64.\\n/// @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\\n/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)\\nlibrary Base64 {\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// See: https://datatracker.ietf.org/doc/html/rfc4648\\n    /// @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\\n    /// @param noPadding Whether to strip away the padding.\\n    function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                // Multiply by 4/3 rounded up.\\n                // The `shl(2, ...)` is equivalent to multiplying by 4.\\n                let encodedLength := shl(2, div(add(dataLength, 2), 3))\\n\\n                // Set `result` to point to the start of the free memory.\\n                result := mload(0x40)\\n\\n                // Store the table into the scratch space.\\n                // Offsetted by -1 byte so that the `mload` will load the character.\\n                // We will rewrite the free memory pointer at `0x40` later with\\n                // the allocated size.\\n                // The magic constant 0x0230 will translate \\\"-_\\\" + \\\"+/\\\".\\n                mstore(0x1f, \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef\\\")\\n                mstore(0x3f, sub(\\\"ghijklmnopqrstuvwxyz0123456789-_\\\", mul(iszero(fileSafe), 0x0230)))\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n                let end := add(ptr, encodedLength)\\n\\n                // Run over the input, 3 bytes at a time.\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    data := add(data, 3) // Advance 3 bytes.\\n                    let input := mload(data)\\n\\n                    // Write 4 bytes. Optimized for fewer stack operations.\\n                    mstore8(    ptr    , mload(and(shr(18, input), 0x3F)))\\n                    mstore8(add(ptr, 1), mload(and(shr(12, input), 0x3F)))\\n                    mstore8(add(ptr, 2), mload(and(shr( 6, input), 0x3F)))\\n                    mstore8(add(ptr, 3), mload(and(        input , 0x3F)))\\n                    \\n                    ptr := add(ptr, 4) // Advance 4 bytes.\\n                    // prettier-ignore\\n                    if iszero(lt(ptr, end)) { break }\\n                }\\n\\n                let r := mod(dataLength, 3)\\n\\n                switch noPadding\\n                case 0 {\\n                    // Offset `ptr` and pad with '='. We can simply write over the end.\\n                    mstore8(sub(ptr, iszero(iszero(r))), 0x3d) // Pad at `ptr - 1` if `r > 0`.\\n                    mstore8(sub(ptr, shl(1, eq(r, 1))), 0x3d) // Pad at `ptr - 2` if `r == 1`.\\n                    // Write the length of the string.\\n                    mstore(result, encodedLength)\\n                }\\n                default {\\n                    // Write the length of the string.\\n                    mstore(result, sub(encodedLength, add(iszero(iszero(r)), eq(r, 1))))\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(end, 31), not(31)))\\n            }\\n        }\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, false, false)`.\\n    function encode(bytes memory data) internal pure returns (string memory result) {\\n        result = encode(data, false, false);\\n    }\\n\\n    /// @dev Encodes `data` using the base64 encoding described in RFC 4648.\\n    /// Equivalent to `encode(data, fileSafe, false)`.\\n    function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) {\\n        result = encode(data, fileSafe, false);\\n    }\\n\\n    /// @dev Decodes base64 encoded `data`.\\n    ///\\n    /// Supports:\\n    /// - RFC 4648 (both standard and file-safe mode).\\n    /// - RFC 3501 (63: ',').\\n    ///\\n    /// Does not support:\\n    /// - Line breaks.\\n    ///\\n    /// Note: For performance reasons,\\n    /// this function will NOT revert on invalid `data` inputs.\\n    /// Outputs for invalid inputs will simply be undefined behaviour.\\n    /// It is the user's responsibility to ensure that the `data`\\n    /// is a valid base64 encoded string.\\n    function decode(string memory data) internal pure returns (bytes memory result) {\\n        assembly {\\n            let dataLength := mload(data)\\n\\n            if dataLength {\\n                let end := add(data, dataLength)\\n                let decodedLength := mul(shr(2, dataLength), 3)\\n\\n                switch and(dataLength, 3)\\n                case 0 {\\n                    // If padded.\\n                    decodedLength := sub(\\n                        decodedLength,\\n                        add(eq(and(mload(end), 0xFF), 0x3d), eq(and(mload(end), 0xFFFF), 0x3d3d))\\n                    )\\n                }\\n                default {\\n                    // If non-padded.\\n                    decodedLength := add(decodedLength, sub(and(dataLength, 3), 1))\\n                }\\n\\n                result := mload(0x40)\\n\\n                // Write the length of the string.\\n                mstore(result, decodedLength)\\n\\n                // Skip the first slot, which stores the length.\\n                let ptr := add(result, 0x20)\\n\\n                // Load the table into the scratch space.\\n                // Constants are optimized for smaller bytecode with zero gas overhead.\\n                // `m` also doubles as the mask of the upper 6 bits.\\n                let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc\\n                mstore(0x5b, m)\\n                mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064)\\n                mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4)\\n\\n                // prettier-ignore\\n                for {} 1 {} {\\n                    // Read 4 bytes.\\n                    data := add(data, 4)\\n                    let input := mload(data)\\n\\n                    // Write 3 bytes.\\n                    mstore(ptr, or(\\n                        and(m, mload(byte(28, input))),\\n                        shr(6, or(\\n                            and(m, mload(byte(29, input))),\\n                            shr(6, or(\\n                                and(m, mload(byte(30, input))),\\n                                shr(6, mload(byte(31, input)))\\n                            ))\\n                        ))\\n                    ))\\n\\n                    ptr := add(ptr, 3)\\n                    \\n                    // prettier-ignore\\n                    if iszero(lt(data, end)) { break }\\n                }\\n\\n                // Allocate the memory for the string.\\n                // Add 32 + 31 and mask with `not(31)` to round the\\n                // free memory pointer up the next multiple of 32.\\n                mstore(0x40, and(add(add(result, decodedLength), 63), not(31)))\\n\\n                // Restore the zero slot.\\n                mstore(0x60, 0)\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xeed3c8ce53e43c0aecded4dbb14327519335596e4c742f8bc775c224538cd23e\",\"license\":\"MIT\"},\"contracts/ERC721Storage.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.8.15;\\n\\nimport { Base64 } from \\\"@turbo-eth/solbase-sol/src/utils/Base64.sol\\\";\\nimport { OwnedRoles } from \\\"@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol\\\";\\nimport { IERC721KImage } from \\\"./interfaces/IERC721KImage.sol\\\";\\nimport { IERC721KTraits } from \\\"./interfaces/IERC721KTraits.sol\\\";\\n\\n/**\\n * @title ERC721Storage\\n * @author Kames Geraghty\\n */\\nabstract contract ERC721Storage is OwnedRoles {\\n  address internal svgRenderInstance;\\n  address internal traitsFetchInstance;\\n  ContractURI internal _contractURI;\\n\\n  struct ContractURI {\\n    string name;\\n    string description;\\n    string image;\\n    string externalLink;\\n    string sellerFeeBasisPoints;\\n    string feeRecipient;\\n  }\\n\\n  event SvgRenderUpdated(address svgRender);\\n\\n  event TraitsFetchUpdated(address traitsFetch);\\n\\n  event ContractURIUpdated(ContractURI contractURI);\\n\\n  constructor(\\n    address svgRender_Instance,\\n    address traitsFetchInstance_,\\n    ContractURI memory _contractURI_\\n  ) OwnedRoles() {\\n    svgRenderInstance = svgRender_Instance;\\n    traitsFetchInstance = traitsFetchInstance_;\\n    _contractURI = _contractURI_;\\n    _initializeOwner(msg.sender);\\n  }\\n\\n  /* ===================================================================================== */\\n  /* Virtual Functions                                                                     */\\n  /* ===================================================================================== */\\n\\n  function _parseName(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  function _parseDescription(uint256 _tokenId) internal view virtual returns (string memory);\\n\\n  /* ===================================================================================== */\\n  /* External Functions                                                                    */\\n  /* ===================================================================================== */\\n  function getERC721KRender() external view returns (address) {\\n    return svgRenderInstance;\\n  }\\n\\n  function getERC72KTraits() external view returns (address) {\\n    return traitsFetchInstance;\\n  }\\n\\n  function getContractDescription() external view returns (ContractURI memory) {\\n    return _contractURI;\\n  }\\n\\n  function render(bytes memory input) external view returns (string memory) {\\n    return IERC721KImage(svgRenderInstance).render(input);\\n  }\\n\\n  function constructTokenURI(\\n    uint256 tokenId,\\n    bytes memory input0,\\n    bytes memory input1\\n  ) external view virtual returns (string memory uri) {\\n    string memory image_ = IERC721KImage(svgRenderInstance).render(input0);\\n    string memory traits_ = IERC721KTraits(traitsFetchInstance).fetch(input1);\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _parseName(tokenId),\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _parseDescription(tokenId),\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                image_,\\n                '\\\",',\\n                '\\\"attributes\\\": [',\\n                traits_,\\n                \\\"]\\\",\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function constructContractURI() external view virtual returns (string memory uri) {\\n    return\\n      string(\\n        abi.encodePacked(\\n          \\\"data:application/json;base64,\\\",\\n          Base64.encode(\\n            bytes(\\n              string.concat(\\n                '{\\\"name\\\":',\\n                '\\\"',\\n                _contractURI.name,\\n                '\\\",',\\n                '\\\"description\\\":',\\n                '\\\"',\\n                _contractURI.description,\\n                '\\\",',\\n                '\\\"image\\\":',\\n                '\\\"',\\n                _contractURI.image,\\n                '\\\",',\\n                '\\\"externalLink\\\":',\\n                '\\\"',\\n                _contractURI.externalLink,\\n                '\\\",',\\n                '\\\"sellerFeeBasisPoints\\\":',\\n                '\\\"',\\n                _contractURI.sellerFeeBasisPoints,\\n                '\\\",',\\n                '\\\"feeRecipient\\\":',\\n                '\\\"',\\n                _contractURI.feeRecipient,\\n                '\\\"',\\n                \\\"}\\\"\\n              )\\n            )\\n          )\\n        )\\n      );\\n  }\\n\\n  function setSvgRender(address svgRender) external onlyOwner {\\n    svgRenderInstance = svgRender;\\n    emit SvgRenderUpdated(svgRender);\\n  }\\n\\n  function setTraitsFetch(address traitsFetch) external onlyOwner {\\n    traitsFetchInstance = traitsFetch;\\n    emit TraitsFetchUpdated(traitsFetch);\\n  }\\n\\n  function setContractURI(ContractURI memory contractURI) external onlyOwner {\\n    _contractURI = contractURI;\\n    emit ContractURIUpdated(contractURI);\\n  }\\n}\\n\",\"keccak256\":\"0x7705c2b846d59c00cd26341f54be5397e3cb37e1955e6fc6bd9daf85e86035ca\",\"license\":\"GPL-3.0\"},\"contracts/interfaces/IERC721KImage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KImage {\\n  function render(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x8474249915bfc50221f4431b8853338ae27e8847ac3ef563dda437dd809a8846\",\"license\":\"MIT\"},\"contracts/interfaces/IERC721KTraits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.15;\\n\\ninterface IERC721KTraits {\\n  enum DisplayType {\\n    Base,\\n    Generic,\\n    BoostNumber,\\n    BoostPercent,\\n    Number,\\n    Date\\n  }\\n\\n  function fetch(bytes memory input) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xeea24a181f0175f89ed357503946fbbb39c92a1b2b4764268d4613a773f3c9ea\",\"license\":\"MIT\"},\"contracts/mocks/MockERC721Storage.sol\":{\"content\":\"//SPDX-License-Identifier: GPL-3.0\\npragma solidity 0.8.15;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\nimport { ERC721Storage } from \\\"../ERC721Storage.sol\\\";\\n\\ncontract MockERC721Storage is ERC721Storage {\\n  constructor(\\n    address _svgRender_,\\n    address _traitsFetch_,\\n    ContractURI memory _contractURI_\\n  ) ERC721Storage(_svgRender_, _traitsFetch_, _contractURI_) {}\\n\\n  function _parseName(uint256 _tokenId) internal view override returns (string memory) {\\n    return string.concat(\\\"NFT #\\\", Strings.toString(_tokenId));\\n  }\\n\\n  function _parseDescription(uint256 _tokenId) internal view override returns (string memory) {\\n    return string.concat(\\\"NFT Member #\\\", Strings.toString(_tokenId));\\n  }\\n}\\n\",\"keccak256\":\"0x7426d921ed071709b3b1bc4da12b788bfb1b8f813aa9af2a79b9b3013487b04b\",\"license\":\"GPL-3.0\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 2859,
                "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                "label": "svgRenderInstance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 2861,
                "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                "label": "traitsFetchInstance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2864,
                "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                "label": "_contractURI",
                "offset": 0,
                "slot": "2",
                "type": "t_struct(ContractURI)2877_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_struct(ContractURI)2877_storage": {
                "encoding": "inplace",
                "label": "struct ERC721Storage.ContractURI",
                "members": [
                  {
                    "astId": 2866,
                    "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                    "label": "name",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2868,
                    "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                    "label": "description",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2870,
                    "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                    "label": "image",
                    "offset": 0,
                    "slot": "2",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2872,
                    "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                    "label": "externalLink",
                    "offset": 0,
                    "slot": "3",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2874,
                    "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                    "label": "sellerFeeBasisPoints",
                    "offset": 0,
                    "slot": "4",
                    "type": "t_string_storage"
                  },
                  {
                    "astId": 2876,
                    "contract": "contracts/mocks/MockERC721Storage.sol:MockERC721Storage",
                    "label": "feeRecipient",
                    "offset": 0,
                    "slot": "5",
                    "type": "t_string_storage"
                  }
                ],
                "numberOfBytes": "192"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      }
    },
    "errors": [
      {
        "component": "general",
        "errorCode": "2018",
        "formattedMessage": "Warning: Function state mutability can be restricted to pure\n  --> contracts/mocks/MockERC721Storage.sol:14:3:\n   |\n14 |   function _parseName(uint256 _tokenId) internal view override returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n",
        "message": "Function state mutability can be restricted to pure",
        "severity": "warning",
        "sourceLocation": {
          "end": 554,
          "file": "contracts/mocks/MockERC721Storage.sol",
          "start": 401
        },
        "type": "Warning"
      },
      {
        "component": "general",
        "errorCode": "2018",
        "formattedMessage": "Warning: Function state mutability can be restricted to pure\n  --> contracts/mocks/MockERC721Storage.sol:18:3:\n   |\n18 |   function _parseDescription(uint256 _tokenId) internal view override returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n",
        "message": "Function state mutability can be restricted to pure",
        "severity": "warning",
        "sourceLocation": {
          "end": 725,
          "file": "contracts/mocks/MockERC721Storage.sol",
          "start": 558
        },
        "type": "Warning"
      }
    ],
    "sources": {
      "@openzeppelin/contracts/utils/Strings.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
          "exportedSymbols": {
            "Math": [
              1039
            ],
            "Strings": [
              174
            ]
          },
          "id": 175,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:23:0"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "./math/Math.sol",
              "id": 2,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 175,
              "sourceUnit": 1040,
              "src": "126:25:0",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Strings",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3,
                "nodeType": "StructuredDocumentation",
                "src": "153:34:0",
                "text": " @dev String operations."
              },
              "fullyImplemented": true,
              "id": 174,
              "linearizedBaseContracts": [
                174
              ],
              "name": "Strings",
              "nameLocation": "196:7:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 6,
                  "mutability": "constant",
                  "name": "_SYMBOLS",
                  "nameLocation": "235:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 174,
                  "src": "210:54:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes16",
                    "typeString": "bytes16"
                  },
                  "typeName": {
                    "id": 4,
                    "name": "bytes16",
                    "nodeType": "ElementaryTypeName",
                    "src": "210:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes16",
                      "typeString": "bytes16"
                    }
                  },
                  "value": {
                    "hexValue": "30313233343536373839616263646566",
                    "id": 5,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "246:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
                      "typeString": "literal_string \"0123456789abcdef\""
                    },
                    "value": "0123456789abcdef"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 9,
                  "mutability": "constant",
                  "name": "_ADDRESS_LENGTH",
                  "nameLocation": "293:15:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 174,
                  "src": "270:43:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "270:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "hexValue": "3230",
                    "id": 8,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "311:2:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20_by_1",
                      "typeString": "int_const 20"
                    },
                    "value": "20"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 56,
                    "nodeType": "Block",
                    "src": "486:625:0",
                    "statements": [
                      {
                        "id": 55,
                        "nodeType": "UncheckedBlock",
                        "src": "496:609:0",
                        "statements": [
                          {
                            "assignments": [
                              18
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 18,
                                "mutability": "mutable",
                                "name": "length",
                                "nameLocation": "528:6:0",
                                "nodeType": "VariableDeclaration",
                                "scope": 55,
                                "src": "520:14:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 17,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "520:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 25,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 21,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12,
                                    "src": "548:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 19,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1039,
                                    "src": "537:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$1039_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 20,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "log10",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 876,
                                  "src": "537:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 22,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "537:17:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 23,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "557:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "537:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "520:38:0"
                          },
                          {
                            "assignments": [
                              27
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 27,
                                "mutability": "mutable",
                                "name": "buffer",
                                "nameLocation": "586:6:0",
                                "nodeType": "VariableDeclaration",
                                "scope": 55,
                                "src": "572:20:0",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string"
                                },
                                "typeName": {
                                  "id": 26,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "572:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 32,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 30,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18,
                                  "src": "606:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 29,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "595:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                },
                                "typeName": {
                                  "id": 28,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "599:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                }
                              },
                              "id": 31,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "595:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "572:41:0"
                          },
                          {
                            "assignments": [
                              34
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 34,
                                "mutability": "mutable",
                                "name": "ptr",
                                "nameLocation": "635:3:0",
                                "nodeType": "VariableDeclaration",
                                "scope": 55,
                                "src": "627:11:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 33,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "627:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 35,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "627:11:0"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "708:67:0",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "726:35:0",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "buffer",
                                        "nodeType": "YulIdentifier",
                                        "src": "737:6:0"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "749:2:0",
                                            "type": "",
                                            "value": "32"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "753:6:0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "745:3:0"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "745:15:0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "733:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "733:28:0"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "726:3:0"
                                    }
                                  ]
                                }
                              ]
                            },
                            "documentation": "@solidity memory-safe-assembly",
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 27,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "737:6:0",
                                "valueSize": 1
                              },
                              {
                                "declaration": 18,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "753:6:0",
                                "valueSize": 1
                              },
                              {
                                "declaration": 34,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "726:3:0",
                                "valueSize": 1
                              }
                            ],
                            "id": 36,
                            "nodeType": "InlineAssembly",
                            "src": "699:76:0"
                          },
                          {
                            "body": {
                              "id": 51,
                              "nodeType": "Block",
                              "src": "801:267:0",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 39,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "--",
                                    "prefix": false,
                                    "src": "819:5:0",
                                    "subExpression": {
                                      "id": 38,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 34,
                                      "src": "819:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 40,
                                  "nodeType": "ExpressionStatement",
                                  "src": "819:5:0"
                                },
                                {
                                  "AST": {
                                    "nodeType": "YulBlock",
                                    "src": "902:84:0",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "932:3:0"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "946:5:0"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "953:2:0",
                                                      "type": "",
                                                      "value": "10"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "mod",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "942:3:0"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "942:14:0"
                                                },
                                                {
                                                  "name": "_SYMBOLS",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "958:8:0"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "byte",
                                                "nodeType": "YulIdentifier",
                                                "src": "937:4:0"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "937:30:0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore8",
                                            "nodeType": "YulIdentifier",
                                            "src": "924:7:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "924:44:0"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "924:44:0"
                                      }
                                    ]
                                  },
                                  "documentation": "@solidity memory-safe-assembly",
                                  "evmVersion": "istanbul",
                                  "externalReferences": [
                                    {
                                      "declaration": 6,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "958:8:0",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 34,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "932:3:0",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 12,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "946:5:0",
                                      "valueSize": 1
                                    }
                                  ],
                                  "id": 41,
                                  "nodeType": "InlineAssembly",
                                  "src": "893:93:0"
                                },
                                {
                                  "expression": {
                                    "id": 44,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 42,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12,
                                      "src": "1003:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "hexValue": "3130",
                                      "id": 43,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1012:2:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "src": "1003:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 45,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1003:11:0"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 48,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 46,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12,
                                      "src": "1036:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 47,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1045:1:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1036:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 50,
                                  "nodeType": "IfStatement",
                                  "src": "1032:21:0",
                                  "trueBody": {
                                    "id": 49,
                                    "nodeType": "Break",
                                    "src": "1048:5:0"
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "hexValue": "74727565",
                              "id": 37,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "795:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "id": 52,
                            "nodeType": "WhileStatement",
                            "src": "788:280:0"
                          },
                          {
                            "expression": {
                              "id": 53,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27,
                              "src": "1088:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 16,
                            "id": 54,
                            "nodeType": "Return",
                            "src": "1081:13:0"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 10,
                    "nodeType": "StructuredDocumentation",
                    "src": "320:90:0",
                    "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
                  },
                  "id": 57,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toString",
                  "nameLocation": "424:8:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "441:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 57,
                        "src": "433:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "433:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "432:15:0"
                  },
                  "returnParameters": {
                    "id": 16,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 15,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 57,
                        "src": "471:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 14,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "471:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "470:15:0"
                  },
                  "scope": 174,
                  "src": "415:696:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 76,
                    "nodeType": "Block",
                    "src": "1290:100:0",
                    "statements": [
                      {
                        "id": 75,
                        "nodeType": "UncheckedBlock",
                        "src": "1300:84:0",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 66,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 60,
                                  "src": "1343:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 72,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 69,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 60,
                                        "src": "1362:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 67,
                                        "name": "Math",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1039,
                                        "src": "1350:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Math_$1039_$",
                                          "typeString": "type(library Math)"
                                        }
                                      },
                                      "id": 68,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "log256",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 999,
                                      "src": "1350:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 70,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1350:18:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 71,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1371:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "1350:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 65,
                                "name": "toHexString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  77,
                                  153,
                                  173
                                ],
                                "referencedDeclaration": 153,
                                "src": "1331:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256,uint256) pure returns (string memory)"
                                }
                              },
                              "id": 73,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1331:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 64,
                            "id": 74,
                            "nodeType": "Return",
                            "src": "1324:49:0"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 58,
                    "nodeType": "StructuredDocumentation",
                    "src": "1117:94:0",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
                  },
                  "id": 77,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "1225:11:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 61,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 60,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1245:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 77,
                        "src": "1237:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 59,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1237:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1236:15:0"
                  },
                  "returnParameters": {
                    "id": 64,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 63,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 77,
                        "src": "1275:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1275:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1274:15:0"
                  },
                  "scope": 174,
                  "src": "1216:174:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 152,
                    "nodeType": "Block",
                    "src": "1603:347:0",
                    "statements": [
                      {
                        "assignments": [
                          88
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 88,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "1626:6:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 152,
                            "src": "1613:19:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 87,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1613:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 97,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 95,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 93,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 91,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1645:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 92,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 82,
                                  "src": "1649:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1645:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 94,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1658:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "1645:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 90,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "1635:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 89,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1639:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 96,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1635:25:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1613:47:0"
                      },
                      {
                        "expression": {
                          "id": 102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 98,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 88,
                              "src": "1670:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 100,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 99,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1677:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1670:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 101,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1682:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                              "typeString": "literal_string \"0\""
                            },
                            "value": "0"
                          },
                          "src": "1670:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 103,
                        "nodeType": "ExpressionStatement",
                        "src": "1670:15:0"
                      },
                      {
                        "expression": {
                          "id": 108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 104,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 88,
                              "src": "1695:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 106,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1702:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1695:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "78",
                            "id": 107,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1707:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
                              "typeString": "literal_string \"x\""
                            },
                            "value": "x"
                          },
                          "src": "1695:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 109,
                        "nodeType": "ExpressionStatement",
                        "src": "1695:15:0"
                      },
                      {
                        "body": {
                          "id": 138,
                          "nodeType": "Block",
                          "src": "1765:83:0",
                          "statements": [
                            {
                              "expression": {
                                "id": 132,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 124,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 88,
                                    "src": "1779:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 126,
                                  "indexExpression": {
                                    "id": 125,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 111,
                                    "src": "1786:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1779:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 127,
                                    "name": "_SYMBOLS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6,
                                    "src": "1791:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  },
                                  "id": 131,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 130,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 128,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 80,
                                      "src": "1800:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 129,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1808:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "1800:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1791:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "src": "1779:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "id": 133,
                              "nodeType": "ExpressionStatement",
                              "src": "1779:33:0"
                            },
                            {
                              "expression": {
                                "id": 136,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 134,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 80,
                                  "src": "1826:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 135,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1836:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "1826:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 137,
                              "nodeType": "ExpressionStatement",
                              "src": "1826:11:0"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 118,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 111,
                            "src": "1753:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1757:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "1753:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 139,
                        "initializationExpression": {
                          "assignments": [
                            111
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 111,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "1733:1:0",
                              "nodeType": "VariableDeclaration",
                              "scope": 139,
                              "src": "1725:9:0",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 110,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1725:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 117,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 114,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 112,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1737:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 113,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 82,
                                "src": "1741:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1737:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1750:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1737:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1725:26:0"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "1760:3:0",
                            "subExpression": {
                              "id": 121,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 111,
                              "src": "1762:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 123,
                          "nodeType": "ExpressionStatement",
                          "src": "1760:3:0"
                        },
                        "nodeType": "ForStatement",
                        "src": "1720:128:0"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 143,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 141,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 80,
                                "src": "1865:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 142,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1874:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1865:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
                              "id": 144,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1877:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
                                "typeString": "literal_string \"Strings: hex length insufficient\""
                              },
                              "value": "Strings: hex length insufficient"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
                                "typeString": "literal_string \"Strings: hex length insufficient\""
                              }
                            ],
                            "id": 140,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1857:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1857:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 146,
                        "nodeType": "ExpressionStatement",
                        "src": "1857:55:0"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 149,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 88,
                              "src": "1936:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1929:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 147,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1929:6:0",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1929:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 86,
                        "id": 151,
                        "nodeType": "Return",
                        "src": "1922:21:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 78,
                    "nodeType": "StructuredDocumentation",
                    "src": "1396:112:0",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
                  },
                  "id": 153,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "1522:11:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 83,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 80,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1542:5:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1534:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 79,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1534:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 82,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "1557:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1549:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 81,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1549:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1533:31:0"
                  },
                  "returnParameters": {
                    "id": 86,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 85,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1588:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1588:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1587:15:0"
                  },
                  "scope": 174,
                  "src": "1513:437:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 172,
                    "nodeType": "Block",
                    "src": "2175:76:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 166,
                                      "name": "addr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 156,
                                      "src": "2220:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 165,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2212:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 164,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2212:7:0",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 167,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2212:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "id": 163,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2204:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 162,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2204:7:0",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 168,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2204:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 169,
                              "name": "_ADDRESS_LENGTH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9,
                              "src": "2228:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 161,
                            "name": "toHexString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              77,
                              153,
                              173
                            ],
                            "referencedDeclaration": 153,
                            "src": "2192:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (string memory)"
                            }
                          },
                          "id": 170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2192:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 160,
                        "id": 171,
                        "nodeType": "Return",
                        "src": "2185:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 154,
                    "nodeType": "StructuredDocumentation",
                    "src": "1956:141:0",
                    "text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation."
                  },
                  "id": 173,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "2111:11:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 156,
                        "mutability": "mutable",
                        "name": "addr",
                        "nameLocation": "2131:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2123:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 155,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2123:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2122:14:0"
                  },
                  "returnParameters": {
                    "id": 160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 159,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2160:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 158,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2160:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2159:15:0"
                  },
                  "scope": 174,
                  "src": "2102:149:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 175,
              "src": "188:2065:0",
              "usedErrors": []
            }
          ],
          "src": "101:2153:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
          "exportedSymbols": {
            "Math": [
              1039
            ]
          },
          "id": 1040,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 176,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "103:23:1"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Math",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 177,
                "nodeType": "StructuredDocumentation",
                "src": "128:73:1",
                "text": " @dev Standard math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 1039,
              "linearizedBaseContracts": [
                1039
              ],
              "name": "Math",
              "nameLocation": "210:4:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "Math.Rounding",
                  "id": 181,
                  "members": [
                    {
                      "id": 178,
                      "name": "Down",
                      "nameLocation": "245:4:1",
                      "nodeType": "EnumValue",
                      "src": "245:4:1"
                    },
                    {
                      "id": 179,
                      "name": "Up",
                      "nameLocation": "287:2:1",
                      "nodeType": "EnumValue",
                      "src": "287:2:1"
                    },
                    {
                      "id": 180,
                      "name": "Zero",
                      "nameLocation": "318:4:1",
                      "nodeType": "EnumValue",
                      "src": "318:4:1"
                    }
                  ],
                  "name": "Rounding",
                  "nameLocation": "226:8:1",
                  "nodeType": "EnumDefinition",
                  "src": "221:122:1"
                },
                {
                  "body": {
                    "id": 198,
                    "nodeType": "Block",
                    "src": "480:37:1",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 191,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 184,
                              "src": "497:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 192,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 186,
                              "src": "501:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "497:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 195,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 186,
                            "src": "509:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "497:13:1",
                          "trueExpression": {
                            "id": 194,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 184,
                            "src": "505:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 190,
                        "id": 197,
                        "nodeType": "Return",
                        "src": "490:20:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 182,
                    "nodeType": "StructuredDocumentation",
                    "src": "349:59:1",
                    "text": " @dev Returns the largest of two numbers."
                  },
                  "id": 199,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "422:3:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 184,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "434:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 199,
                        "src": "426:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 183,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "426:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 186,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "445:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 199,
                        "src": "437:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 185,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "437:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "425:22:1"
                  },
                  "returnParameters": {
                    "id": 190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 189,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 199,
                        "src": "471:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 188,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "471:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "470:9:1"
                  },
                  "scope": 1039,
                  "src": "413:104:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 216,
                    "nodeType": "Block",
                    "src": "655:37:1",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 209,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 202,
                              "src": "672:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 210,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 204,
                              "src": "676:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "672:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 213,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 204,
                            "src": "684:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "672:13:1",
                          "trueExpression": {
                            "id": 212,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 202,
                            "src": "680:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 208,
                        "id": 215,
                        "nodeType": "Return",
                        "src": "665:20:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 200,
                    "nodeType": "StructuredDocumentation",
                    "src": "523:60:1",
                    "text": " @dev Returns the smallest of two numbers."
                  },
                  "id": 217,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "597:3:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 202,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "609:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 217,
                        "src": "601:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 201,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "601:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 204,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "620:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 217,
                        "src": "612:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "612:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "600:22:1"
                  },
                  "returnParameters": {
                    "id": 208,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 207,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 217,
                        "src": "646:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "646:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "645:9:1"
                  },
                  "scope": 1039,
                  "src": "588:104:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 239,
                    "nodeType": "Block",
                    "src": "876:82:1",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 227,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 220,
                                  "src": "931:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 228,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 222,
                                  "src": "935:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "931:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 230,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "930:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 233,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 231,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 220,
                                    "src": "941:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 232,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 222,
                                    "src": "945:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "941:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 234,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "940:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "950:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "940:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "930:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 226,
                        "id": 238,
                        "nodeType": "Return",
                        "src": "923:28:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 218,
                    "nodeType": "StructuredDocumentation",
                    "src": "698:102:1",
                    "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
                  },
                  "id": 240,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "814:7:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 220,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "830:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 240,
                        "src": "822:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 219,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "822:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 222,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "841:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 240,
                        "src": "833:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "833:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "821:22:1"
                  },
                  "returnParameters": {
                    "id": 226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 225,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 240,
                        "src": "867:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 224,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "867:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "866:9:1"
                  },
                  "scope": 1039,
                  "src": "805:153:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 264,
                    "nodeType": "Block",
                    "src": "1228:123:1",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 252,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 250,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 243,
                              "src": "1316:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1321:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1316:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 261,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 259,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 256,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 254,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 243,
                                      "src": "1330:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 255,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1334:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "1330:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 257,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1329:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 258,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 245,
                                "src": "1339:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1329:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1343:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1329:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1316:28:1",
                          "trueExpression": {
                            "hexValue": "30",
                            "id": 253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1325:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 249,
                        "id": 263,
                        "nodeType": "Return",
                        "src": "1309:35:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 241,
                    "nodeType": "StructuredDocumentation",
                    "src": "964:188:1",
                    "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds up instead\n of rounding down."
                  },
                  "id": 265,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ceilDiv",
                  "nameLocation": "1166:7:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 243,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1182:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 265,
                        "src": "1174:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 242,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1174:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 245,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1193:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 265,
                        "src": "1185:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 244,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1185:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1173:22:1"
                  },
                  "returnParameters": {
                    "id": 249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 248,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 265,
                        "src": "1219:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 247,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1219:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1218:9:1"
                  },
                  "scope": 1039,
                  "src": "1157:194:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 386,
                    "nodeType": "Block",
                    "src": "1795:3797:1",
                    "statements": [
                      {
                        "id": 385,
                        "nodeType": "UncheckedBlock",
                        "src": "1805:3781:1",
                        "statements": [
                          {
                            "assignments": [
                              278
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 278,
                                "mutability": "mutable",
                                "name": "prod0",
                                "nameLocation": "2134:5:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 385,
                                "src": "2126:13:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 277,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2126:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 279,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2126:13:1"
                          },
                          {
                            "assignments": [
                              281
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 281,
                                "mutability": "mutable",
                                "name": "prod1",
                                "nameLocation": "2206:5:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 385,
                                "src": "2198:13:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 280,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2198:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 282,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2198:13:1"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2278:157:1",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "2296:30:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "2313:1:1"
                                      },
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "2316:1:1"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2323:1:1",
                                            "type": "",
                                            "value": "0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "2319:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2319:6:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nodeType": "YulIdentifier",
                                      "src": "2306:6:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2306:20:1"
                                  },
                                  "variables": [
                                    {
                                      "name": "mm",
                                      "nodeType": "YulTypedName",
                                      "src": "2300:2:1",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2343:18:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "2356:1:1"
                                      },
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "2359:1:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "2352:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2352:9:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "2343:5:1"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2378:43:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "mm",
                                            "nodeType": "YulIdentifier",
                                            "src": "2395:2:1"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2399:5:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2391:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2391:14:1"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "mm",
                                            "nodeType": "YulIdentifier",
                                            "src": "2410:2:1"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2414:5:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "lt",
                                          "nodeType": "YulIdentifier",
                                          "src": "2407:2:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2407:13:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2387:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2387:34:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod1",
                                      "nodeType": "YulIdentifier",
                                      "src": "2378:5:1"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2343:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2399:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2414:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 281,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2378:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 268,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2313:1:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 268,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2356:1:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 270,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2316:1:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 270,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2359:1:1",
                                "valueSize": 1
                              }
                            ],
                            "id": 283,
                            "nodeType": "InlineAssembly",
                            "src": "2269:166:1"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 284,
                                "name": "prod1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 281,
                                "src": "2516:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 285,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2525:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2516:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 292,
                            "nodeType": "IfStatement",
                            "src": "2512:75:1",
                            "trueBody": {
                              "id": 291,
                              "nodeType": "Block",
                              "src": "2528:59:1",
                              "statements": [
                                {
                                  "expression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 289,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 287,
                                      "name": "prod0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 278,
                                      "src": "2553:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 288,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 272,
                                      "src": "2561:11:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2553:19:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 276,
                                  "id": 290,
                                  "nodeType": "Return",
                                  "src": "2546:26:1"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 296,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 294,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "2697:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "id": 295,
                                    "name": "prod1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 281,
                                    "src": "2711:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2697:19:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "id": 293,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "2689:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                  "typeString": "function (bool) pure"
                                }
                              },
                              "id": 297,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2689:28:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 298,
                            "nodeType": "ExpressionStatement",
                            "src": "2689:28:1"
                          },
                          {
                            "assignments": [
                              300
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 300,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "2981:9:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 385,
                                "src": "2973:17:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 299,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2973:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 301,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2973:17:1"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "3013:291:1",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3082:38:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "3102:1:1"
                                      },
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "3105:1:1"
                                      },
                                      {
                                        "name": "denominator",
                                        "nodeType": "YulIdentifier",
                                        "src": "3108:11:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nodeType": "YulIdentifier",
                                      "src": "3095:6:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3095:25:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "remainder",
                                      "nodeType": "YulIdentifier",
                                      "src": "3082:9:1"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3202:41:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3215:5:1"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "remainder",
                                            "nodeType": "YulIdentifier",
                                            "src": "3225:9:1"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "3236:5:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "gt",
                                          "nodeType": "YulIdentifier",
                                          "src": "3222:2:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3222:20:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3211:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3211:32:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod1",
                                      "nodeType": "YulIdentifier",
                                      "src": "3202:5:1"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3260:30:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3273:5:1"
                                      },
                                      {
                                        "name": "remainder",
                                        "nodeType": "YulIdentifier",
                                        "src": "3280:9:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3269:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3269:21:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "3260:5:1"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 272,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3108:11:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3236:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3260:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3273:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 281,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3202:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 281,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3215:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 300,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3082:9:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 300,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3225:9:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 300,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3280:9:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 268,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3102:1:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 270,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3105:1:1",
                                "valueSize": 1
                              }
                            ],
                            "id": 302,
                            "nodeType": "InlineAssembly",
                            "src": "3004:300:1"
                          },
                          {
                            "assignments": [
                              304
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 304,
                                "mutability": "mutable",
                                "name": "twos",
                                "nameLocation": "3619:4:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 385,
                                "src": "3611:12:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 303,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3611:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 312,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 305,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 272,
                                "src": "3626:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 307,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "3641:12:1",
                                      "subExpression": {
                                        "id": 306,
                                        "name": "denominator",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 272,
                                        "src": "3642:11:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 308,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3656:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "3641:16:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 310,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3640:18:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3626:32:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "3611:47:1"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "3681:362:1",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3746:37:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "denominator",
                                        "nodeType": "YulIdentifier",
                                        "src": "3765:11:1"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3778:4:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "3761:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3761:22:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "denominator",
                                      "nodeType": "YulIdentifier",
                                      "src": "3746:11:1"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3850:25:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3863:5:1"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3870:4:1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "3859:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3859:16:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "3850:5:1"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3990:39:1",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4010:1:1",
                                                "type": "",
                                                "value": "0"
                                              },
                                              {
                                                "name": "twos",
                                                "nodeType": "YulIdentifier",
                                                "src": "4013:4:1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "4006:3:1"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4006:12:1"
                                          },
                                          {
                                            "name": "twos",
                                            "nodeType": "YulIdentifier",
                                            "src": "4020:4:1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "4002:3:1"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4002:23:1"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4027:1:1",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3998:3:1"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3998:31:1"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "twos",
                                      "nodeType": "YulIdentifier",
                                      "src": "3990:4:1"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 272,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3746:11:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 272,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3765:11:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3850:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 278,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3863:5:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 304,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3778:4:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 304,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3870:4:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 304,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3990:4:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 304,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4013:4:1",
                                "valueSize": 1
                              },
                              {
                                "declaration": 304,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4020:4:1",
                                "valueSize": 1
                              }
                            ],
                            "id": 313,
                            "nodeType": "InlineAssembly",
                            "src": "3672:371:1"
                          },
                          {
                            "expression": {
                              "id": 318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 314,
                                "name": "prod0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 278,
                                "src": "4109:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "|=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 317,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 315,
                                  "name": "prod1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 281,
                                  "src": "4118:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 316,
                                  "name": "twos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 304,
                                  "src": "4126:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4118:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4109:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 319,
                            "nodeType": "ExpressionStatement",
                            "src": "4109:21:1"
                          },
                          {
                            "assignments": [
                              321
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 321,
                                "mutability": "mutable",
                                "name": "inverse",
                                "nameLocation": "4456:7:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 385,
                                "src": "4448:15:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 320,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4448:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 328,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 327,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 324,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "33",
                                      "id": 322,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4467:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 323,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 272,
                                      "src": "4471:11:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4467:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 325,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4466:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 326,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4486:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "4466:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "4448:39:1"
                          },
                          {
                            "expression": {
                              "id": 335,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 329,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 321,
                                "src": "4704:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 334,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 330,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4715:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 333,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 331,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "4719:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 332,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 321,
                                    "src": "4733:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4719:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4715:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4704:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 336,
                            "nodeType": "ExpressionStatement",
                            "src": "4704:36:1"
                          },
                          {
                            "expression": {
                              "id": 343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 337,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 321,
                                "src": "4773:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 342,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 338,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4784:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 341,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 339,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "4788:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 340,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 321,
                                    "src": "4802:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4788:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4784:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4773:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 344,
                            "nodeType": "ExpressionStatement",
                            "src": "4773:36:1"
                          },
                          {
                            "expression": {
                              "id": 351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 345,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 321,
                                "src": "4843:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 350,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4854:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 349,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 347,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "4858:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 348,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 321,
                                    "src": "4872:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4858:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4854:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4843:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 352,
                            "nodeType": "ExpressionStatement",
                            "src": "4843:36:1"
                          },
                          {
                            "expression": {
                              "id": 359,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 353,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 321,
                                "src": "4913:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 358,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 354,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4924:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 357,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 355,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "4928:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 356,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 321,
                                    "src": "4942:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4928:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4924:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4913:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 360,
                            "nodeType": "ExpressionStatement",
                            "src": "4913:36:1"
                          },
                          {
                            "expression": {
                              "id": 367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 361,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 321,
                                "src": "4983:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 366,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 362,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4994:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 365,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 363,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "4998:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 364,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 321,
                                    "src": "5012:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4998:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4994:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4983:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 368,
                            "nodeType": "ExpressionStatement",
                            "src": "4983:36:1"
                          },
                          {
                            "expression": {
                              "id": 375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 369,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 321,
                                "src": "5054:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 370,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5065:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 373,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 371,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 272,
                                    "src": "5069:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 372,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 321,
                                    "src": "5083:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5069:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5065:25:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5054:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 376,
                            "nodeType": "ExpressionStatement",
                            "src": "5054:36:1"
                          },
                          {
                            "expression": {
                              "id": 381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 377,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 275,
                                "src": "5524:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 378,
                                  "name": "prod0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 278,
                                  "src": "5533:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 379,
                                  "name": "inverse",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 321,
                                  "src": "5541:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5533:15:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5524:24:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 382,
                            "nodeType": "ExpressionStatement",
                            "src": "5524:24:1"
                          },
                          {
                            "expression": {
                              "id": 383,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 275,
                              "src": "5569:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 276,
                            "id": 384,
                            "nodeType": "Return",
                            "src": "5562:13:1"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 266,
                    "nodeType": "StructuredDocumentation",
                    "src": "1357:305:1",
                    "text": " @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n with further edits by Uniswap Labs also under MIT license."
                  },
                  "id": 387,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "1676:6:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 268,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "1700:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 387,
                        "src": "1692:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1692:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 270,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "1719:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 387,
                        "src": "1711:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 269,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1711:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 272,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "1738:11:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 387,
                        "src": "1730:19:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 271,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1730:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1682:73:1"
                  },
                  "returnParameters": {
                    "id": 276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 275,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "1787:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 387,
                        "src": "1779:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1779:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1778:16:1"
                  },
                  "scope": 1039,
                  "src": "1667:3925:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 430,
                    "nodeType": "Block",
                    "src": "5872:189:1",
                    "statements": [
                      {
                        "assignments": [
                          403
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 403,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "5890:6:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 430,
                            "src": "5882:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 402,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5882:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 409,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 405,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 390,
                              "src": "5906:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 406,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "5909:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 407,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 394,
                              "src": "5912:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 404,
                            "name": "mulDiv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              387,
                              431
                            ],
                            "referencedDeclaration": 387,
                            "src": "5899:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5899:25:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5882:42:1"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_enum$_Rounding_$181",
                              "typeString": "enum Math.Rounding"
                            },
                            "id": 413,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 410,
                              "name": "rounding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 397,
                              "src": "5938:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Rounding_$181",
                                "typeString": "enum Math.Rounding"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "id": 411,
                                "name": "Rounding",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 181,
                                "src": "5950:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Rounding_$181_$",
                                  "typeString": "type(enum Math.Rounding)"
                                }
                              },
                              "id": 412,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Up",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 179,
                              "src": "5950:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Rounding_$181",
                                "typeString": "enum Math.Rounding"
                              }
                            },
                            "src": "5938:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 415,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 390,
                                  "src": "5972:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 416,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 392,
                                  "src": "5975:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 417,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 394,
                                  "src": "5978:11:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 414,
                                "name": "mulmod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -16,
                                "src": "5965:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 418,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5965:25:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 419,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5993:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "5965:29:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5938:56:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 427,
                        "nodeType": "IfStatement",
                        "src": "5934:98:1",
                        "trueBody": {
                          "id": 426,
                          "nodeType": "Block",
                          "src": "5996:36:1",
                          "statements": [
                            {
                              "expression": {
                                "id": 424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 422,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 403,
                                  "src": "6010:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6020:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6010:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 425,
                              "nodeType": "ExpressionStatement",
                              "src": "6010:11:1"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 428,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 403,
                          "src": "6048:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 401,
                        "id": 429,
                        "nodeType": "Return",
                        "src": "6041:13:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 388,
                    "nodeType": "StructuredDocumentation",
                    "src": "5598:121:1",
                    "text": " @notice Calculates x * y / denominator with full precision, following the selected rounding direction."
                  },
                  "id": 431,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "5733:6:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 398,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 390,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "5757:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "5749:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5749:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "5776:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "5768:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5768:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 394,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "5795:11:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "5787:19:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 393,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5787:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 397,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "5825:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "5816:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$181",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 396,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 395,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 181,
                            "src": "5816:8:1"
                          },
                          "referencedDeclaration": 181,
                          "src": "5816:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$181",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5739:100:1"
                  },
                  "returnParameters": {
                    "id": 401,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 400,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 431,
                        "src": "5863:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 399,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5863:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5862:9:1"
                  },
                  "scope": 1039,
                  "src": "5724:337:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 542,
                    "nodeType": "Block",
                    "src": "6337:1585:1",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 439,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 434,
                            "src": "6351:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6356:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6351:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 445,
                        "nodeType": "IfStatement",
                        "src": "6347:45:1",
                        "trueBody": {
                          "id": 444,
                          "nodeType": "Block",
                          "src": "6359:33:1",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 442,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6380:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 438,
                              "id": 443,
                              "nodeType": "Return",
                              "src": "6373:8:1"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          447
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 447,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "7079:6:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 542,
                            "src": "7071:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 446,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7071:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 456,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "31",
                            "id": 448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7088:1:1",
                            "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": 453,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 450,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 434,
                                      "src": "7099:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 449,
                                    "name": "log2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      711,
                                      747
                                    ],
                                    "referencedDeclaration": 711,
                                    "src": "7094:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 451,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7094:7:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 452,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7105:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7094:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 454,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "7093:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7088:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7071:36:1"
                      },
                      {
                        "id": 541,
                        "nodeType": "UncheckedBlock",
                        "src": "7508:408:1",
                        "statements": [
                          {
                            "expression": {
                              "id": 466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 457,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7532:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 465,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 462,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 458,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7542:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 461,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 459,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7551:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 460,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7555:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7551:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7542:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 463,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7541:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 464,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7566:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7541:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7532:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 467,
                            "nodeType": "ExpressionStatement",
                            "src": "7532:35:1"
                          },
                          {
                            "expression": {
                              "id": 477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 468,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7581:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 476,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 473,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 469,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7591:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 472,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 470,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7600:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 471,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7604:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7600:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7591:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 474,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7590:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 475,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7615:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7590:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7581:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 478,
                            "nodeType": "ExpressionStatement",
                            "src": "7581:35:1"
                          },
                          {
                            "expression": {
                              "id": 488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 479,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7630:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 484,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 480,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7640:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 483,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 481,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7649:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 482,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7653:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7649:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7640:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 485,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7639:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 486,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7664:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7639:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7630:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 489,
                            "nodeType": "ExpressionStatement",
                            "src": "7630:35:1"
                          },
                          {
                            "expression": {
                              "id": 499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 490,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7679:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 498,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 495,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 491,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7689:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 494,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 492,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7698:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 493,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7702:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7698:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7689:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 496,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7688:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7713:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7688:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7679:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 500,
                            "nodeType": "ExpressionStatement",
                            "src": "7679:35:1"
                          },
                          {
                            "expression": {
                              "id": 510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 501,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7728:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 506,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 502,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7738:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 505,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 503,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7747:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 504,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7751:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7747:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7738:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 507,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7737:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7762:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7737:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7728:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 511,
                            "nodeType": "ExpressionStatement",
                            "src": "7728:35:1"
                          },
                          {
                            "expression": {
                              "id": 521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 512,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7777:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 517,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 513,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7787:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 516,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 514,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7796:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 515,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7800:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7796:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7787:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 518,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7786:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 519,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7811:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7786:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7777:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 522,
                            "nodeType": "ExpressionStatement",
                            "src": "7777:35:1"
                          },
                          {
                            "expression": {
                              "id": 532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 523,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 447,
                                "src": "7826:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 528,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 524,
                                        "name": "result",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 447,
                                        "src": "7836:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 527,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 525,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 434,
                                          "src": "7845:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 526,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 447,
                                          "src": "7849:6:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "7845:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7836:19:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 529,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7835:21:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 530,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7860:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "7835:26:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7826:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 533,
                            "nodeType": "ExpressionStatement",
                            "src": "7826:35:1"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 535,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 447,
                                  "src": "7886:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 536,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 434,
                                    "src": "7894:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 537,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 447,
                                    "src": "7898:6:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "7894:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 534,
                                "name": "min",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 217,
                                "src": "7882:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7882:23:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 438,
                            "id": 540,
                            "nodeType": "Return",
                            "src": "7875:30:1"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 432,
                    "nodeType": "StructuredDocumentation",
                    "src": "6067:208:1",
                    "text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."
                  },
                  "id": 543,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "6289:4:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 435,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 434,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "6302:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 543,
                        "src": "6294:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 433,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6294:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6293:11:1"
                  },
                  "returnParameters": {
                    "id": 438,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 437,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 543,
                        "src": "6328:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 436,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6328:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6327:9:1"
                  },
                  "scope": 1039,
                  "src": "6280:1642:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 578,
                    "nodeType": "Block",
                    "src": "8098:161:1",
                    "statements": [
                      {
                        "id": 577,
                        "nodeType": "UncheckedBlock",
                        "src": "8108:145:1",
                        "statements": [
                          {
                            "assignments": [
                              555
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 555,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "8140:6:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 577,
                                "src": "8132:14:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 554,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8132:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 559,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 557,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 546,
                                  "src": "8154:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 556,
                                "name": "sqrt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  543,
                                  579
                                ],
                                "referencedDeclaration": 543,
                                "src": "8149:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8149:7:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "8132:24:1"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 575,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 560,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 555,
                                "src": "8177:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 570,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$181",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 564,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 561,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 549,
                                          "src": "8187:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 562,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 181,
                                            "src": "8199:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$181_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 563,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 179,
                                          "src": "8199:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "8187:23:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 569,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 567,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 565,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 555,
                                            "src": "8214:6:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "id": 566,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 555,
                                            "src": "8223:6:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "8214:15:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 568,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 546,
                                          "src": "8232:1:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "8214:19:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "8187:46:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 572,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8240:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 573,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "8187:54:1",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 571,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8236:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 574,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8186:56:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "8177:65:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 553,
                            "id": 576,
                            "nodeType": "Return",
                            "src": "8170:72:1"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 544,
                    "nodeType": "StructuredDocumentation",
                    "src": "7928:89:1",
                    "text": " @notice Calculates sqrt(a), following the selected rounding direction."
                  },
                  "id": 579,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "8031:4:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 546,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "8044:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 579,
                        "src": "8036:9:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 545,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8036:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 549,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "8056:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 579,
                        "src": "8047:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$181",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 548,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 547,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 181,
                            "src": "8047:8:1"
                          },
                          "referencedDeclaration": 181,
                          "src": "8047:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$181",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8035:30:1"
                  },
                  "returnParameters": {
                    "id": 553,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 552,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 579,
                        "src": "8089:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 551,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8089:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8088:9:1"
                  },
                  "scope": 1039,
                  "src": "8022:237:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 710,
                    "nodeType": "Block",
                    "src": "8444:922:1",
                    "statements": [
                      {
                        "assignments": [
                          588
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 588,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "8462:6:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 710,
                            "src": "8454:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 587,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8454:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 590,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8471:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8454:18:1"
                      },
                      {
                        "id": 707,
                        "nodeType": "UncheckedBlock",
                        "src": "8482:855:1",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 593,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 591,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "8510:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "313238",
                                  "id": 592,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8519:3:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "8510:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 594,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8525:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8510:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 605,
                            "nodeType": "IfStatement",
                            "src": "8506:99:1",
                            "trueBody": {
                              "id": 604,
                              "nodeType": "Block",
                              "src": "8528:77:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 598,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 596,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "8546:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 597,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8556:3:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "8546:13:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 599,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8546:13:1"
                                },
                                {
                                  "expression": {
                                    "id": 602,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 600,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "8577:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 601,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8587:3:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "8577:13:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 603,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8577:13:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 610,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 608,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 606,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "8622:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 607,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8631:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "8622:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8636:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8622:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 620,
                            "nodeType": "IfStatement",
                            "src": "8618:96:1",
                            "trueBody": {
                              "id": 619,
                              "nodeType": "Block",
                              "src": "8639:75:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 613,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 611,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "8657:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 612,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8667:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "8657:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 614,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8657:12:1"
                                },
                                {
                                  "expression": {
                                    "id": 617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 615,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "8687:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 616,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8697:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "8687:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 618,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8687:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 625,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 621,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "8731:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 622,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8740:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "8731:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 624,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8745:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8731:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 635,
                            "nodeType": "IfStatement",
                            "src": "8727:96:1",
                            "trueBody": {
                              "id": 634,
                              "nodeType": "Block",
                              "src": "8748:75:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 628,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 626,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "8766:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 627,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8776:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "8766:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 629,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8766:12:1"
                                },
                                {
                                  "expression": {
                                    "id": 632,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 630,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "8796:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 631,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8806:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "8796:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 633,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8796:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 640,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 638,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 636,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "8840:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 637,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8849:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "8840:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8854:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8840:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 650,
                            "nodeType": "IfStatement",
                            "src": "8836:96:1",
                            "trueBody": {
                              "id": 649,
                              "nodeType": "Block",
                              "src": "8857:75:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 643,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 641,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "8875:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 642,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8885:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "8875:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 644,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8875:12:1"
                                },
                                {
                                  "expression": {
                                    "id": 647,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 645,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "8905:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 646,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8915:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "8905:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 648,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8905:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 655,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 653,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 651,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "8949:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 652,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8958:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "8949:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 654,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8962:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "8949:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 665,
                            "nodeType": "IfStatement",
                            "src": "8945:93:1",
                            "trueBody": {
                              "id": 664,
                              "nodeType": "Block",
                              "src": "8965:73:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 658,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 656,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "8983:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 657,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8993:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "8983:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 659,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8983:11:1"
                                },
                                {
                                  "expression": {
                                    "id": 662,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 660,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "9012:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 661,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9022:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "9012:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 663,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9012:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 666,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "9055:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 667,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9064:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "9055:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 669,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9068:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9055:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 680,
                            "nodeType": "IfStatement",
                            "src": "9051:93:1",
                            "trueBody": {
                              "id": 679,
                              "nodeType": "Block",
                              "src": "9071:73:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 673,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 671,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "9089:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 672,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9099:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "9089:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 674,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9089:11:1"
                                },
                                {
                                  "expression": {
                                    "id": 677,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 675,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "9118:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 676,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9128:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "9118:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 678,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9118:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 685,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 683,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 681,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "9161:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 682,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9170:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "9161:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 684,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9174:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9161:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 695,
                            "nodeType": "IfStatement",
                            "src": "9157:93:1",
                            "trueBody": {
                              "id": 694,
                              "nodeType": "Block",
                              "src": "9177:73:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 688,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 686,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 582,
                                      "src": "9195:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 687,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9205:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "9195:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 689,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9195:11:1"
                                },
                                {
                                  "expression": {
                                    "id": 692,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 690,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "9224:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 691,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9234:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "9224:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 693,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9224:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 700,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 698,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 696,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 582,
                                  "src": "9267:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 697,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9276:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "9267:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 699,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9280:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9267:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 706,
                            "nodeType": "IfStatement",
                            "src": "9263:64:1",
                            "trueBody": {
                              "id": 705,
                              "nodeType": "Block",
                              "src": "9283:44:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 703,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 701,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 588,
                                      "src": "9301:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 702,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9311:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "9301:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 704,
                                  "nodeType": "ExpressionStatement",
                                  "src": "9301:11:1"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 708,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 588,
                          "src": "9353:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 586,
                        "id": 709,
                        "nodeType": "Return",
                        "src": "9346:13:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 580,
                    "nodeType": "StructuredDocumentation",
                    "src": "8265:113:1",
                    "text": " @dev Return the log in base 2, rounded down, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 711,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "8392:4:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 582,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8405:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 711,
                        "src": "8397:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 581,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8397:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8396:15:1"
                  },
                  "returnParameters": {
                    "id": 586,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 585,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 711,
                        "src": "8435:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 584,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8435:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8434:9:1"
                  },
                  "scope": 1039,
                  "src": "8383:983:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 746,
                    "nodeType": "Block",
                    "src": "9599:165:1",
                    "statements": [
                      {
                        "id": 745,
                        "nodeType": "UncheckedBlock",
                        "src": "9609:149:1",
                        "statements": [
                          {
                            "assignments": [
                              723
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 723,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "9641:6:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 745,
                                "src": "9633:14:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 722,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9633:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 727,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 725,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 714,
                                  "src": "9655:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 724,
                                "name": "log2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  711,
                                  747
                                ],
                                "referencedDeclaration": 711,
                                "src": "9650:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9650:11:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9633:28:1"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 743,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 728,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 723,
                                "src": "9682:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 738,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$181",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 732,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 729,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 717,
                                          "src": "9692:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 730,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 181,
                                            "src": "9704:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$181_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 731,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 179,
                                          "src": "9704:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "9692:23:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 737,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 735,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "31",
                                            "id": 733,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "9719:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "<<",
                                          "rightExpression": {
                                            "id": 734,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "9724:6:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "9719:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 736,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 714,
                                          "src": "9733:5:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "9719:19:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "9692:46:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 740,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9745:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 741,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "9692:54:1",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 739,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9741:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 742,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9691:56:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "9682:65:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 721,
                            "id": 744,
                            "nodeType": "Return",
                            "src": "9675:72:1"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 712,
                    "nodeType": "StructuredDocumentation",
                    "src": "9372:142:1",
                    "text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 747,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "9528:4:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 718,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 714,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9541:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 747,
                        "src": "9533:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 713,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9533:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 717,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "9557:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 747,
                        "src": "9548:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$181",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 716,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 715,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 181,
                            "src": "9548:8:1"
                          },
                          "referencedDeclaration": 181,
                          "src": "9548:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$181",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9532:34:1"
                  },
                  "returnParameters": {
                    "id": 721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 720,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 747,
                        "src": "9590:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9590:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9589:9:1"
                  },
                  "scope": 1039,
                  "src": "9519:245:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 875,
                    "nodeType": "Block",
                    "src": "9951:828:1",
                    "statements": [
                      {
                        "assignments": [
                          756
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 756,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "9969:6:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 875,
                            "src": "9961:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 755,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9961:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 758,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9978:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9961:18:1"
                      },
                      {
                        "id": 872,
                        "nodeType": "UncheckedBlock",
                        "src": "9989:761:1",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 759,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10017:5:1",
                                "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": 762,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 760,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10026:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 761,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10030:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "10026:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                }
                              },
                              "src": "10017:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 775,
                            "nodeType": "IfStatement",
                            "src": "10013:99:1",
                            "trueBody": {
                              "id": 774,
                              "nodeType": "Block",
                              "src": "10034:78:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 768,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 764,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "10052:5:1",
                                      "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": 767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 765,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10061:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3634",
                                        "id": 766,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10065:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_64_by_1",
                                          "typeString": "int_const 64"
                                        },
                                        "value": "64"
                                      },
                                      "src": "10061:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      }
                                    },
                                    "src": "10052:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 769,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10052:15:1"
                                },
                                {
                                  "expression": {
                                    "id": 772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 770,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10085:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10095:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "10085:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 773,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10085:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 776,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10129:5:1",
                                "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": 779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 777,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10138:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 778,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10142:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "10138:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                }
                              },
                              "src": "10129:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 792,
                            "nodeType": "IfStatement",
                            "src": "10125:99:1",
                            "trueBody": {
                              "id": 791,
                              "nodeType": "Block",
                              "src": "10146:78:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 785,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 781,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "10164:5:1",
                                      "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": 784,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 782,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10173:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 783,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10177:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "10173:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      }
                                    },
                                    "src": "10164:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 786,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10164:15:1"
                                },
                                {
                                  "expression": {
                                    "id": 789,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 787,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10197:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 788,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10207:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "10197:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 790,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10197:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 797,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 793,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10241:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                },
                                "id": 796,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 794,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10250:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 795,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10254:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "10250:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                }
                              },
                              "src": "10241:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 809,
                            "nodeType": "IfStatement",
                            "src": "10237:99:1",
                            "trueBody": {
                              "id": 808,
                              "nodeType": "Block",
                              "src": "10258:78:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 802,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 798,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "10276:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      },
                                      "id": 801,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 799,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10285:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3136",
                                        "id": 800,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10289:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_16_by_1",
                                          "typeString": "int_const 16"
                                        },
                                        "value": "16"
                                      },
                                      "src": "10285:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      }
                                    },
                                    "src": "10276:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 803,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10276:15:1"
                                },
                                {
                                  "expression": {
                                    "id": 806,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 804,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10309:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 805,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10319:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "10309:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 807,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10309:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 810,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10353:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                },
                                "id": 813,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 811,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10362:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 812,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10366:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "10362:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                }
                              },
                              "src": "10353:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 826,
                            "nodeType": "IfStatement",
                            "src": "10349:96:1",
                            "trueBody": {
                              "id": 825,
                              "nodeType": "Block",
                              "src": "10369:76:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 819,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 815,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "10387:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      },
                                      "id": 818,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 816,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10396:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "38",
                                        "id": 817,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10400:1:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "8"
                                      },
                                      "src": "10396:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    },
                                    "src": "10387:14:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 820,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10387:14:1"
                                },
                                {
                                  "expression": {
                                    "id": 823,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 821,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10419:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 822,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10429:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "10419:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 824,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10419:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 831,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 827,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10462:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "id": 830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 828,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10471:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 829,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10475:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "10471:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              },
                              "src": "10462:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 843,
                            "nodeType": "IfStatement",
                            "src": "10458:96:1",
                            "trueBody": {
                              "id": 842,
                              "nodeType": "Block",
                              "src": "10478:76:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 836,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 832,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "10496:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      },
                                      "id": 835,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 833,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10505:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "34",
                                        "id": 834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10509:1:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "10505:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      }
                                    },
                                    "src": "10496:14:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 837,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10496:14:1"
                                },
                                {
                                  "expression": {
                                    "id": 840,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 838,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10528:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 839,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10538:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "10528:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 841,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10528:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 844,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10571:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                },
                                "id": 847,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 845,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10580:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 846,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10584:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "10580:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                }
                              },
                              "src": "10571:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 860,
                            "nodeType": "IfStatement",
                            "src": "10567:96:1",
                            "trueBody": {
                              "id": 859,
                              "nodeType": "Block",
                              "src": "10587:76:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 853,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 849,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 750,
                                      "src": "10605:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      },
                                      "id": 852,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 850,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10614:2:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "32",
                                        "id": 851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10618:1:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        },
                                        "value": "2"
                                      },
                                      "src": "10614:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      }
                                    },
                                    "src": "10605:14:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 854,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10605:14:1"
                                },
                                {
                                  "expression": {
                                    "id": 857,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 855,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10637:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10647:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "10637:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 858,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10637:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 865,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 861,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 750,
                                "src": "10680:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "id": 864,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 862,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10689:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 863,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10693:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "10689:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                }
                              },
                              "src": "10680:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 871,
                            "nodeType": "IfStatement",
                            "src": "10676:64:1",
                            "trueBody": {
                              "id": 870,
                              "nodeType": "Block",
                              "src": "10696:44:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 868,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 866,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 756,
                                      "src": "10714:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 867,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10724:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "10714:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 869,
                                  "nodeType": "ExpressionStatement",
                                  "src": "10714:11:1"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 873,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 756,
                          "src": "10766:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 754,
                        "id": 874,
                        "nodeType": "Return",
                        "src": "10759:13:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 748,
                    "nodeType": "StructuredDocumentation",
                    "src": "9770:114:1",
                    "text": " @dev Return the log in base 10, rounded down, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 876,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "9898:5:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 750,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9912:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 876,
                        "src": "9904:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 749,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9904:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9903:15:1"
                  },
                  "returnParameters": {
                    "id": 754,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 753,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 876,
                        "src": "9942:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 752,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9942:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9941:9:1"
                  },
                  "scope": 1039,
                  "src": "9889:890:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 911,
                    "nodeType": "Block",
                    "src": "11014:165:1",
                    "statements": [
                      {
                        "id": 910,
                        "nodeType": "UncheckedBlock",
                        "src": "11024:149:1",
                        "statements": [
                          {
                            "assignments": [
                              888
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 888,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "11056:6:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 910,
                                "src": "11048:14:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 887,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11048:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 892,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 890,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 879,
                                  "src": "11071:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 889,
                                "name": "log10",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  876,
                                  912
                                ],
                                "referencedDeclaration": 876,
                                "src": "11065:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 891,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11065:12:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "11048:29:1"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 893,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 888,
                                "src": "11098:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 903,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$181",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 897,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 894,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 882,
                                          "src": "11108:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 895,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 181,
                                            "src": "11120:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$181_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 896,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 179,
                                          "src": "11120:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "11108:23:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 902,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 900,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "3130",
                                            "id": 898,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11135:2:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "10"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "**",
                                          "rightExpression": {
                                            "id": 899,
                                            "name": "result",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 888,
                                            "src": "11139:6:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "11135:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 901,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 879,
                                          "src": "11148:5:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "11135:18:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "11108:45:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 905,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11160:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 906,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "11108:53:1",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 904,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11156:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 907,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "11107:55:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "11098:64:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 886,
                            "id": 909,
                            "nodeType": "Return",
                            "src": "11091:71:1"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 877,
                    "nodeType": "StructuredDocumentation",
                    "src": "10785:143:1",
                    "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 912,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "10942:5:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 883,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 879,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10956:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "10948:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 878,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10948:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 882,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "10972:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "10963:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$181",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 881,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 880,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 181,
                            "src": "10963:8:1"
                          },
                          "referencedDeclaration": 181,
                          "src": "10963:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$181",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10947:34:1"
                  },
                  "returnParameters": {
                    "id": 886,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 885,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 912,
                        "src": "11005:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 884,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11005:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11004:9:1"
                  },
                  "scope": 1039,
                  "src": "10933:246:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 998,
                    "nodeType": "Block",
                    "src": "11493:600:1",
                    "statements": [
                      {
                        "assignments": [
                          921
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 921,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "11511:6:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 998,
                            "src": "11503:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 920,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11503:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 923,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11520:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11503:18:1"
                      },
                      {
                        "id": 995,
                        "nodeType": "UncheckedBlock",
                        "src": "11531:533:1",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 926,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 924,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 915,
                                  "src": "11559:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "313238",
                                  "id": 925,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11568:3:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "11559:12:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 927,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11574:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11559:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 938,
                            "nodeType": "IfStatement",
                            "src": "11555:98:1",
                            "trueBody": {
                              "id": 937,
                              "nodeType": "Block",
                              "src": "11577:76:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 931,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 929,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 915,
                                      "src": "11595:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 930,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11605:3:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "11595:13:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 932,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11595:13:1"
                                },
                                {
                                  "expression": {
                                    "id": 935,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 933,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 921,
                                      "src": "11626:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 934,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11636:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "11626:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 936,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11626:12:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 943,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 941,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 939,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 915,
                                  "src": "11670:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 940,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11679:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "11670:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11684:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11670:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 953,
                            "nodeType": "IfStatement",
                            "src": "11666:95:1",
                            "trueBody": {
                              "id": 952,
                              "nodeType": "Block",
                              "src": "11687:74:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 946,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 944,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 915,
                                      "src": "11705:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 945,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11715:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "11705:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 947,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11705:12:1"
                                },
                                {
                                  "expression": {
                                    "id": 950,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 948,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 921,
                                      "src": "11735:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 949,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11745:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "11735:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 951,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11735:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 958,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 956,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 954,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 915,
                                  "src": "11778:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 955,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11787:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "11778:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 957,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11792:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11778:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 968,
                            "nodeType": "IfStatement",
                            "src": "11774:95:1",
                            "trueBody": {
                              "id": 967,
                              "nodeType": "Block",
                              "src": "11795:74:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 961,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 959,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 915,
                                      "src": "11813:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 960,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11823:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "11813:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 962,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11813:12:1"
                                },
                                {
                                  "expression": {
                                    "id": 965,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 963,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 921,
                                      "src": "11843:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 964,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11853:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "11843:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 966,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11843:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 969,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 915,
                                  "src": "11886:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 970,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11895:2:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "11886:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11900:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11886:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 983,
                            "nodeType": "IfStatement",
                            "src": "11882:95:1",
                            "trueBody": {
                              "id": 982,
                              "nodeType": "Block",
                              "src": "11903:74:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 976,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 974,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 915,
                                      "src": "11921:5:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 975,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11931:2:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "11921:12:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 977,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11921:12:1"
                                },
                                {
                                  "expression": {
                                    "id": 980,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 978,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 921,
                                      "src": "11951:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 979,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "11961:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "11951:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 981,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11951:11:1"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 988,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 984,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 915,
                                  "src": "11994:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 985,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12003:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "11994:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 987,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12007:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11994:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 994,
                            "nodeType": "IfStatement",
                            "src": "11990:64:1",
                            "trueBody": {
                              "id": 993,
                              "nodeType": "Block",
                              "src": "12010:44:1",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 991,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 989,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 921,
                                      "src": "12028:6:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 990,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12038:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "12028:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 992,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12028:11:1"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 996,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 921,
                          "src": "12080:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 919,
                        "id": 997,
                        "nodeType": "Return",
                        "src": "12073:13:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 913,
                    "nodeType": "StructuredDocumentation",
                    "src": "11185:240:1",
                    "text": " @dev Return the log in base 256, rounded down, of a positive value.\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": 999,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "11439:6:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 916,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 915,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11454:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 999,
                        "src": "11446:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 914,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11446:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11445:15:1"
                  },
                  "returnParameters": {
                    "id": 919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 918,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 999,
                        "src": "11484:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 917,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11484:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11483:9:1"
                  },
                  "scope": 1039,
                  "src": "11430:663:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1037,
                    "nodeType": "Block",
                    "src": "12329:173:1",
                    "statements": [
                      {
                        "id": 1036,
                        "nodeType": "UncheckedBlock",
                        "src": "12339:157:1",
                        "statements": [
                          {
                            "assignments": [
                              1011
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1011,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "12371:6:1",
                                "nodeType": "VariableDeclaration",
                                "scope": 1036,
                                "src": "12363:14:1",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1010,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12363:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1015,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 1013,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1002,
                                  "src": "12387:5:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1012,
                                "name": "log256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  999,
                                  1038
                                ],
                                "referencedDeclaration": 999,
                                "src": "12380:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 1014,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12380:13:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "12363:30:1"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1016,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1011,
                                "src": "12414:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 1029,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Rounding_$181",
                                          "typeString": "enum Math.Rounding"
                                        },
                                        "id": 1020,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 1017,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1005,
                                          "src": "12424:8:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 1018,
                                            "name": "Rounding",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 181,
                                            "src": "12436:8:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Rounding_$181_$",
                                              "typeString": "type(enum Math.Rounding)"
                                            }
                                          },
                                          "id": 1019,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "Up",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 179,
                                          "src": "12436:11:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$181",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        },
                                        "src": "12424:23:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&&",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 1028,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 1026,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "31",
                                            "id": 1021,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "12451:1:1",
                                            "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": 1024,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "id": 1022,
                                                  "name": "result",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1011,
                                                  "src": "12457:6:1",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "*",
                                                "rightExpression": {
                                                  "hexValue": "38",
                                                  "id": 1023,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "12466:1:1",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_8_by_1",
                                                    "typeString": "int_const 8"
                                                  },
                                                  "value": "8"
                                                },
                                                "src": "12457:10:1",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "id": 1025,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "12456:12:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "12451:17:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "id": 1027,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1002,
                                          "src": "12471:5:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "12451:25:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "src": "12424:52:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 1031,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12483:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 1032,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "12424:60:1",
                                    "trueExpression": {
                                      "hexValue": "31",
                                      "id": 1030,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "12479:1:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 1033,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "12423:62:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "12414:71:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 1009,
                            "id": 1035,
                            "nodeType": "Return",
                            "src": "12407:78:1"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1000,
                    "nodeType": "StructuredDocumentation",
                    "src": "12099:143:1",
                    "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 1038,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "12256:6:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1006,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1002,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12271:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1038,
                        "src": "12263:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1001,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12263:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1005,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "12287:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1038,
                        "src": "12278:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$181",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 1004,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1003,
                            "name": "Rounding",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 181,
                            "src": "12278:8:1"
                          },
                          "referencedDeclaration": 181,
                          "src": "12278:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$181",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12262:34:1"
                  },
                  "returnParameters": {
                    "id": 1009,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1008,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1038,
                        "src": "12320:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1007,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12320:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12319:9:1"
                  },
                  "scope": 1039,
                  "src": "12247:255:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1040,
              "src": "202:12302:1",
              "usedErrors": []
            }
          ],
          "src": "103:12402:1"
        },
        "id": 1
      },
      "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol": {
        "ast": {
          "absolutePath": "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol",
          "exportedSymbols": {
            "OwnedRoles": [
              2638
            ]
          },
          "id": 2639,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1041,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:2"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "OwnedRoles",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1042,
                "nodeType": "StructuredDocumentation",
                "src": "57:478:2",
                "text": "@notice Simple single owner and multiroles authorization mixin.\n @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/auth/OwnedRoles.sol)\n @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)\n @dev While the ownable portion follows EIP-173 (https://eips.ethereum.org/EIPS/eip-173)\n for compatibility, the nomenclature for the 2-step ownership handover and roles\n may be unique to this codebase."
              },
              "fullyImplemented": true,
              "id": 2638,
              "linearizedBaseContracts": [
                2638
              ],
              "name": "OwnedRoles",
              "nameLocation": "553:10:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1043,
                    "nodeType": "StructuredDocumentation",
                    "src": "746:310:2",
                    "text": "@dev The ownership is transferred from `oldOwner` to `newOwner`.\n This event is intentionally kept the same as OpenZeppelin's Ownable to be\n compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),\n despite it not being as lightweight as a single argument event."
                  },
                  "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
                  "id": 1049,
                  "name": "OwnershipTransferred",
                  "nameLocation": "1067:20:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1048,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1045,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "oldOwner",
                        "nameLocation": "1104:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1049,
                        "src": "1088:24:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1044,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1088:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1047,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "1130:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1049,
                        "src": "1114:24:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1046,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1114:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1087:52:2"
                  },
                  "src": "1061:79:2"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1050,
                    "nodeType": "StructuredDocumentation",
                    "src": "1146:68:2",
                    "text": "@dev An ownership handover to `pendingOwner` has been requested."
                  },
                  "eventSelector": "dbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d",
                  "id": 1054,
                  "name": "OwnershipHandoverRequested",
                  "nameLocation": "1225:26:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1053,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1052,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pendingOwner",
                        "nameLocation": "1268:12:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1054,
                        "src": "1252:28:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1051,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1252:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1251:30:2"
                  },
                  "src": "1219:63:2"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1055,
                    "nodeType": "StructuredDocumentation",
                    "src": "1288:68:2",
                    "text": "@dev The ownership handover to `pendingOwner` has been canceled."
                  },
                  "eventSelector": "fa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92",
                  "id": 1059,
                  "name": "OwnershipHandoverCanceled",
                  "nameLocation": "1367:25:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1058,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1057,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pendingOwner",
                        "nameLocation": "1409:12:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1059,
                        "src": "1393:28:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1056,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1393:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1392:30:2"
                  },
                  "src": "1361:62:2"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1060,
                    "nodeType": "StructuredDocumentation",
                    "src": "1429:114:2",
                    "text": "@dev The `user`'s roles is updated to `roles`.\n Each bit of `roles` represents whether the role is set."
                  },
                  "eventSelector": "715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26",
                  "id": 1066,
                  "name": "RolesUpdated",
                  "nameLocation": "1554:12:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1065,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1062,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "1583:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1066,
                        "src": "1567:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1567:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1064,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "1605:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1066,
                        "src": "1589:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1063,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1589:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1566:45:2"
                  },
                  "src": "1548:64:2"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1067,
                    "nodeType": "StructuredDocumentation",
                    "src": "1618:69:2",
                    "text": "@dev `keccak256(bytes(\"OwnershipTransferred(address,address)\"))`."
                  },
                  "id": 1070,
                  "mutability": "constant",
                  "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE",
                  "nameLocation": "1717:38:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "1692:140:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1068,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1692:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "307838626530303739633533313635393134313334346364316664306134663238343139343937663937323261336461616665336234313836663662363435376530",
                    "id": 1069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1766:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_63267312222310607310220992301550539520881909915348243260808268974908359596000_by_1",
                      "typeString": "int_const 6326...(69 digits omitted)...6000"
                    },
                    "value": "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1071,
                    "nodeType": "StructuredDocumentation",
                    "src": "1839:67:2",
                    "text": "@dev `keccak256(bytes(\"OwnershipHandoverRequested(address)\"))`."
                  },
                  "id": 1074,
                  "mutability": "constant",
                  "name": "_OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE",
                  "nameLocation": "1936:45:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "1911:147:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1072,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1911:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "307864626633366131303764613139653439353237613731373661316261626639363362346230666638636465333565653335643663643866316639616337653164",
                    "id": 1073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1992:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_99486589706178915293482045537067896628184784474209892898124391061398315892253_by_1",
                      "typeString": "int_const 9948...(69 digits omitted)...2253"
                    },
                    "value": "0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1075,
                    "nodeType": "StructuredDocumentation",
                    "src": "2065:66:2",
                    "text": "@dev `keccak256(bytes(\"OwnershipHandoverCanceled(address)\"))`."
                  },
                  "id": 1078,
                  "mutability": "constant",
                  "name": "_OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE",
                  "nameLocation": "2161:44:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "2136:146:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2136:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "307866613762386561623764613637663431326363393537356564343334363434363866396266626165383964313637353931373334366361366438666533633932",
                    "id": 1077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2216:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_113296519006148992096626879868577423813870114622160551413976512868841544367250_by_1",
                      "typeString": "int_const 1132...(70 digits omitted)...7250"
                    },
                    "value": "0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1079,
                    "nodeType": "StructuredDocumentation",
                    "src": "2289:61:2",
                    "text": "@dev `keccak256(bytes(\"RolesUpdated(address,uint256)\"))`."
                  },
                  "id": 1082,
                  "mutability": "constant",
                  "name": "_ROLES_UPDATED_EVENT_SIGNATURE",
                  "nameLocation": "2380:30:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "2355:132:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2355:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "307837313561643563653631666339353935633762343135323839643539636632303366323361393466613036663034616637653438396130613736653166653236",
                    "id": 1081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2421:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_51271843761779235751881398726824997251846621987341107132597768407806770282022_by_1",
                      "typeString": "int_const 5127...(69 digits omitted)...2022"
                    },
                    "value": "0x715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26"
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 1083,
                    "nodeType": "StructuredDocumentation",
                    "src": "2677:59:2",
                    "text": "@dev The caller is not authorized to call the function."
                  },
                  "errorSelector": "82b42900",
                  "id": 1085,
                  "name": "Unauthorized",
                  "nameLocation": "2747:12:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 1084,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2759:2:2"
                  },
                  "src": "2741:21:2"
                },
                {
                  "documentation": {
                    "id": 1086,
                    "nodeType": "StructuredDocumentation",
                    "src": "2768:51:2",
                    "text": "@dev The `newOwner` cannot be the zero address."
                  },
                  "errorSelector": "7448fbae",
                  "id": 1088,
                  "name": "NewOwnerIsZeroAddress",
                  "nameLocation": "2830:21:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 1087,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2851:2:2"
                  },
                  "src": "2824:30:2"
                },
                {
                  "documentation": {
                    "id": 1089,
                    "nodeType": "StructuredDocumentation",
                    "src": "2860:67:2",
                    "text": "@dev The `pendingOwner` does not have a valid handover request."
                  },
                  "errorSelector": "6f5e8818",
                  "id": 1091,
                  "name": "NoHandoverRequest",
                  "nameLocation": "2938:17:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 1090,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2955:2:2"
                  },
                  "src": "2932:26:2"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1092,
                    "nodeType": "StructuredDocumentation",
                    "src": "2964:54:2",
                    "text": "@dev `bytes4(keccak256(bytes(\"Unauthorized()\")))`."
                  },
                  "id": 1095,
                  "mutability": "constant",
                  "name": "_UNAUTHORIZED_ERROR_SELECTOR",
                  "nameLocation": "3048:28:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "3023:66:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1093,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3023:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783832623432393030",
                    "id": 1094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3079:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2192845056_by_1",
                      "typeString": "int_const 2192845056"
                    },
                    "value": "0x82b42900"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1096,
                    "nodeType": "StructuredDocumentation",
                    "src": "3096:63:2",
                    "text": "@dev `bytes4(keccak256(bytes(\"NewOwnerIsZeroAddress()\")))`."
                  },
                  "id": 1099,
                  "mutability": "constant",
                  "name": "_NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR",
                  "nameLocation": "3189:41:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "3164:79:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1097,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3164:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783734343866626165",
                    "id": 1098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3233:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1950940078_by_1",
                      "typeString": "int_const 1950940078"
                    },
                    "value": "0x7448fbae"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1100,
                    "nodeType": "StructuredDocumentation",
                    "src": "3250:59:2",
                    "text": "@dev `bytes4(keccak256(bytes(\"NoHandoverRequest()\")))`."
                  },
                  "id": 1103,
                  "mutability": "constant",
                  "name": "_NO_HANDOVER_REQUEST_ERROR_SELECTOR",
                  "nameLocation": "3339:35:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "3314:73:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1101,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3314:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783666356538383138",
                    "id": 1102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3377:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1868466200_by_1",
                      "typeString": "int_const 1868466200"
                    },
                    "value": "0x6f5e8818"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1104,
                    "nodeType": "StructuredDocumentation",
                    "src": "3571:620:2",
                    "text": "@dev The owner slot is given by: `not(_OWNER_SLOT_NOT)`.\n It is intentionally choosen to be a high value\n to avoid collision with lower slots.\n The choice of manual storage layout is to enable compatibility\n with both regular and upgradeable contracts.\n The role slot of `user` is given by:\n ```\n     mstore(0x00, or(shl(96, user), _OWNER_SLOT_NOT))\n     let roleSlot := keccak256(0x00, 0x20)\n ```\n This automatically ignores the upper bits of the `user` in case\n they are not clean, as well as keep the `keccak256` under 32-bytes."
                  },
                  "id": 1107,
                  "mutability": "constant",
                  "name": "_OWNER_SLOT_NOT",
                  "nameLocation": "4221:15:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "4196:53:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1105,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4196:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783862373863366438",
                    "id": 1106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4239:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2339948248_by_1",
                      "typeString": "int_const 2339948248"
                    },
                    "value": "0x8b78c6d8"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1108,
                    "nodeType": "StructuredDocumentation",
                    "src": "4256:276:2",
                    "text": "The ownership handover slot of `newOwner` is given by:\n ```\n     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))\n     let handoverSlot := keccak256(0x00, 0x20)\n ```\n It stores the expiry timestamp of the two-step ownership handover."
                  },
                  "id": 1111,
                  "mutability": "constant",
                  "name": "_HANDOVER_SLOT_SEED",
                  "nameLocation": "4562:19:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "4537:57:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4537:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783338396137356531",
                    "id": 1110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4584:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_949646817_by_1",
                      "typeString": "int_const 949646817"
                    },
                    "value": "0x389a75e1"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1118,
                    "nodeType": "Block",
                    "src": "5301:344:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5320:319:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5374:38:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5390:2:2",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5398:2:2",
                                        "type": "",
                                        "value": "96"
                                      },
                                      {
                                        "name": "newOwner",
                                        "nodeType": "YulIdentifier",
                                        "src": "5402:8:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5394:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5394:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5386:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5386:26:2"
                              },
                              "variableNames": [
                                {
                                  "name": "newOwner",
                                  "nodeType": "YulIdentifier",
                                  "src": "5374:8:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "5472:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5468:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5468:20:2"
                                  },
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "5490:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5461:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5461:38:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5461:38:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5571:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5574:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "5577:38:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5617:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "5620:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5566:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5566:63:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5566:63:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1070,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5577:38:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5472:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1114,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5374:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1114,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5402:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1114,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5490:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1114,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5620:8:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1117,
                        "nodeType": "InlineAssembly",
                        "src": "5311:328:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1112,
                    "nodeType": "StructuredDocumentation",
                    "src": "4789:446:2",
                    "text": "@dev Initializes the owner directly without authorization guard.\n This function must be called upon initialization,\n regardless of whether the contract is upgradeable or not.\n This is to enable generalization to both regular and upgradeable contracts,\n and to save gas in case the initial owner is not the caller.\n For performance reasons, this function will not check if there\n is an existing owner."
                  },
                  "id": 1119,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_initializeOwner",
                  "nameLocation": "5249:16:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1114,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "5274:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1119,
                        "src": "5266:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1113,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5266:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5265:18:2"
                  },
                  "returnParameters": {
                    "id": 1116,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5301:0:2"
                  },
                  "scope": 2638,
                  "src": "5240:405:2",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1126,
                    "nodeType": "Block",
                    "src": "5771:398:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5790:373:2",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5804:37:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_OWNER_SLOT_NOT",
                                    "nodeType": "YulIdentifier",
                                    "src": "5825:15:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "5821:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5821:20:2"
                              },
                              "variables": [
                                {
                                  "name": "ownerSlot",
                                  "nodeType": "YulTypedName",
                                  "src": "5808:9:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5894:38:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5910:2:2",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5918:2:2",
                                        "type": "",
                                        "value": "96"
                                      },
                                      {
                                        "name": "newOwner",
                                        "nodeType": "YulIdentifier",
                                        "src": "5922:8:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5914:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5914:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5906:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5906:26:2"
                              },
                              "variableNames": [
                                {
                                  "name": "newOwner",
                                  "nodeType": "YulIdentifier",
                                  "src": "5894:8:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6004:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6007:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "6010:38:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "ownerSlot",
                                        "nodeType": "YulIdentifier",
                                        "src": "6056:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sload",
                                      "nodeType": "YulIdentifier",
                                      "src": "6050:5:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6050:16:2"
                                  },
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "6068:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5999:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5999:78:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5999:78:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ownerSlot",
                                    "nodeType": "YulIdentifier",
                                    "src": "6133:9:2"
                                  },
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "6144:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6126:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6126:27:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6126:27:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1070,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6010:38:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5825:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1122,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5894:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1122,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5922:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1122,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6068:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1122,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6144:8:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1125,
                        "nodeType": "InlineAssembly",
                        "src": "5781:382:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1120,
                    "nodeType": "StructuredDocumentation",
                    "src": "5651:61:2",
                    "text": "@dev Sets the owner directly without authorization guard."
                  },
                  "id": 1127,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setOwner",
                  "nameLocation": "5726:9:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1123,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1122,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "5744:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1127,
                        "src": "5736:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1121,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5736:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5735:18:2"
                  },
                  "returnParameters": {
                    "id": 1124,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5771:0:2"
                  },
                  "scope": 2638,
                  "src": "5717:452:2",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1136,
                    "nodeType": "Block",
                    "src": "6370:514:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6389:489:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6448:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6461:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "6465:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6457:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6457:13:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "6472:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "6454:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6454:34:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6441:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6441:48:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6441:48:2"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6502:37:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6528:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6534:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "6518:9:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6518:21:2"
                              },
                              "variables": [
                                {
                                  "name": "roleSlot",
                                  "nodeType": "YulTypedName",
                                  "src": "6506:8:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6616:42:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "roleSlot",
                                        "nodeType": "YulIdentifier",
                                        "src": "6641:8:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sload",
                                      "nodeType": "YulIdentifier",
                                      "src": "6635:5:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6635:15:2"
                                  },
                                  {
                                    "name": "roles",
                                    "nodeType": "YulIdentifier",
                                    "src": "6652:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6632:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6632:26:2"
                              },
                              "variables": [
                                {
                                  "name": "newRoles",
                                  "nodeType": "YulTypedName",
                                  "src": "6620:8:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "roleSlot",
                                    "nodeType": "YulIdentifier",
                                    "src": "6714:8:2"
                                  },
                                  {
                                    "name": "newRoles",
                                    "nodeType": "YulIdentifier",
                                    "src": "6724:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6707:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6707:26:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6707:26:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6797:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6800:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_ROLES_UPDATED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "6803:30:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6839:2:2",
                                        "type": "",
                                        "value": "96"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6847:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "6851:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "6843:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6843:13:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shr",
                                      "nodeType": "YulIdentifier",
                                      "src": "6835:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6835:22:2"
                                  },
                                  {
                                    "name": "newRoles",
                                    "nodeType": "YulIdentifier",
                                    "src": "6859:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "6792:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6792:76:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6792:76:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6472:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1082,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6803:30:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1132,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6652:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1130,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6465:4:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1130,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6851:4:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1135,
                        "nodeType": "InlineAssembly",
                        "src": "6380:498:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1128,
                    "nodeType": "StructuredDocumentation",
                    "src": "6175:123:2",
                    "text": "@dev Grants the roles directly without authorization guard.\n Each bit of `roles` represents the role to turn on."
                  },
                  "id": 1137,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_grantRoles",
                  "nameLocation": "6312:11:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1130,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "6332:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1137,
                        "src": "6324:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1129,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6324:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1132,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "6346:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1137,
                        "src": "6338:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1131,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6338:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6323:29:2"
                  },
                  "returnParameters": {
                    "id": 1134,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6370:0:2"
                  },
                  "scope": 2638,
                  "src": "6303:581:2",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1146,
                    "nodeType": "Block",
                    "src": "7088:726:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7107:701:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7166:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7179:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "7183:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "7175:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7175:13:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "7190:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "7172:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7172:34:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7159:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7159:48:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7159:48:2"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7220:37:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7246:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7252:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "7236:9:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7236:21:2"
                              },
                              "variables": [
                                {
                                  "name": "roleSlot",
                                  "nodeType": "YulTypedName",
                                  "src": "7224:8:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7309:35:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "roleSlot",
                                    "nodeType": "YulIdentifier",
                                    "src": "7335:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7329:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7329:15:2"
                              },
                              "variables": [
                                {
                                  "name": "currentRoles",
                                  "nodeType": "YulTypedName",
                                  "src": "7313:12:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7523:59:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "currentRoles",
                                    "nodeType": "YulIdentifier",
                                    "src": "7543:12:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "currentRoles",
                                        "nodeType": "YulIdentifier",
                                        "src": "7561:12:2"
                                      },
                                      {
                                        "name": "roles",
                                        "nodeType": "YulIdentifier",
                                        "src": "7575:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7557:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7557:24:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "xor",
                                  "nodeType": "YulIdentifier",
                                  "src": "7539:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7539:43:2"
                              },
                              "variables": [
                                {
                                  "name": "newRoles",
                                  "nodeType": "YulTypedName",
                                  "src": "7527:8:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "roleSlot",
                                    "nodeType": "YulIdentifier",
                                    "src": "7644:8:2"
                                  },
                                  {
                                    "name": "newRoles",
                                    "nodeType": "YulIdentifier",
                                    "src": "7654:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7637:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7637:26:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7637:26:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7727:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7730:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_ROLES_UPDATED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "7733:30:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7769:2:2",
                                        "type": "",
                                        "value": "96"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7777:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "7781:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "7773:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7773:13:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shr",
                                      "nodeType": "YulIdentifier",
                                      "src": "7765:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7765:22:2"
                                  },
                                  {
                                    "name": "newRoles",
                                    "nodeType": "YulIdentifier",
                                    "src": "7789:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7722:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7722:76:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7722:76:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7190:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1082,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7733:30:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1142,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7575:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1140,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7183:4:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1140,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7781:4:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1145,
                        "nodeType": "InlineAssembly",
                        "src": "7098:710:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1138,
                    "nodeType": "StructuredDocumentation",
                    "src": "6890:125:2",
                    "text": "@dev Removes the roles directly without authorization guard.\n Each bit of `roles` represents the role to turn off."
                  },
                  "id": 1147,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_removeRoles",
                  "nameLocation": "7029:12:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1140,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "7050:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1147,
                        "src": "7042:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1139,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7042:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1142,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "7064:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1147,
                        "src": "7056:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1141,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7056:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7041:29:2"
                  },
                  "returnParameters": {
                    "id": 1144,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7088:0:2"
                  },
                  "scope": 2638,
                  "src": "7020:794:2",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1156,
                    "nodeType": "Block",
                    "src": "8162:568:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "8181:543:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8235:38:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8251:2:2",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8259:2:2",
                                        "type": "",
                                        "value": "96"
                                      },
                                      {
                                        "name": "newOwner",
                                        "nodeType": "YulIdentifier",
                                        "src": "8263:8:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8255:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8255:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8247:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8247:26:2"
                              },
                              "variableNames": [
                                {
                                  "name": "newOwner",
                                  "nodeType": "YulIdentifier",
                                  "src": "8235:8:2"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8368:122:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8393:4:2",
                                          "type": "",
                                          "value": "0x00"
                                        },
                                        {
                                          "name": "_NEW_OWNER_IS_ZERO_ADDRESS_ERROR_SELECTOR",
                                          "nodeType": "YulIdentifier",
                                          "src": "8399:41:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "8386:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8386:55:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8386:55:2"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8465:4:2",
                                          "type": "",
                                          "value": "0x1c"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8471:4:2",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "8458:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8458:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8458:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "8358:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "8351:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8351:16:2"
                              },
                              "nodeType": "YulIf",
                              "src": "8348:142:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8562:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8565:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "8568:38:2"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "caller",
                                      "nodeType": "YulIdentifier",
                                      "src": "8608:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8608:8:2"
                                  },
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "8618:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "8557:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8557:70:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8557:70:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "8687:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "8683:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8683:20:2"
                                  },
                                  {
                                    "name": "newOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "8705:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8676:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8676:38:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8676:38:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1099,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8399:41:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1070,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8568:38:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8687:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1150,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8235:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1150,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8263:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1150,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8358:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1150,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8618:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1150,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8705:8:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1155,
                        "nodeType": "InlineAssembly",
                        "src": "8172:552:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1148,
                    "nodeType": "StructuredDocumentation",
                    "src": "8013:66:2",
                    "text": "@dev Allows the owner to transfer the ownership to `newOwner`."
                  },
                  "functionSelector": "f2fde38b",
                  "id": 1157,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1153,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1152,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "8152:9:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "8152:9:2"
                    }
                  ],
                  "name": "transferOwnership",
                  "nameLocation": "8093:17:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1151,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1150,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "8119:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1157,
                        "src": "8111:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1149,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8111:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8110:18:2"
                  },
                  "returnParameters": {
                    "id": 1154,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8162:0:2"
                  },
                  "scope": 2638,
                  "src": "8084:646:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1164,
                    "nodeType": "Block",
                    "src": "8857:246:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "8876:221:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8949:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8952:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "8955:38:2"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "caller",
                                      "nodeType": "YulIdentifier",
                                      "src": "8995:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8995:8:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9005:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "8944:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8944:63:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8944:63:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "9067:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "9063:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9063:20:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9085:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9056:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9056:31:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9056:31:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1070,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8955:38:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "9067:15:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1163,
                        "nodeType": "InlineAssembly",
                        "src": "8867:230:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1158,
                    "nodeType": "StructuredDocumentation",
                    "src": "8736:54:2",
                    "text": "@dev Allows the owner to renounce their ownership."
                  },
                  "functionSelector": "715018a6",
                  "id": 1165,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1161,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1160,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "8847:9:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "8847:9:2"
                    }
                  ],
                  "name": "renounceOwnership",
                  "nameLocation": "8804:17:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1159,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8821:2:2"
                  },
                  "returnParameters": {
                    "id": 1162,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8857:0:2"
                  },
                  "scope": 2638,
                  "src": "8795:308:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1179,
                    "nodeType": "Block",
                    "src": "9324:486:2",
                    "statements": [
                      {
                        "id": 1178,
                        "nodeType": "UncheckedBlock",
                        "src": "9334:470:2",
                        "statements": [
                          {
                            "assignments": [
                              1170
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1170,
                                "mutability": "mutable",
                                "name": "expires",
                                "nameLocation": "9366:7:2",
                                "nodeType": "VariableDeclaration",
                                "scope": 1178,
                                "src": "9358:15:2",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1169,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9358:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1176,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1175,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 1171,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "9376:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 1172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "9376:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1173,
                                  "name": "ownershipHandoverValidFor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1270,
                                  "src": "9394:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                                    "typeString": "function () view returns (uint64)"
                                  }
                                },
                                "id": 1174,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9394:27:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "9376:45:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9358:63:2"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "9444:350:2",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9528:4:2",
                                        "type": "",
                                        "value": "0x00"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9541:2:2",
                                                "type": "",
                                                "value": "96"
                                              },
                                              {
                                                "arguments": [],
                                                "functionName": {
                                                  "name": "caller",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "9545:6:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "9545:8:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "9537:3:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9537:17:2"
                                          },
                                          {
                                            "name": "_HANDOVER_SLOT_SEED",
                                            "nodeType": "YulIdentifier",
                                            "src": "9556:19:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "or",
                                          "nodeType": "YulIdentifier",
                                          "src": "9534:2:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9534:42:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "9521:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9521:56:2"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "9521:56:2"
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9611:4:2",
                                            "type": "",
                                            "value": "0x00"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9617:4:2",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "keccak256",
                                          "nodeType": "YulIdentifier",
                                          "src": "9601:9:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9601:21:2"
                                      },
                                      {
                                        "name": "expires",
                                        "nodeType": "YulIdentifier",
                                        "src": "9624:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "9594:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9594:38:2"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "9594:38:2"
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9718:1:2",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9721:1:2",
                                        "type": "",
                                        "value": "0"
                                      },
                                      {
                                        "name": "_OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE",
                                        "nodeType": "YulIdentifier",
                                        "src": "9724:45:2"
                                      },
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "caller",
                                          "nodeType": "YulIdentifier",
                                          "src": "9771:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9771:8:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "log2",
                                      "nodeType": "YulIdentifier",
                                      "src": "9713:4:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9713:67:2"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "9713:67:2"
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 1111,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9556:19:2",
                                "valueSize": 1
                              },
                              {
                                "declaration": 1074,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9724:45:2",
                                "valueSize": 1
                              },
                              {
                                "declaration": 1170,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9624:7:2",
                                "valueSize": 1
                              }
                            ],
                            "id": 1177,
                            "nodeType": "InlineAssembly",
                            "src": "9435:359:2"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1166,
                    "nodeType": "StructuredDocumentation",
                    "src": "9109:151:2",
                    "text": "@dev Request a two-step ownership handover to the caller.\n The request will be automatically expire in 48 hours (172800 seconds) by default."
                  },
                  "functionSelector": "25692962",
                  "id": 1180,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "requestOwnershipHandover",
                  "nameLocation": "9274:24:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1167,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9298:2:2"
                  },
                  "returnParameters": {
                    "id": 1168,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9324:0:2"
                  },
                  "scope": 2638,
                  "src": "9265:545:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1185,
                    "nodeType": "Block",
                    "src": "9950:343:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "9969:318:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10045:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10058:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "caller",
                                              "nodeType": "YulIdentifier",
                                              "src": "10062:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10062:8:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "10054:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10054:17:2"
                                      },
                                      {
                                        "name": "_HANDOVER_SLOT_SEED",
                                        "nodeType": "YulIdentifier",
                                        "src": "10073:19:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "10051:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10051:42:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10038:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10038:56:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10038:56:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10124:4:2",
                                        "type": "",
                                        "value": "0x00"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10130:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "10114:9:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10114:21:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10137:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10107:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10107:32:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10107:32:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10216:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10219:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "10222:44:2"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "caller",
                                      "nodeType": "YulIdentifier",
                                      "src": "10268:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10268:8:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log2",
                                  "nodeType": "YulIdentifier",
                                  "src": "10211:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10211:66:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10211:66:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1111,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10073:19:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1078,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10222:44:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1184,
                        "nodeType": "InlineAssembly",
                        "src": "9960:327:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1181,
                    "nodeType": "StructuredDocumentation",
                    "src": "9816:71:2",
                    "text": "@dev Cancels the two-step ownership handover to the caller, if any."
                  },
                  "functionSelector": "54d1f13d",
                  "id": 1186,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelOwnershipHandover",
                  "nameLocation": "9901:23:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1182,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9924:2:2"
                  },
                  "returnParameters": {
                    "id": 1183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9950:0:2"
                  },
                  "scope": 2638,
                  "src": "9892:401:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1195,
                    "nodeType": "Block",
                    "src": "10570:860:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "10589:835:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10643:46:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10663:2:2",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10671:2:2",
                                        "type": "",
                                        "value": "96"
                                      },
                                      {
                                        "name": "pendingOwner",
                                        "nodeType": "YulIdentifier",
                                        "src": "10675:12:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10667:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10667:21:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "10659:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10659:30:2"
                              },
                              "variableNames": [
                                {
                                  "name": "pendingOwner",
                                  "nodeType": "YulIdentifier",
                                  "src": "10643:12:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10764:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10777:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "pendingOwner",
                                            "nodeType": "YulIdentifier",
                                            "src": "10781:12:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "10773:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10773:21:2"
                                      },
                                      {
                                        "name": "_HANDOVER_SLOT_SEED",
                                        "nodeType": "YulIdentifier",
                                        "src": "10796:19:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "10770:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10770:46:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10757:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10757:60:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10757:60:2"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10830:41:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10860:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10866:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nodeType": "YulIdentifier",
                                  "src": "10850:9:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10850:21:2"
                              },
                              "variables": [
                                {
                                  "name": "handoverSlot",
                                  "nodeType": "YulTypedName",
                                  "src": "10834:12:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10987:116:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11012:4:2",
                                          "type": "",
                                          "value": "0x00"
                                        },
                                        {
                                          "name": "_NO_HANDOVER_REQUEST_ERROR_SELECTOR",
                                          "nodeType": "YulIdentifier",
                                          "src": "11018:35:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11005:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11005:49:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11005:49:2"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11078:4:2",
                                          "type": "",
                                          "value": "0x1c"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11084:4:2",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11071:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11071:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11071:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "timestamp",
                                      "nodeType": "YulIdentifier",
                                      "src": "10953:9:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10953:11:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "handoverSlot",
                                        "nodeType": "YulIdentifier",
                                        "src": "10972:12:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sload",
                                      "nodeType": "YulIdentifier",
                                      "src": "10966:5:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10966:19:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10950:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10950:36:2"
                              },
                              "nodeType": "YulIf",
                              "src": "10947:156:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "handoverSlot",
                                    "nodeType": "YulIdentifier",
                                    "src": "11166:12:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11180:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11159:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11159:23:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11159:23:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11254:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11257:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "_OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE",
                                    "nodeType": "YulIdentifier",
                                    "src": "11260:38:2"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "caller",
                                      "nodeType": "YulIdentifier",
                                      "src": "11300:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11300:8:2"
                                  },
                                  {
                                    "name": "pendingOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "11310:12:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "log3",
                                  "nodeType": "YulIdentifier",
                                  "src": "11249:4:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11249:74:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11249:74:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "11383:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11379:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11379:20:2"
                                  },
                                  {
                                    "name": "pendingOwner",
                                    "nodeType": "YulIdentifier",
                                    "src": "11401:12:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11372:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11372:42:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11372:42:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1111,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10796:19:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1103,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11018:35:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1070,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11260:38:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11383:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1189,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10643:12:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1189,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10675:12:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1189,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10781:12:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1189,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11310:12:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1189,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11401:12:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1194,
                        "nodeType": "InlineAssembly",
                        "src": "10580:844:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1187,
                    "nodeType": "StructuredDocumentation",
                    "src": "10299:176:2",
                    "text": "@dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.\n Reverts if there is no existing ownership handover requested by `pendingOwner`."
                  },
                  "functionSelector": "f04e283e",
                  "id": 1196,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1192,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1191,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "10560:9:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "10560:9:2"
                    }
                  ],
                  "name": "completeOwnershipHandover",
                  "nameLocation": "10489:25:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1189,
                        "mutability": "mutable",
                        "name": "pendingOwner",
                        "nameLocation": "10523:12:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1196,
                        "src": "10515:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1188,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10515:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10514:22:2"
                  },
                  "returnParameters": {
                    "id": 1193,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10570:0:2"
                  },
                  "scope": 2638,
                  "src": "10480:950:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1211,
                    "nodeType": "Block",
                    "src": "11654:41:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1207,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1199,
                              "src": "11676:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1208,
                              "name": "roles",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1201,
                              "src": "11682:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1206,
                            "name": "_grantRoles",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1137,
                            "src": "11664:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11664:24:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1210,
                        "nodeType": "ExpressionStatement",
                        "src": "11664:24:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1197,
                    "nodeType": "StructuredDocumentation",
                    "src": "11436:131:2",
                    "text": "@dev Allows the owner to grant `user` `roles`.\n If the `user` already has a role, then it will be an no-op for the role."
                  },
                  "functionSelector": "1c10893f",
                  "id": 1212,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1204,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1203,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "11644:9:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "11644:9:2"
                    }
                  ],
                  "name": "grantRoles",
                  "nameLocation": "11581:10:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1199,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "11600:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1212,
                        "src": "11592:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1198,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11592:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1201,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "11614:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1212,
                        "src": "11606:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11606:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11591:29:2"
                  },
                  "returnParameters": {
                    "id": 1205,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11654:0:2"
                  },
                  "scope": 2638,
                  "src": "11572:123:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1227,
                    "nodeType": "Block",
                    "src": "11923:42:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1223,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1215,
                              "src": "11946:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1224,
                              "name": "roles",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1217,
                              "src": "11952:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1222,
                            "name": "_removeRoles",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1147,
                            "src": "11933:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11933:25:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1226,
                        "nodeType": "ExpressionStatement",
                        "src": "11933:25:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1213,
                    "nodeType": "StructuredDocumentation",
                    "src": "11701:134:2",
                    "text": "@dev Allows the owner to remove `user` `roles`.\n If the `user` does not have a role, then it will be an no-op for the role."
                  },
                  "functionSelector": "4a4ee7b1",
                  "id": 1228,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1220,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1219,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "11913:9:2"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "11913:9:2"
                    }
                  ],
                  "name": "revokeRoles",
                  "nameLocation": "11849:11:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1215,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "11869:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1228,
                        "src": "11861:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1214,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11861:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1217,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "11883:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1228,
                        "src": "11875:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11875:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11860:29:2"
                  },
                  "returnParameters": {
                    "id": 1221,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11923:0:2"
                  },
                  "scope": 2638,
                  "src": "11840:125:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1240,
                    "nodeType": "Block",
                    "src": "12172:48:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1235,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "12195:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "12195:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1237,
                              "name": "roles",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1231,
                              "src": "12207:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1234,
                            "name": "_removeRoles",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1147,
                            "src": "12182:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12182:31:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1239,
                        "nodeType": "ExpressionStatement",
                        "src": "12182:31:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1229,
                    "nodeType": "StructuredDocumentation",
                    "src": "11971:135:2",
                    "text": "@dev Allow the caller to remove their own roles.\n If the caller does not have a role, then it will be an no-op for the role."
                  },
                  "functionSelector": "183a4f6e",
                  "id": 1241,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "renounceRoles",
                  "nameLocation": "12120:13:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1232,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1231,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "12142:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1241,
                        "src": "12134:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1230,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12134:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12133:15:2"
                  },
                  "returnParameters": {
                    "id": 1233,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12172:0:2"
                  },
                  "scope": 2638,
                  "src": "12111:109:2",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1248,
                    "nodeType": "Block",
                    "src": "12527:86:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "12546:61:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12560:37:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "12580:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "12576:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12576:20:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sload",
                                  "nodeType": "YulIdentifier",
                                  "src": "12570:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12570:27:2"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "12560:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12580:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1245,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12560:6:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1247,
                        "nodeType": "InlineAssembly",
                        "src": "12537:70:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1242,
                    "nodeType": "StructuredDocumentation",
                    "src": "12417:43:2",
                    "text": "@dev Returns the owner of the contract."
                  },
                  "functionSelector": "8da5cb5b",
                  "id": 1249,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nameLocation": "12474:5:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1243,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12479:2:2"
                  },
                  "returnParameters": {
                    "id": 1246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1245,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "12519:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1249,
                        "src": "12511:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12511:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12510:16:2"
                  },
                  "scope": 2638,
                  "src": "12465:148:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1258,
                    "nodeType": "Block",
                    "src": "12819:241:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "12838:216:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12901:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12914:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "pendingOwner",
                                            "nodeType": "YulIdentifier",
                                            "src": "12918:12:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "12910:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12910:21:2"
                                      },
                                      {
                                        "name": "_HANDOVER_SLOT_SEED",
                                        "nodeType": "YulIdentifier",
                                        "src": "12933:19:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "12907:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12907:46:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12894:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12894:60:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12894:60:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13006:38:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13032:4:2",
                                        "type": "",
                                        "value": "0x00"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13038:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "13022:9:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13022:21:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13016:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13016:28:2"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "13006:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1111,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12933:19:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1252,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12918:12:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1255,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13006:6:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1257,
                        "nodeType": "InlineAssembly",
                        "src": "12829:225:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1250,
                    "nodeType": "StructuredDocumentation",
                    "src": "12619:92:2",
                    "text": "@dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
                  },
                  "functionSelector": "fee81cf4",
                  "id": 1259,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownershipHandoverExpiresAt",
                  "nameLocation": "12725:26:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1253,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1252,
                        "mutability": "mutable",
                        "name": "pendingOwner",
                        "nameLocation": "12760:12:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1259,
                        "src": "12752:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1251,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12752:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12751:22:2"
                  },
                  "returnParameters": {
                    "id": 1256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1255,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "12811:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1259,
                        "src": "12803:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12803:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12802:16:2"
                  },
                  "scope": 2638,
                  "src": "12716:344:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1269,
                    "nodeType": "Block",
                    "src": "13225:33:2",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_rational_172800_by_1",
                            "typeString": "int_const 172800"
                          },
                          "id": 1267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "3438",
                            "id": 1265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13242:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_48_by_1",
                              "typeString": "int_const 48"
                            },
                            "value": "48"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "33363030",
                            "id": 1266,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13247:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3600_by_1",
                              "typeString": "int_const 3600"
                            },
                            "value": "3600"
                          },
                          "src": "13242:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_172800_by_1",
                            "typeString": "int_const 172800"
                          }
                        },
                        "functionReturnParameters": 1264,
                        "id": 1268,
                        "nodeType": "Return",
                        "src": "13235:16:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1260,
                    "nodeType": "StructuredDocumentation",
                    "src": "13066:80:2",
                    "text": "@dev Returns how long a two-step ownership handover is valid for in seconds."
                  },
                  "functionSelector": "d7533f02",
                  "id": 1270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownershipHandoverValidFor",
                  "nameLocation": "13160:25:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1261,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13185:2:2"
                  },
                  "returnParameters": {
                    "id": 1264,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1263,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1270,
                        "src": "13217:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 1262,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "13217:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13216:8:2"
                  },
                  "scope": 2638,
                  "src": "13151:107:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1281,
                    "nodeType": "Block",
                    "src": "13411:358:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "13430:333:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13489:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13502:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "13506:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "13498:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13498:13:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "13513:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "13495:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13495:34:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13482:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13482:48:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13482:48:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13687:66:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "13731:4:2",
                                                    "type": "",
                                                    "value": "0x00"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "13737:4:2",
                                                    "type": "",
                                                    "value": "0x20"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "keccak256",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13721:9:2"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "13721:21:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sload",
                                              "nodeType": "YulIdentifier",
                                              "src": "13715:5:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "13715:28:2"
                                          },
                                          {
                                            "name": "roles",
                                            "nodeType": "YulIdentifier",
                                            "src": "13745:5:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "13711:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13711:40:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "13704:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13704:48:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "13697:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13697:56:2"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "13687:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13513:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1278,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13687:6:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1275,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13745:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1273,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13506:4:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1280,
                        "nodeType": "InlineAssembly",
                        "src": "13421:342:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1271,
                    "nodeType": "StructuredDocumentation",
                    "src": "13264:51:2",
                    "text": "@dev Returns whether `user` has any of `roles`."
                  },
                  "functionSelector": "514e62fc",
                  "id": 1282,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hasAnyRole",
                  "nameLocation": "13329:10:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1273,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "13348:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1282,
                        "src": "13340:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13340:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1275,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "13362:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1282,
                        "src": "13354:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13354:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13339:29:2"
                  },
                  "returnParameters": {
                    "id": 1279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1278,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "13403:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1282,
                        "src": "13398:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1277,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "13398:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13397:13:2"
                  },
                  "scope": 2638,
                  "src": "13320:449:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1293,
                    "nodeType": "Block",
                    "src": "13923:290:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "13942:265:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14001:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "14014:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "14018:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "14010:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14010:13:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "14025:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "14007:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14007:34:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13994:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13994:48:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13994:48:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14136:61:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14169:4:2",
                                                "type": "",
                                                "value": "0x00"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14175:4:2",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "14159:9:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "14159:21:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "14153:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14153:28:2"
                                      },
                                      {
                                        "name": "roles",
                                        "nodeType": "YulIdentifier",
                                        "src": "14183:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "14149:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14149:40:2"
                                  },
                                  {
                                    "name": "roles",
                                    "nodeType": "YulIdentifier",
                                    "src": "14191:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "14146:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14146:51:2"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "14136:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14025:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1290,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14136:6:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1287,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14183:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1287,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14191:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1285,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14018:4:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1292,
                        "nodeType": "InlineAssembly",
                        "src": "13933:274:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1283,
                    "nodeType": "StructuredDocumentation",
                    "src": "13775:51:2",
                    "text": "@dev Returns whether `user` has all of `roles`."
                  },
                  "functionSelector": "1cd64df4",
                  "id": 1294,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hasAllRoles",
                  "nameLocation": "13840:11:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1288,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1285,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "13860:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1294,
                        "src": "13852:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1284,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13852:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1287,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "13874:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1294,
                        "src": "13866:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1286,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13866:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13851:29:2"
                  },
                  "returnParameters": {
                    "id": 1291,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1290,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "13915:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1294,
                        "src": "13910:11:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1289,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "13910:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13909:13:2"
                  },
                  "scope": 2638,
                  "src": "13831:382:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1303,
                    "nodeType": "Block",
                    "src": "14336:223:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "14355:198:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14414:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "14427:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "user",
                                            "nodeType": "YulIdentifier",
                                            "src": "14431:4:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "14423:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14423:13:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "14438:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "14420:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14420:34:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14407:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14407:48:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14407:48:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14506:37:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14531:4:2",
                                        "type": "",
                                        "value": "0x00"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14537:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "14521:9:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14521:21:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14515:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14515:28:2"
                              },
                              "variableNames": [
                                {
                                  "name": "roles",
                                  "nodeType": "YulIdentifier",
                                  "src": "14506:5:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14438:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1300,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14506:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1297,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14431:4:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1302,
                        "nodeType": "InlineAssembly",
                        "src": "14346:207:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1295,
                    "nodeType": "StructuredDocumentation",
                    "src": "14219:37:2",
                    "text": "@dev Returns the roles of `user`."
                  },
                  "functionSelector": "2de94807",
                  "id": 1304,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rolesOf",
                  "nameLocation": "14270:7:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1298,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1297,
                        "mutability": "mutable",
                        "name": "user",
                        "nameLocation": "14286:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1304,
                        "src": "14278:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14278:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14277:14:2"
                  },
                  "returnParameters": {
                    "id": 1301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1300,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "14329:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1304,
                        "src": "14321:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1299,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14321:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14320:15:2"
                  },
                  "scope": 2638,
                  "src": "14261:298:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1314,
                    "nodeType": "Block",
                    "src": "14880:401:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "14899:376:2",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14950:28:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ordinals",
                                    "nodeType": "YulIdentifier",
                                    "src": "14963:8:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14973:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14959:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14959:19:2"
                              },
                              "variables": [
                                {
                                  "name": "o",
                                  "nodeType": "YulTypedName",
                                  "src": "14954:1:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15052:42:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "o",
                                    "nodeType": "YulIdentifier",
                                    "src": "15067:1:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15074:1:2",
                                        "type": "",
                                        "value": "5"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "ordinals",
                                            "nodeType": "YulIdentifier",
                                            "src": "15083:8:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "15077:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "15077:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "15070:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15070:23:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15063:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15063:31:2"
                              },
                              "variables": [
                                {
                                  "name": "end",
                                  "nodeType": "YulTypedName",
                                  "src": "15056:3:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15186:79:2",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15204:47:2",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "roles",
                                          "nodeType": "YulIdentifier",
                                          "src": "15216:5:2"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "o",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "15237:1:2"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "mload",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "15231:5:2"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "15231:8:2"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "15241:4:2",
                                                  "type": "",
                                                  "value": "0xff"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "15227:3:2"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "15227:19:2"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "15248:1:2",
                                              "type": "",
                                              "value": "1"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "15223:3:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15223:27:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "or",
                                        "nodeType": "YulIdentifier",
                                        "src": "15213:2:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15213:38:2"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "roles",
                                        "nodeType": "YulIdentifier",
                                        "src": "15204:5:2"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "o",
                                        "nodeType": "YulIdentifier",
                                        "src": "15155:1:2"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "15158:3:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "15152:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15152:10:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "15145:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15145:18:2"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "15164:21:2",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15166:17:2",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "o",
                                          "nodeType": "YulIdentifier",
                                          "src": "15175:1:2"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15178:4:2",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "15171:3:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15171:12:2"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "o",
                                        "nodeType": "YulIdentifier",
                                        "src": "15166:1:2"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "15142:2:2",
                                "statements": []
                              },
                              "src": "15138:127:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1308,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14963:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1308,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15083:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1311,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15204:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1311,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15216:5:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1313,
                        "nodeType": "InlineAssembly",
                        "src": "14890:385:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1305,
                    "nodeType": "StructuredDocumentation",
                    "src": "14565:222:2",
                    "text": "@dev Convenience function to return a `roles` bitmap from an array of `ordinals`.\n This is meant for frontends like Etherscan, and is therefore not fully optimized.\n Not recommended to be called on-chain."
                  },
                  "functionSelector": "13a661ed",
                  "id": 1315,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rolesFromOrdinals",
                  "nameLocation": "14801:17:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1308,
                        "mutability": "mutable",
                        "name": "ordinals",
                        "nameLocation": "14834:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1315,
                        "src": "14819:23:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint8_$dyn_memory_ptr",
                          "typeString": "uint8[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1306,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "14819:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 1307,
                          "nodeType": "ArrayTypeName",
                          "src": "14819:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint8_$dyn_storage_ptr",
                            "typeString": "uint8[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14818:25:2"
                  },
                  "returnParameters": {
                    "id": 1312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1311,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "14873:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1315,
                        "src": "14865:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1310,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14865:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14864:15:2"
                  },
                  "scope": 2638,
                  "src": "14792:489:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1325,
                    "nodeType": "Block",
                    "src": "15604:1025:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "15623:1000:2",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15689:33:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15710:4:2",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "15704:5:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15704:11:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15717:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15700:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15700:22:2"
                              },
                              "variables": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulTypedName",
                                  "src": "15693:3:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15978:355:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "16003:3:2"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "16008:1:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "15996:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15996:14:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15996:14:2"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "16164:38:2",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "16175:3:2"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "16184:1:2",
                                              "type": "",
                                              "value": "5"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "roles",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16191:5:2"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "16198:1:2",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "16187:3:2"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "16187:13:2"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "16180:3:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "16180:21:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "16171:3:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16171:31:2"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "16164:3:2"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "16219:22:2",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16232:1:2",
                                          "type": "",
                                          "value": "1"
                                        },
                                        {
                                          "name": "roles",
                                          "nodeType": "YulIdentifier",
                                          "src": "16235:5:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shr",
                                        "nodeType": "YulIdentifier",
                                        "src": "16228:3:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16228:13:2"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "roles",
                                        "nodeType": "YulIdentifier",
                                        "src": "16219:5:2"
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "16310:9:2",
                                      "statements": [
                                        {
                                          "nodeType": "YulBreak",
                                          "src": "16312:5:2"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "roles",
                                          "nodeType": "YulIdentifier",
                                          "src": "16303:5:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "16296:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16296:13:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "16293:26:2"
                                  }
                                ]
                              },
                              "condition": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "15957:1:2",
                                "type": "",
                                "value": "1"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "15959:18:2",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15961:14:2",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "15970:1:2"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15973:1:2",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "15966:3:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15966:9:2"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "15961:1:2"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "15942:14:2",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "15944:10:2",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "15953:1:2",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulTypedName",
                                        "src": "15948:1:2",
                                        "type": ""
                                      }
                                    ]
                                  }
                                ]
                              },
                              "src": "15938:395:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16409:23:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16427:4:2",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "16421:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16421:11:2"
                              },
                              "variableNames": [
                                {
                                  "name": "ordinals",
                                  "nodeType": "YulIdentifier",
                                  "src": "16409:8:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16488:4:2",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "name": "ptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "16494:3:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16481:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16481:17:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16481:17:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ordinals",
                                    "nodeType": "YulIdentifier",
                                    "src": "16565:8:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16579:1:2",
                                        "type": "",
                                        "value": "5"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "ptr",
                                            "nodeType": "YulIdentifier",
                                            "src": "16586:3:2"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "ordinals",
                                                "nodeType": "YulIdentifier",
                                                "src": "16595:8:2"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "16605:4:2",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "16591:3:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16591:19:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "16582:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "16582:29:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shr",
                                      "nodeType": "YulIdentifier",
                                      "src": "16575:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16575:37:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16558:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16558:55:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16558:55:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1322,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16409:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1322,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16565:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1322,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16595:8:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1318,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16191:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1318,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16219:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1318,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16235:5:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1318,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16303:5:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1324,
                        "nodeType": "InlineAssembly",
                        "src": "15614:1009:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1316,
                    "nodeType": "StructuredDocumentation",
                    "src": "15287:224:2",
                    "text": "@dev Convenience function to return an array of `ordinals` from the `roles` bitmap.\n This is meant for frontends like Etherscan, and is therefore not fully optimized.\n Not recommended to be called on-chain."
                  },
                  "functionSelector": "7359e41f",
                  "id": 1326,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ordinalsFromRoles",
                  "nameLocation": "15525:17:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1319,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1318,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "15551:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1326,
                        "src": "15543:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1317,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15543:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15542:15:2"
                  },
                  "returnParameters": {
                    "id": 1323,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1322,
                        "mutability": "mutable",
                        "name": "ordinals",
                        "nameLocation": "15594:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1326,
                        "src": "15579:23:2",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint8_$dyn_memory_ptr",
                          "typeString": "uint8[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1320,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "15579:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 1321,
                          "nodeType": "ArrayTypeName",
                          "src": "15579:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint8_$dyn_storage_ptr",
                            "typeString": "uint8[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15578:25:2"
                  },
                  "scope": 2638,
                  "src": "15516:1113:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1331,
                    "nodeType": "Block",
                    "src": "16904:284:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "16923:248:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17052:109:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17077:4:2",
                                          "type": "",
                                          "value": "0x00"
                                        },
                                        {
                                          "name": "_UNAUTHORIZED_ERROR_SELECTOR",
                                          "nodeType": "YulIdentifier",
                                          "src": "17083:28:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "17070:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17070:42:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17070:42:2"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17136:4:2",
                                          "type": "",
                                          "value": "0x1c"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17142:4:2",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17129:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17129:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17129:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "caller",
                                          "nodeType": "YulIdentifier",
                                          "src": "17012:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17012:8:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_OWNER_SLOT_NOT",
                                                "nodeType": "YulIdentifier",
                                                "src": "17032:15:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "17028:3:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17028:20:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "17022:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17022:27:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "17009:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17009:41:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "17002:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17002:49:2"
                              },
                              "nodeType": "YulIf",
                              "src": "16999:162:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17032:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1095,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17083:28:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1329,
                        "nodeType": "InlineAssembly",
                        "src": "16914:257:2"
                      },
                      {
                        "id": 1330,
                        "nodeType": "PlaceholderStatement",
                        "src": "17180:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1327,
                    "nodeType": "StructuredDocumentation",
                    "src": "16814:56:2",
                    "text": "@dev Marks a function as only callable by the owner."
                  },
                  "id": 1332,
                  "name": "onlyOwner",
                  "nameLocation": "16884:9:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1328,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16893:2:2"
                  },
                  "src": "16875:313:2",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1339,
                    "nodeType": "Block",
                    "src": "17311:449:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "17330:413:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17389:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "17402:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "caller",
                                              "nodeType": "YulIdentifier",
                                              "src": "17406:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17406:8:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "17398:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17398:17:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "17417:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "17395:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17395:38:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17382:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17382:52:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17382:52:2"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17624:109:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17649:4:2",
                                          "type": "",
                                          "value": "0x00"
                                        },
                                        {
                                          "name": "_UNAUTHORIZED_ERROR_SELECTOR",
                                          "nodeType": "YulIdentifier",
                                          "src": "17655:28:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "17642:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17642:42:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17642:42:2"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17708:4:2",
                                          "type": "",
                                          "value": "0x1c"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17714:4:2",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17701:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17701:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17701:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "17602:4:2",
                                                "type": "",
                                                "value": "0x00"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "17608:4:2",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "17592:9:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17592:21:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "17586:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17586:28:2"
                                      },
                                      {
                                        "name": "roles",
                                        "nodeType": "YulIdentifier",
                                        "src": "17616:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "17582:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17582:40:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "17575:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17575:48:2"
                              },
                              "nodeType": "YulIf",
                              "src": "17572:161:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17417:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1095,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17655:28:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1335,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17616:5:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1337,
                        "nodeType": "InlineAssembly",
                        "src": "17321:422:2"
                      },
                      {
                        "id": 1338,
                        "nodeType": "PlaceholderStatement",
                        "src": "17752:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1333,
                    "nodeType": "StructuredDocumentation",
                    "src": "17194:70:2",
                    "text": "@dev Marks a function as only callable by an account with `roles`."
                  },
                  "id": 1340,
                  "name": "onlyRoles",
                  "nameLocation": "17278:9:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1336,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1335,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "17296:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1340,
                        "src": "17288:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1334,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17288:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17287:15:2"
                  },
                  "src": "17269:491:2",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1347,
                    "nodeType": "Block",
                    "src": "17972:616:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "17991:580:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "18112:449:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "18179:4:2",
                                          "type": "",
                                          "value": "0x00"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "18192:2:2",
                                                  "type": "",
                                                  "value": "96"
                                                },
                                                {
                                                  "arguments": [],
                                                  "functionName": {
                                                    "name": "caller",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "18196:6:2"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "18196:8:2"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "shl",
                                                "nodeType": "YulIdentifier",
                                                "src": "18188:3:2"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "18188:17:2"
                                            },
                                            {
                                              "name": "_OWNER_SLOT_NOT",
                                              "nodeType": "YulIdentifier",
                                              "src": "18207:15:2"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "or",
                                            "nodeType": "YulIdentifier",
                                            "src": "18185:2:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "18185:38:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "18172:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18172:52:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "18172:52:2"
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "18426:121:2",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "18455:4:2",
                                                "type": "",
                                                "value": "0x00"
                                              },
                                              {
                                                "name": "_UNAUTHORIZED_ERROR_SELECTOR",
                                                "nodeType": "YulIdentifier",
                                                "src": "18461:28:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "18448:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18448:42:2"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "18448:42:2"
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "18518:4:2",
                                                "type": "",
                                                "value": "0x1c"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "18524:4:2",
                                                "type": "",
                                                "value": "0x04"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "18511:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18511:18:2"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "18511:18:2"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "18404:4:2",
                                                      "type": "",
                                                      "value": "0x00"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "18410:4:2",
                                                      "type": "",
                                                      "value": "0x20"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "keccak256",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "18394:9:2"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "18394:21:2"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sload",
                                                "nodeType": "YulIdentifier",
                                                "src": "18388:5:2"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "18388:28:2"
                                            },
                                            {
                                              "name": "roles",
                                              "nodeType": "YulIdentifier",
                                              "src": "18418:5:2"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "18384:3:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "18384:40:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "18377:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18377:48:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "18374:173:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "functionName": {
                                          "name": "caller",
                                          "nodeType": "YulIdentifier",
                                          "src": "18072:6:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18072:8:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_OWNER_SLOT_NOT",
                                                "nodeType": "YulIdentifier",
                                                "src": "18092:15:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "18088:3:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18088:20:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "18082:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18082:27:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "18069:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18069:41:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "18062:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18062:49:2"
                              },
                              "nodeType": "YulIf",
                              "src": "18059:502:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18092:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18207:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1095,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18461:28:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1343,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18418:5:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1345,
                        "nodeType": "InlineAssembly",
                        "src": "17982:589:2"
                      },
                      {
                        "id": 1346,
                        "nodeType": "PlaceholderStatement",
                        "src": "18580:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1341,
                    "nodeType": "StructuredDocumentation",
                    "src": "17766:152:2",
                    "text": "@dev Marks a function as only callable by the owner or by an account\n with `roles`. Checks for ownership first, then lazily checks for roles."
                  },
                  "id": 1348,
                  "name": "onlyOwnerOrRoles",
                  "nameLocation": "17932:16:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1343,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "17957:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1348,
                        "src": "17949:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17949:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17948:15:2"
                  },
                  "src": "17923:665:2",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1355,
                    "nodeType": "Block",
                    "src": "18797:604:2",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "18816:568:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "18875:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "18888:2:2",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "caller",
                                              "nodeType": "YulIdentifier",
                                              "src": "18892:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18892:8:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "18884:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18884:17:2"
                                      },
                                      {
                                        "name": "_OWNER_SLOT_NOT",
                                        "nodeType": "YulIdentifier",
                                        "src": "18903:15:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "18881:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18881:38:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "18868:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "18868:52:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "18868:52:2"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "19110:264:2",
                                "statements": [
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "19239:121:2",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "19268:4:2",
                                                "type": "",
                                                "value": "0x00"
                                              },
                                              {
                                                "name": "_UNAUTHORIZED_ERROR_SELECTOR",
                                                "nodeType": "YulIdentifier",
                                                "src": "19274:28:2"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "19261:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "19261:42:2"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "19261:42:2"
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "19331:4:2",
                                                "type": "",
                                                "value": "0x1c"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "19337:4:2",
                                                "type": "",
                                                "value": "0x04"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "19324:6:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "19324:18:2"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "19324:18:2"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [],
                                              "functionName": {
                                                "name": "caller",
                                                "nodeType": "YulIdentifier",
                                                "src": "19199:6:2"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "19199:8:2"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "_OWNER_SLOT_NOT",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "19219:15:2"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "not",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "19215:3:2"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "19215:20:2"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sload",
                                                "nodeType": "YulIdentifier",
                                                "src": "19209:5:2"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "19209:27:2"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "eq",
                                            "nodeType": "YulIdentifier",
                                            "src": "19196:2:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "19196:41:2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "iszero",
                                        "nodeType": "YulIdentifier",
                                        "src": "19189:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "19189:49:2"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "19186:174:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "19088:4:2",
                                                "type": "",
                                                "value": "0x00"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "19094:4:2",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "19078:9:2"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "19078:21:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "19072:5:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "19072:28:2"
                                      },
                                      {
                                        "name": "roles",
                                        "nodeType": "YulIdentifier",
                                        "src": "19102:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "19068:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19068:40:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "19061:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19061:48:2"
                              },
                              "nodeType": "YulIf",
                              "src": "19058:316:2"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18903:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1107,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19219:15:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1095,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19274:28:2",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1351,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19102:5:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 1353,
                        "nodeType": "InlineAssembly",
                        "src": "18807:577:2"
                      },
                      {
                        "id": 1354,
                        "nodeType": "PlaceholderStatement",
                        "src": "19393:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1349,
                    "nodeType": "StructuredDocumentation",
                    "src": "18594:149:2",
                    "text": "@dev Marks a function as only callable by an account with `roles`\n or the owner. Checks for roles first, then lazily checks for ownership."
                  },
                  "id": 1356,
                  "name": "onlyRolesOrOwner",
                  "nameLocation": "18757:16:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1351,
                        "mutability": "mutable",
                        "name": "roles",
                        "nameLocation": "18782:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 1356,
                        "src": "18774:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1350,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18774:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18773:15:2"
                  },
                  "src": "18748:653:2",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 1357,
                    "nodeType": "StructuredDocumentation",
                    "src": "19407:179:2",
                    "text": "-----------------------------------------------------------------------\n Role Constants\n -----------------------------------------------------------------------"
                  },
                  "id": 1362,
                  "mutability": "constant",
                  "name": "_ROLE_0",
                  "nameLocation": "19617:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19591:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19591:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "id": 1361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19627:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19632:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "19627:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1367,
                  "mutability": "constant",
                  "name": "_ROLE_1",
                  "nameLocation": "19665:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19639:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1363,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19639:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "id": 1366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19675:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19680:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "19675:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1372,
                  "mutability": "constant",
                  "name": "_ROLE_2",
                  "nameLocation": "19713:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19687:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19687:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4_by_1",
                      "typeString": "int_const 4"
                    },
                    "id": 1371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19723:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "32",
                      "id": 1370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19728:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "19723:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4_by_1",
                      "typeString": "int_const 4"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1377,
                  "mutability": "constant",
                  "name": "_ROLE_3",
                  "nameLocation": "19761:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19735:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1373,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19735:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_8_by_1",
                      "typeString": "int_const 8"
                    },
                    "id": 1376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19771:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "33",
                      "id": 1375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19776:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "src": "19771:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_8_by_1",
                      "typeString": "int_const 8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1382,
                  "mutability": "constant",
                  "name": "_ROLE_4",
                  "nameLocation": "19809:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19783:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1378,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19783:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_16_by_1",
                      "typeString": "int_const 16"
                    },
                    "id": 1381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19819:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "34",
                      "id": 1380,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19824:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_4_by_1",
                        "typeString": "int_const 4"
                      },
                      "value": "4"
                    },
                    "src": "19819:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_16_by_1",
                      "typeString": "int_const 16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1387,
                  "mutability": "constant",
                  "name": "_ROLE_5",
                  "nameLocation": "19857:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19831:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19831:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_32_by_1",
                      "typeString": "int_const 32"
                    },
                    "id": 1386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19867:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "35",
                      "id": 1385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19872:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_5_by_1",
                        "typeString": "int_const 5"
                      },
                      "value": "5"
                    },
                    "src": "19867:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_32_by_1",
                      "typeString": "int_const 32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1392,
                  "mutability": "constant",
                  "name": "_ROLE_6",
                  "nameLocation": "19905:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19879:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1388,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19879:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_64_by_1",
                      "typeString": "int_const 64"
                    },
                    "id": 1391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19915:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "36",
                      "id": 1390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19920:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_6_by_1",
                        "typeString": "int_const 6"
                      },
                      "value": "6"
                    },
                    "src": "19915:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_64_by_1",
                      "typeString": "int_const 64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1397,
                  "mutability": "constant",
                  "name": "_ROLE_7",
                  "nameLocation": "19953:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19927:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19927:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_128_by_1",
                      "typeString": "int_const 128"
                    },
                    "id": 1396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19963:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "37",
                      "id": 1395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19968:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_7_by_1",
                        "typeString": "int_const 7"
                      },
                      "value": "7"
                    },
                    "src": "19963:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_128_by_1",
                      "typeString": "int_const 128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1402,
                  "mutability": "constant",
                  "name": "_ROLE_8",
                  "nameLocation": "20001:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "19975:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1398,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19975:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_256_by_1",
                      "typeString": "int_const 256"
                    },
                    "id": 1401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20011:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "38",
                      "id": 1400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20016:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_8_by_1",
                        "typeString": "int_const 8"
                      },
                      "value": "8"
                    },
                    "src": "20011:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_256_by_1",
                      "typeString": "int_const 256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1407,
                  "mutability": "constant",
                  "name": "_ROLE_9",
                  "nameLocation": "20049:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20023:42:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1403,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20023:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_512_by_1",
                      "typeString": "int_const 512"
                    },
                    "id": 1406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20059:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "39",
                      "id": 1405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20064:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_9_by_1",
                        "typeString": "int_const 9"
                      },
                      "value": "9"
                    },
                    "src": "20059:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_512_by_1",
                      "typeString": "int_const 512"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1412,
                  "mutability": "constant",
                  "name": "_ROLE_10",
                  "nameLocation": "20097:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20071:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1408,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20071:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1024_by_1",
                      "typeString": "int_const 1024"
                    },
                    "id": 1411,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20108:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3130",
                      "id": 1410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20113:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "src": "20108:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1024_by_1",
                      "typeString": "int_const 1024"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1417,
                  "mutability": "constant",
                  "name": "_ROLE_11",
                  "nameLocation": "20147:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20121:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20121:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2048_by_1",
                      "typeString": "int_const 2048"
                    },
                    "id": 1416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3131",
                      "id": 1415,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20163:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_11_by_1",
                        "typeString": "int_const 11"
                      },
                      "value": "11"
                    },
                    "src": "20158:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2048_by_1",
                      "typeString": "int_const 2048"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1422,
                  "mutability": "constant",
                  "name": "_ROLE_12",
                  "nameLocation": "20197:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20171:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1418,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20171:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4096_by_1",
                      "typeString": "int_const 4096"
                    },
                    "id": 1421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20208:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3132",
                      "id": 1420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20213:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_12_by_1",
                        "typeString": "int_const 12"
                      },
                      "value": "12"
                    },
                    "src": "20208:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4096_by_1",
                      "typeString": "int_const 4096"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1427,
                  "mutability": "constant",
                  "name": "_ROLE_13",
                  "nameLocation": "20247:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20221:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20221:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_8192_by_1",
                      "typeString": "int_const 8192"
                    },
                    "id": 1426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1424,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20258:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3133",
                      "id": 1425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20263:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_13_by_1",
                        "typeString": "int_const 13"
                      },
                      "value": "13"
                    },
                    "src": "20258:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_8192_by_1",
                      "typeString": "int_const 8192"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1432,
                  "mutability": "constant",
                  "name": "_ROLE_14",
                  "nameLocation": "20297:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20271:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1428,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20271:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_16384_by_1",
                      "typeString": "int_const 16384"
                    },
                    "id": 1431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20308:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3134",
                      "id": 1430,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20313:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_14_by_1",
                        "typeString": "int_const 14"
                      },
                      "value": "14"
                    },
                    "src": "20308:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_16384_by_1",
                      "typeString": "int_const 16384"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1437,
                  "mutability": "constant",
                  "name": "_ROLE_15",
                  "nameLocation": "20347:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20321:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1433,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20321:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_32768_by_1",
                      "typeString": "int_const 32768"
                    },
                    "id": 1436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20358:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3135",
                      "id": 1435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20363:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_15_by_1",
                        "typeString": "int_const 15"
                      },
                      "value": "15"
                    },
                    "src": "20358:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_32768_by_1",
                      "typeString": "int_const 32768"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1442,
                  "mutability": "constant",
                  "name": "_ROLE_16",
                  "nameLocation": "20397:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20371:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_65536_by_1",
                      "typeString": "int_const 65536"
                    },
                    "id": 1441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20408:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3136",
                      "id": 1440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20413:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_16_by_1",
                        "typeString": "int_const 16"
                      },
                      "value": "16"
                    },
                    "src": "20408:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_65536_by_1",
                      "typeString": "int_const 65536"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1447,
                  "mutability": "constant",
                  "name": "_ROLE_17",
                  "nameLocation": "20447:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20421:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20421:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_131072_by_1",
                      "typeString": "int_const 131072"
                    },
                    "id": 1446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20458:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3137",
                      "id": 1445,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20463:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_17_by_1",
                        "typeString": "int_const 17"
                      },
                      "value": "17"
                    },
                    "src": "20458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_131072_by_1",
                      "typeString": "int_const 131072"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1452,
                  "mutability": "constant",
                  "name": "_ROLE_18",
                  "nameLocation": "20497:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20471:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1448,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20471:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_262144_by_1",
                      "typeString": "int_const 262144"
                    },
                    "id": 1451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3138",
                      "id": 1450,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20513:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_18_by_1",
                        "typeString": "int_const 18"
                      },
                      "value": "18"
                    },
                    "src": "20508:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_262144_by_1",
                      "typeString": "int_const 262144"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1457,
                  "mutability": "constant",
                  "name": "_ROLE_19",
                  "nameLocation": "20547:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20521:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1453,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20521:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_524288_by_1",
                      "typeString": "int_const 524288"
                    },
                    "id": 1456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20558:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3139",
                      "id": 1455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20563:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_19_by_1",
                        "typeString": "int_const 19"
                      },
                      "value": "19"
                    },
                    "src": "20558:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_524288_by_1",
                      "typeString": "int_const 524288"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1462,
                  "mutability": "constant",
                  "name": "_ROLE_20",
                  "nameLocation": "20597:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20571:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20571:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1048576_by_1",
                      "typeString": "int_const 1048576"
                    },
                    "id": 1461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20608:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3230",
                      "id": 1460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20613:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_20_by_1",
                        "typeString": "int_const 20"
                      },
                      "value": "20"
                    },
                    "src": "20608:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1048576_by_1",
                      "typeString": "int_const 1048576"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1467,
                  "mutability": "constant",
                  "name": "_ROLE_21",
                  "nameLocation": "20647:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20621:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1463,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20621:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2097152_by_1",
                      "typeString": "int_const 2097152"
                    },
                    "id": 1466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20658:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3231",
                      "id": 1465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20663:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_21_by_1",
                        "typeString": "int_const 21"
                      },
                      "value": "21"
                    },
                    "src": "20658:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2097152_by_1",
                      "typeString": "int_const 2097152"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1472,
                  "mutability": "constant",
                  "name": "_ROLE_22",
                  "nameLocation": "20697:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20671:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1468,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20671:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4194304_by_1",
                      "typeString": "int_const 4194304"
                    },
                    "id": 1471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20708:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3232",
                      "id": 1470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20713:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_22_by_1",
                        "typeString": "int_const 22"
                      },
                      "value": "22"
                    },
                    "src": "20708:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4194304_by_1",
                      "typeString": "int_const 4194304"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1477,
                  "mutability": "constant",
                  "name": "_ROLE_23",
                  "nameLocation": "20747:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20721:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20721:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_8388608_by_1",
                      "typeString": "int_const 8388608"
                    },
                    "id": 1476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20758:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3233",
                      "id": 1475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20763:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_23_by_1",
                        "typeString": "int_const 23"
                      },
                      "value": "23"
                    },
                    "src": "20758:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_8388608_by_1",
                      "typeString": "int_const 8388608"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1482,
                  "mutability": "constant",
                  "name": "_ROLE_24",
                  "nameLocation": "20797:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20771:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1478,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_16777216_by_1",
                      "typeString": "int_const 16777216"
                    },
                    "id": 1481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20808:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3234",
                      "id": 1480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20813:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_24_by_1",
                        "typeString": "int_const 24"
                      },
                      "value": "24"
                    },
                    "src": "20808:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_16777216_by_1",
                      "typeString": "int_const 16777216"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1487,
                  "mutability": "constant",
                  "name": "_ROLE_25",
                  "nameLocation": "20847:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20821:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20821:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_33554432_by_1",
                      "typeString": "int_const 33554432"
                    },
                    "id": 1486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20858:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3235",
                      "id": 1485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20863:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_25_by_1",
                        "typeString": "int_const 25"
                      },
                      "value": "25"
                    },
                    "src": "20858:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_33554432_by_1",
                      "typeString": "int_const 33554432"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1492,
                  "mutability": "constant",
                  "name": "_ROLE_26",
                  "nameLocation": "20897:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20871:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1488,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20871:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_67108864_by_1",
                      "typeString": "int_const 67108864"
                    },
                    "id": 1491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20908:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3236",
                      "id": 1490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20913:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_26_by_1",
                        "typeString": "int_const 26"
                      },
                      "value": "26"
                    },
                    "src": "20908:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_67108864_by_1",
                      "typeString": "int_const 67108864"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1497,
                  "mutability": "constant",
                  "name": "_ROLE_27",
                  "nameLocation": "20947:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20921:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20921:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_134217728_by_1",
                      "typeString": "int_const 134217728"
                    },
                    "id": 1496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20958:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3237",
                      "id": 1495,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20963:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_27_by_1",
                        "typeString": "int_const 27"
                      },
                      "value": "27"
                    },
                    "src": "20958:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_134217728_by_1",
                      "typeString": "int_const 134217728"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1502,
                  "mutability": "constant",
                  "name": "_ROLE_28",
                  "nameLocation": "20997:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "20971:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1498,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20971:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_268435456_by_1",
                      "typeString": "int_const 268435456"
                    },
                    "id": 1501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21008:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3238",
                      "id": 1500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21013:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_28_by_1",
                        "typeString": "int_const 28"
                      },
                      "value": "28"
                    },
                    "src": "21008:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_268435456_by_1",
                      "typeString": "int_const 268435456"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1507,
                  "mutability": "constant",
                  "name": "_ROLE_29",
                  "nameLocation": "21047:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21021:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1503,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21021:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_536870912_by_1",
                      "typeString": "int_const 536870912"
                    },
                    "id": 1506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1504,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21058:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3239",
                      "id": 1505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21063:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_29_by_1",
                        "typeString": "int_const 29"
                      },
                      "value": "29"
                    },
                    "src": "21058:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_536870912_by_1",
                      "typeString": "int_const 536870912"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1512,
                  "mutability": "constant",
                  "name": "_ROLE_30",
                  "nameLocation": "21097:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21071:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1508,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21071:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1073741824_by_1",
                      "typeString": "int_const 1073741824"
                    },
                    "id": 1511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21108:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3330",
                      "id": 1510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21113:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_30_by_1",
                        "typeString": "int_const 30"
                      },
                      "value": "30"
                    },
                    "src": "21108:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1073741824_by_1",
                      "typeString": "int_const 1073741824"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1517,
                  "mutability": "constant",
                  "name": "_ROLE_31",
                  "nameLocation": "21147:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21121:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21121:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2147483648_by_1",
                      "typeString": "int_const 2147483648"
                    },
                    "id": 1516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3331",
                      "id": 1515,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21163:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "21158:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2147483648_by_1",
                      "typeString": "int_const 2147483648"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1522,
                  "mutability": "constant",
                  "name": "_ROLE_32",
                  "nameLocation": "21197:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21171:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21171:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4294967296_by_1",
                      "typeString": "int_const 4294967296"
                    },
                    "id": 1521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21208:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 1520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21213:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "21208:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4294967296_by_1",
                      "typeString": "int_const 4294967296"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1527,
                  "mutability": "constant",
                  "name": "_ROLE_33",
                  "nameLocation": "21247:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21221:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21221:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_8589934592_by_1",
                      "typeString": "int_const 8589934592"
                    },
                    "id": 1526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21258:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3333",
                      "id": 1525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21263:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_33_by_1",
                        "typeString": "int_const 33"
                      },
                      "value": "33"
                    },
                    "src": "21258:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_8589934592_by_1",
                      "typeString": "int_const 8589934592"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1532,
                  "mutability": "constant",
                  "name": "_ROLE_34",
                  "nameLocation": "21297:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21271:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21271:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_17179869184_by_1",
                      "typeString": "int_const 17179869184"
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21308:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3334",
                      "id": 1530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21313:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_34_by_1",
                        "typeString": "int_const 34"
                      },
                      "value": "34"
                    },
                    "src": "21308:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_17179869184_by_1",
                      "typeString": "int_const 17179869184"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1537,
                  "mutability": "constant",
                  "name": "_ROLE_35",
                  "nameLocation": "21347:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21321:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21321:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_34359738368_by_1",
                      "typeString": "int_const 34359738368"
                    },
                    "id": 1536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21358:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3335",
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21363:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_35_by_1",
                        "typeString": "int_const 35"
                      },
                      "value": "35"
                    },
                    "src": "21358:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_34359738368_by_1",
                      "typeString": "int_const 34359738368"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1542,
                  "mutability": "constant",
                  "name": "_ROLE_36",
                  "nameLocation": "21397:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21371:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1538,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_68719476736_by_1",
                      "typeString": "int_const 68719476736"
                    },
                    "id": 1541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21408:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3336",
                      "id": 1540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21413:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_36_by_1",
                        "typeString": "int_const 36"
                      },
                      "value": "36"
                    },
                    "src": "21408:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_68719476736_by_1",
                      "typeString": "int_const 68719476736"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1547,
                  "mutability": "constant",
                  "name": "_ROLE_37",
                  "nameLocation": "21447:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21421:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21421:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_137438953472_by_1",
                      "typeString": "int_const 137438953472"
                    },
                    "id": 1546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21458:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3337",
                      "id": 1545,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21463:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_37_by_1",
                        "typeString": "int_const 37"
                      },
                      "value": "37"
                    },
                    "src": "21458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_137438953472_by_1",
                      "typeString": "int_const 137438953472"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1552,
                  "mutability": "constant",
                  "name": "_ROLE_38",
                  "nameLocation": "21497:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21471:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1548,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21471:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_274877906944_by_1",
                      "typeString": "int_const 274877906944"
                    },
                    "id": 1551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1549,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3338",
                      "id": 1550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21513:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_38_by_1",
                        "typeString": "int_const 38"
                      },
                      "value": "38"
                    },
                    "src": "21508:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_274877906944_by_1",
                      "typeString": "int_const 274877906944"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1557,
                  "mutability": "constant",
                  "name": "_ROLE_39",
                  "nameLocation": "21547:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21521:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21521:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_549755813888_by_1",
                      "typeString": "int_const 549755813888"
                    },
                    "id": 1556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21558:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3339",
                      "id": 1555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21563:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_39_by_1",
                        "typeString": "int_const 39"
                      },
                      "value": "39"
                    },
                    "src": "21558:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_549755813888_by_1",
                      "typeString": "int_const 549755813888"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1562,
                  "mutability": "constant",
                  "name": "_ROLE_40",
                  "nameLocation": "21597:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21571:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21571:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1099511627776_by_1",
                      "typeString": "int_const 1099511627776"
                    },
                    "id": 1561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21608:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3430",
                      "id": 1560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21613:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_40_by_1",
                        "typeString": "int_const 40"
                      },
                      "value": "40"
                    },
                    "src": "21608:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1099511627776_by_1",
                      "typeString": "int_const 1099511627776"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1567,
                  "mutability": "constant",
                  "name": "_ROLE_41",
                  "nameLocation": "21647:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21621:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21621:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2199023255552_by_1",
                      "typeString": "int_const 2199023255552"
                    },
                    "id": 1566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1564,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21658:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3431",
                      "id": 1565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21663:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_41_by_1",
                        "typeString": "int_const 41"
                      },
                      "value": "41"
                    },
                    "src": "21658:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2199023255552_by_1",
                      "typeString": "int_const 2199023255552"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1572,
                  "mutability": "constant",
                  "name": "_ROLE_42",
                  "nameLocation": "21697:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21671:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1568,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21671:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4398046511104_by_1",
                      "typeString": "int_const 4398046511104"
                    },
                    "id": 1571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1569,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21708:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3432",
                      "id": 1570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21713:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "21708:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4398046511104_by_1",
                      "typeString": "int_const 4398046511104"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1577,
                  "mutability": "constant",
                  "name": "_ROLE_43",
                  "nameLocation": "21747:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21721:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1573,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21721:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_8796093022208_by_1",
                      "typeString": "int_const 8796093022208"
                    },
                    "id": 1576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21758:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3433",
                      "id": 1575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21763:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_43_by_1",
                        "typeString": "int_const 43"
                      },
                      "value": "43"
                    },
                    "src": "21758:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_8796093022208_by_1",
                      "typeString": "int_const 8796093022208"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1582,
                  "mutability": "constant",
                  "name": "_ROLE_44",
                  "nameLocation": "21797:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21771:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1578,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_17592186044416_by_1",
                      "typeString": "int_const 17592186044416"
                    },
                    "id": 1581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21808:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3434",
                      "id": 1580,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21813:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_44_by_1",
                        "typeString": "int_const 44"
                      },
                      "value": "44"
                    },
                    "src": "21808:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_17592186044416_by_1",
                      "typeString": "int_const 17592186044416"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1587,
                  "mutability": "constant",
                  "name": "_ROLE_45",
                  "nameLocation": "21847:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21821:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21821:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_35184372088832_by_1",
                      "typeString": "int_const 35184372088832"
                    },
                    "id": 1586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21858:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3435",
                      "id": 1585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21863:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_45_by_1",
                        "typeString": "int_const 45"
                      },
                      "value": "45"
                    },
                    "src": "21858:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_35184372088832_by_1",
                      "typeString": "int_const 35184372088832"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1592,
                  "mutability": "constant",
                  "name": "_ROLE_46",
                  "nameLocation": "21897:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21871:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1588,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21871:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_70368744177664_by_1",
                      "typeString": "int_const 70368744177664"
                    },
                    "id": 1591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21908:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3436",
                      "id": 1590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21913:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_46_by_1",
                        "typeString": "int_const 46"
                      },
                      "value": "46"
                    },
                    "src": "21908:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_70368744177664_by_1",
                      "typeString": "int_const 70368744177664"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1597,
                  "mutability": "constant",
                  "name": "_ROLE_47",
                  "nameLocation": "21947:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21921:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21921:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_140737488355328_by_1",
                      "typeString": "int_const 140737488355328"
                    },
                    "id": 1596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21958:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3437",
                      "id": 1595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21963:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_47_by_1",
                        "typeString": "int_const 47"
                      },
                      "value": "47"
                    },
                    "src": "21958:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_140737488355328_by_1",
                      "typeString": "int_const 140737488355328"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1602,
                  "mutability": "constant",
                  "name": "_ROLE_48",
                  "nameLocation": "21997:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "21971:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1598,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21971:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_281474976710656_by_1",
                      "typeString": "int_const 281474976710656"
                    },
                    "id": 1601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22008:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3438",
                      "id": 1600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22013:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_48_by_1",
                        "typeString": "int_const 48"
                      },
                      "value": "48"
                    },
                    "src": "22008:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_281474976710656_by_1",
                      "typeString": "int_const 281474976710656"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1607,
                  "mutability": "constant",
                  "name": "_ROLE_49",
                  "nameLocation": "22047:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22021:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1603,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22021:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_562949953421312_by_1",
                      "typeString": "int_const 562949953421312"
                    },
                    "id": 1606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22058:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3439",
                      "id": 1605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22063:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_49_by_1",
                        "typeString": "int_const 49"
                      },
                      "value": "49"
                    },
                    "src": "22058:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_562949953421312_by_1",
                      "typeString": "int_const 562949953421312"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1612,
                  "mutability": "constant",
                  "name": "_ROLE_50",
                  "nameLocation": "22097:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22071:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1608,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22071:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1125899906842624_by_1",
                      "typeString": "int_const 1125899906842624"
                    },
                    "id": 1611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22108:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3530",
                      "id": 1610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22113:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_50_by_1",
                        "typeString": "int_const 50"
                      },
                      "value": "50"
                    },
                    "src": "22108:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1125899906842624_by_1",
                      "typeString": "int_const 1125899906842624"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1617,
                  "mutability": "constant",
                  "name": "_ROLE_51",
                  "nameLocation": "22147:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22121:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22121:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2251799813685248_by_1",
                      "typeString": "int_const 2251799813685248"
                    },
                    "id": 1616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3531",
                      "id": 1615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22163:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_51_by_1",
                        "typeString": "int_const 51"
                      },
                      "value": "51"
                    },
                    "src": "22158:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2251799813685248_by_1",
                      "typeString": "int_const 2251799813685248"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1622,
                  "mutability": "constant",
                  "name": "_ROLE_52",
                  "nameLocation": "22197:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22171:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1618,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22171:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4503599627370496_by_1",
                      "typeString": "int_const 4503599627370496"
                    },
                    "id": 1621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22208:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3532",
                      "id": 1620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22213:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_52_by_1",
                        "typeString": "int_const 52"
                      },
                      "value": "52"
                    },
                    "src": "22208:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4503599627370496_by_1",
                      "typeString": "int_const 4503599627370496"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1627,
                  "mutability": "constant",
                  "name": "_ROLE_53",
                  "nameLocation": "22247:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22221:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1623,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22221:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_9007199254740992_by_1",
                      "typeString": "int_const 9007199254740992"
                    },
                    "id": 1626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22258:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3533",
                      "id": 1625,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22263:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_53_by_1",
                        "typeString": "int_const 53"
                      },
                      "value": "53"
                    },
                    "src": "22258:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_9007199254740992_by_1",
                      "typeString": "int_const 9007199254740992"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1632,
                  "mutability": "constant",
                  "name": "_ROLE_54",
                  "nameLocation": "22297:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22271:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1628,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22271:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_18014398509481984_by_1",
                      "typeString": "int_const 18014398509481984"
                    },
                    "id": 1631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22308:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3534",
                      "id": 1630,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22313:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_54_by_1",
                        "typeString": "int_const 54"
                      },
                      "value": "54"
                    },
                    "src": "22308:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18014398509481984_by_1",
                      "typeString": "int_const 18014398509481984"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1637,
                  "mutability": "constant",
                  "name": "_ROLE_55",
                  "nameLocation": "22347:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22321:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22321:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_36028797018963968_by_1",
                      "typeString": "int_const 36028797018963968"
                    },
                    "id": 1636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22358:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3535",
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22363:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_55_by_1",
                        "typeString": "int_const 55"
                      },
                      "value": "55"
                    },
                    "src": "22358:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_36028797018963968_by_1",
                      "typeString": "int_const 36028797018963968"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1642,
                  "mutability": "constant",
                  "name": "_ROLE_56",
                  "nameLocation": "22397:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22371:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1638,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_72057594037927936_by_1",
                      "typeString": "int_const 72057594037927936"
                    },
                    "id": 1641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1639,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22408:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3536",
                      "id": 1640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22413:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_56_by_1",
                        "typeString": "int_const 56"
                      },
                      "value": "56"
                    },
                    "src": "22408:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_72057594037927936_by_1",
                      "typeString": "int_const 72057594037927936"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1647,
                  "mutability": "constant",
                  "name": "_ROLE_57",
                  "nameLocation": "22447:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22421:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1643,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22421:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_144115188075855872_by_1",
                      "typeString": "int_const 144115188075855872"
                    },
                    "id": 1646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22458:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3537",
                      "id": 1645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22463:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_57_by_1",
                        "typeString": "int_const 57"
                      },
                      "value": "57"
                    },
                    "src": "22458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_144115188075855872_by_1",
                      "typeString": "int_const 144115188075855872"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1652,
                  "mutability": "constant",
                  "name": "_ROLE_58",
                  "nameLocation": "22497:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22471:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1648,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22471:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_288230376151711744_by_1",
                      "typeString": "int_const 288230376151711744"
                    },
                    "id": 1651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3538",
                      "id": 1650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22513:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_58_by_1",
                        "typeString": "int_const 58"
                      },
                      "value": "58"
                    },
                    "src": "22508:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_288230376151711744_by_1",
                      "typeString": "int_const 288230376151711744"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1657,
                  "mutability": "constant",
                  "name": "_ROLE_59",
                  "nameLocation": "22547:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22521:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22521:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_576460752303423488_by_1",
                      "typeString": "int_const 576460752303423488"
                    },
                    "id": 1656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1654,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22558:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3539",
                      "id": 1655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22563:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_59_by_1",
                        "typeString": "int_const 59"
                      },
                      "value": "59"
                    },
                    "src": "22558:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_576460752303423488_by_1",
                      "typeString": "int_const 576460752303423488"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1662,
                  "mutability": "constant",
                  "name": "_ROLE_60",
                  "nameLocation": "22597:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22571:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1658,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22571:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1152921504606846976_by_1",
                      "typeString": "int_const 1152921504606846976"
                    },
                    "id": 1661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22608:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3630",
                      "id": 1660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22613:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_60_by_1",
                        "typeString": "int_const 60"
                      },
                      "value": "60"
                    },
                    "src": "22608:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1152921504606846976_by_1",
                      "typeString": "int_const 1152921504606846976"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1667,
                  "mutability": "constant",
                  "name": "_ROLE_61",
                  "nameLocation": "22647:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22621:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1663,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22621:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2305843009213693952_by_1",
                      "typeString": "int_const 2305843009213693952"
                    },
                    "id": 1666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22658:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3631",
                      "id": 1665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22663:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_61_by_1",
                        "typeString": "int_const 61"
                      },
                      "value": "61"
                    },
                    "src": "22658:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2305843009213693952_by_1",
                      "typeString": "int_const 2305843009213693952"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1672,
                  "mutability": "constant",
                  "name": "_ROLE_62",
                  "nameLocation": "22697:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22671:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1668,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22671:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4611686018427387904_by_1",
                      "typeString": "int_const 4611686018427387904"
                    },
                    "id": 1671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22708:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3632",
                      "id": 1670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22713:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_62_by_1",
                        "typeString": "int_const 62"
                      },
                      "value": "62"
                    },
                    "src": "22708:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4611686018427387904_by_1",
                      "typeString": "int_const 4611686018427387904"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1677,
                  "mutability": "constant",
                  "name": "_ROLE_63",
                  "nameLocation": "22747:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22721:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1673,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22721:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_9223372036854775808_by_1",
                      "typeString": "int_const 9223372036854775808"
                    },
                    "id": 1676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22758:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3633",
                      "id": 1675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22763:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_63_by_1",
                        "typeString": "int_const 63"
                      },
                      "value": "63"
                    },
                    "src": "22758:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_9223372036854775808_by_1",
                      "typeString": "int_const 9223372036854775808"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1682,
                  "mutability": "constant",
                  "name": "_ROLE_64",
                  "nameLocation": "22797:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22771:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                      "typeString": "int_const 18446744073709551616"
                    },
                    "id": 1681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22808:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3634",
                      "id": 1680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22813:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_64_by_1",
                        "typeString": "int_const 64"
                      },
                      "value": "64"
                    },
                    "src": "22808:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                      "typeString": "int_const 18446744073709551616"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1687,
                  "mutability": "constant",
                  "name": "_ROLE_65",
                  "nameLocation": "22847:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22821:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22821:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_36893488147419103232_by_1",
                      "typeString": "int_const 36893488147419103232"
                    },
                    "id": 1686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22858:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3635",
                      "id": 1685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22863:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65_by_1",
                        "typeString": "int_const 65"
                      },
                      "value": "65"
                    },
                    "src": "22858:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_36893488147419103232_by_1",
                      "typeString": "int_const 36893488147419103232"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1692,
                  "mutability": "constant",
                  "name": "_ROLE_66",
                  "nameLocation": "22897:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22871:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22871:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_73786976294838206464_by_1",
                      "typeString": "int_const 73786976294838206464"
                    },
                    "id": 1691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22908:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3636",
                      "id": 1690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22913:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_66_by_1",
                        "typeString": "int_const 66"
                      },
                      "value": "66"
                    },
                    "src": "22908:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_73786976294838206464_by_1",
                      "typeString": "int_const 73786976294838206464"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1697,
                  "mutability": "constant",
                  "name": "_ROLE_67",
                  "nameLocation": "22947:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22921:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1693,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22921:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_147573952589676412928_by_1",
                      "typeString": "int_const 147573952589676412928"
                    },
                    "id": 1696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1694,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22958:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3637",
                      "id": 1695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22963:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_67_by_1",
                        "typeString": "int_const 67"
                      },
                      "value": "67"
                    },
                    "src": "22958:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_147573952589676412928_by_1",
                      "typeString": "int_const 147573952589676412928"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1702,
                  "mutability": "constant",
                  "name": "_ROLE_68",
                  "nameLocation": "22997:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "22971:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22971:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_295147905179352825856_by_1",
                      "typeString": "int_const 295147905179352825856"
                    },
                    "id": 1701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23008:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3638",
                      "id": 1700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23013:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_68_by_1",
                        "typeString": "int_const 68"
                      },
                      "value": "68"
                    },
                    "src": "23008:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_295147905179352825856_by_1",
                      "typeString": "int_const 295147905179352825856"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1707,
                  "mutability": "constant",
                  "name": "_ROLE_69",
                  "nameLocation": "23047:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23021:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1703,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23021:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_590295810358705651712_by_1",
                      "typeString": "int_const 590295810358705651712"
                    },
                    "id": 1706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1704,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23058:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3639",
                      "id": 1705,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23063:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_69_by_1",
                        "typeString": "int_const 69"
                      },
                      "value": "69"
                    },
                    "src": "23058:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_590295810358705651712_by_1",
                      "typeString": "int_const 590295810358705651712"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1712,
                  "mutability": "constant",
                  "name": "_ROLE_70",
                  "nameLocation": "23097:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23071:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23071:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1180591620717411303424_by_1",
                      "typeString": "int_const 1180591620717411303424"
                    },
                    "id": 1711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23108:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3730",
                      "id": 1710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23113:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_70_by_1",
                        "typeString": "int_const 70"
                      },
                      "value": "70"
                    },
                    "src": "23108:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1180591620717411303424_by_1",
                      "typeString": "int_const 1180591620717411303424"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1717,
                  "mutability": "constant",
                  "name": "_ROLE_71",
                  "nameLocation": "23147:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23121:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1713,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23121:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2361183241434822606848_by_1",
                      "typeString": "int_const 2361183241434822606848"
                    },
                    "id": 1716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1714,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3731",
                      "id": 1715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23163:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_71_by_1",
                        "typeString": "int_const 71"
                      },
                      "value": "71"
                    },
                    "src": "23158:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2361183241434822606848_by_1",
                      "typeString": "int_const 2361183241434822606848"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1722,
                  "mutability": "constant",
                  "name": "_ROLE_72",
                  "nameLocation": "23197:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23171:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23171:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4722366482869645213696_by_1",
                      "typeString": "int_const 4722366482869645213696"
                    },
                    "id": 1721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23208:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3732",
                      "id": 1720,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23213:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_72_by_1",
                        "typeString": "int_const 72"
                      },
                      "value": "72"
                    },
                    "src": "23208:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4722366482869645213696_by_1",
                      "typeString": "int_const 4722366482869645213696"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1727,
                  "mutability": "constant",
                  "name": "_ROLE_73",
                  "nameLocation": "23247:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23221:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23221:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_9444732965739290427392_by_1",
                      "typeString": "int_const 9444732965739290427392"
                    },
                    "id": 1726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1724,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23258:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3733",
                      "id": 1725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23263:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_73_by_1",
                        "typeString": "int_const 73"
                      },
                      "value": "73"
                    },
                    "src": "23258:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_9444732965739290427392_by_1",
                      "typeString": "int_const 9444732965739290427392"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1732,
                  "mutability": "constant",
                  "name": "_ROLE_74",
                  "nameLocation": "23297:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23271:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1728,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23271:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_18889465931478580854784_by_1",
                      "typeString": "int_const 18889465931478580854784"
                    },
                    "id": 1731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1729,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23308:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3734",
                      "id": 1730,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23313:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_74_by_1",
                        "typeString": "int_const 74"
                      },
                      "value": "74"
                    },
                    "src": "23308:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18889465931478580854784_by_1",
                      "typeString": "int_const 18889465931478580854784"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1737,
                  "mutability": "constant",
                  "name": "_ROLE_75",
                  "nameLocation": "23347:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23321:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23321:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_37778931862957161709568_by_1",
                      "typeString": "int_const 37778931862957161709568"
                    },
                    "id": 1736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1734,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23358:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3735",
                      "id": 1735,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23363:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_75_by_1",
                        "typeString": "int_const 75"
                      },
                      "value": "75"
                    },
                    "src": "23358:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_37778931862957161709568_by_1",
                      "typeString": "int_const 37778931862957161709568"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1742,
                  "mutability": "constant",
                  "name": "_ROLE_76",
                  "nameLocation": "23397:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23371:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1738,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_75557863725914323419136_by_1",
                      "typeString": "int_const 75557863725914323419136"
                    },
                    "id": 1741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23408:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3736",
                      "id": 1740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23413:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_76_by_1",
                        "typeString": "int_const 76"
                      },
                      "value": "76"
                    },
                    "src": "23408:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_75557863725914323419136_by_1",
                      "typeString": "int_const 75557863725914323419136"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1747,
                  "mutability": "constant",
                  "name": "_ROLE_77",
                  "nameLocation": "23447:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23421:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1743,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23421:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_151115727451828646838272_by_1",
                      "typeString": "int_const 151115727451828646838272"
                    },
                    "id": 1746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23458:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3737",
                      "id": 1745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23463:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_77_by_1",
                        "typeString": "int_const 77"
                      },
                      "value": "77"
                    },
                    "src": "23458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_151115727451828646838272_by_1",
                      "typeString": "int_const 151115727451828646838272"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1752,
                  "mutability": "constant",
                  "name": "_ROLE_78",
                  "nameLocation": "23497:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23471:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1748,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23471:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_302231454903657293676544_by_1",
                      "typeString": "int_const 302231454903657293676544"
                    },
                    "id": 1751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3738",
                      "id": 1750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23513:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_78_by_1",
                        "typeString": "int_const 78"
                      },
                      "value": "78"
                    },
                    "src": "23508:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_302231454903657293676544_by_1",
                      "typeString": "int_const 302231454903657293676544"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1757,
                  "mutability": "constant",
                  "name": "_ROLE_79",
                  "nameLocation": "23547:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23521:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1753,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23521:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_604462909807314587353088_by_1",
                      "typeString": "int_const 604462909807314587353088"
                    },
                    "id": 1756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23558:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3739",
                      "id": 1755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23563:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_79_by_1",
                        "typeString": "int_const 79"
                      },
                      "value": "79"
                    },
                    "src": "23558:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_604462909807314587353088_by_1",
                      "typeString": "int_const 604462909807314587353088"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1762,
                  "mutability": "constant",
                  "name": "_ROLE_80",
                  "nameLocation": "23597:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23571:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23571:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1208925819614629174706176_by_1",
                      "typeString": "int_const 1208925819614629174706176"
                    },
                    "id": 1761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1759,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23608:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3830",
                      "id": 1760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23613:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_80_by_1",
                        "typeString": "int_const 80"
                      },
                      "value": "80"
                    },
                    "src": "23608:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1208925819614629174706176_by_1",
                      "typeString": "int_const 1208925819614629174706176"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1767,
                  "mutability": "constant",
                  "name": "_ROLE_81",
                  "nameLocation": "23647:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23621:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1763,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23621:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2417851639229258349412352_by_1",
                      "typeString": "int_const 2417851639229258349412352"
                    },
                    "id": 1766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23658:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3831",
                      "id": 1765,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23663:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_81_by_1",
                        "typeString": "int_const 81"
                      },
                      "value": "81"
                    },
                    "src": "23658:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2417851639229258349412352_by_1",
                      "typeString": "int_const 2417851639229258349412352"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1772,
                  "mutability": "constant",
                  "name": "_ROLE_82",
                  "nameLocation": "23697:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23671:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1768,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23671:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4835703278458516698824704_by_1",
                      "typeString": "int_const 4835703278458516698824704"
                    },
                    "id": 1771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23708:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3832",
                      "id": 1770,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23713:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_82_by_1",
                        "typeString": "int_const 82"
                      },
                      "value": "82"
                    },
                    "src": "23708:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4835703278458516698824704_by_1",
                      "typeString": "int_const 4835703278458516698824704"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1777,
                  "mutability": "constant",
                  "name": "_ROLE_83",
                  "nameLocation": "23747:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23721:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1773,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23721:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_9671406556917033397649408_by_1",
                      "typeString": "int_const 9671406556917033397649408"
                    },
                    "id": 1776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23758:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3833",
                      "id": 1775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23763:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_83_by_1",
                        "typeString": "int_const 83"
                      },
                      "value": "83"
                    },
                    "src": "23758:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_9671406556917033397649408_by_1",
                      "typeString": "int_const 9671406556917033397649408"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1782,
                  "mutability": "constant",
                  "name": "_ROLE_84",
                  "nameLocation": "23797:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23771:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1778,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_19342813113834066795298816_by_1",
                      "typeString": "int_const 19342813113834066795298816"
                    },
                    "id": 1781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1779,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23808:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3834",
                      "id": 1780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23813:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_84_by_1",
                        "typeString": "int_const 84"
                      },
                      "value": "84"
                    },
                    "src": "23808:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_19342813113834066795298816_by_1",
                      "typeString": "int_const 19342813113834066795298816"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1787,
                  "mutability": "constant",
                  "name": "_ROLE_85",
                  "nameLocation": "23847:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23821:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23821:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_38685626227668133590597632_by_1",
                      "typeString": "int_const 38685626227668133590597632"
                    },
                    "id": 1786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23858:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3835",
                      "id": 1785,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23863:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_85_by_1",
                        "typeString": "int_const 85"
                      },
                      "value": "85"
                    },
                    "src": "23858:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_38685626227668133590597632_by_1",
                      "typeString": "int_const 38685626227668133590597632"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1792,
                  "mutability": "constant",
                  "name": "_ROLE_86",
                  "nameLocation": "23897:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23871:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23871:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_77371252455336267181195264_by_1",
                      "typeString": "int_const 77371252455336267181195264"
                    },
                    "id": 1791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1789,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23908:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3836",
                      "id": 1790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23913:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86_by_1",
                        "typeString": "int_const 86"
                      },
                      "value": "86"
                    },
                    "src": "23908:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_77371252455336267181195264_by_1",
                      "typeString": "int_const 77371252455336267181195264"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1797,
                  "mutability": "constant",
                  "name": "_ROLE_87",
                  "nameLocation": "23947:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23921:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1793,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23921:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_154742504910672534362390528_by_1",
                      "typeString": "int_const 154742504910672534362390528"
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23958:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3837",
                      "id": 1795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23963:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_87_by_1",
                        "typeString": "int_const 87"
                      },
                      "value": "87"
                    },
                    "src": "23958:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_154742504910672534362390528_by_1",
                      "typeString": "int_const 154742504910672534362390528"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1802,
                  "mutability": "constant",
                  "name": "_ROLE_88",
                  "nameLocation": "23997:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "23971:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1798,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23971:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_309485009821345068724781056_by_1",
                      "typeString": "int_const 309485009821345068724781056"
                    },
                    "id": 1801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24008:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3838",
                      "id": 1800,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24013:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_88_by_1",
                        "typeString": "int_const 88"
                      },
                      "value": "88"
                    },
                    "src": "24008:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_309485009821345068724781056_by_1",
                      "typeString": "int_const 309485009821345068724781056"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1807,
                  "mutability": "constant",
                  "name": "_ROLE_89",
                  "nameLocation": "24047:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24021:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24021:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_618970019642690137449562112_by_1",
                      "typeString": "int_const 618970019642690137449562112"
                    },
                    "id": 1806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24058:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3839",
                      "id": 1805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24063:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_89_by_1",
                        "typeString": "int_const 89"
                      },
                      "value": "89"
                    },
                    "src": "24058:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_618970019642690137449562112_by_1",
                      "typeString": "int_const 618970019642690137449562112"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1812,
                  "mutability": "constant",
                  "name": "_ROLE_90",
                  "nameLocation": "24097:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24071:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24071:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1237940039285380274899124224_by_1",
                      "typeString": "int_const 1237940039285380274899124224"
                    },
                    "id": 1811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24108:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3930",
                      "id": 1810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24113:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_90_by_1",
                        "typeString": "int_const 90"
                      },
                      "value": "90"
                    },
                    "src": "24108:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1237940039285380274899124224_by_1",
                      "typeString": "int_const 1237940039285380274899124224"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1817,
                  "mutability": "constant",
                  "name": "_ROLE_91",
                  "nameLocation": "24147:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24121:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24121:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2475880078570760549798248448_by_1",
                      "typeString": "int_const 2475880078570760549798248448"
                    },
                    "id": 1816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24158:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3931",
                      "id": 1815,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24163:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_91_by_1",
                        "typeString": "int_const 91"
                      },
                      "value": "91"
                    },
                    "src": "24158:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2475880078570760549798248448_by_1",
                      "typeString": "int_const 2475880078570760549798248448"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1822,
                  "mutability": "constant",
                  "name": "_ROLE_92",
                  "nameLocation": "24197:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24171:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1818,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24171:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                      "typeString": "int_const 4951760157141521099596496896"
                    },
                    "id": 1821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24208:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3932",
                      "id": 1820,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24213:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_92_by_1",
                        "typeString": "int_const 92"
                      },
                      "value": "92"
                    },
                    "src": "24208:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                      "typeString": "int_const 4951760157141521099596496896"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1827,
                  "mutability": "constant",
                  "name": "_ROLE_93",
                  "nameLocation": "24247:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24221:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24221:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_9903520314283042199192993792_by_1",
                      "typeString": "int_const 9903520314283042199192993792"
                    },
                    "id": 1826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24258:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3933",
                      "id": 1825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24263:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_93_by_1",
                        "typeString": "int_const 93"
                      },
                      "value": "93"
                    },
                    "src": "24258:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_9903520314283042199192993792_by_1",
                      "typeString": "int_const 9903520314283042199192993792"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1832,
                  "mutability": "constant",
                  "name": "_ROLE_94",
                  "nameLocation": "24297:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24271:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1828,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24271:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_19807040628566084398385987584_by_1",
                      "typeString": "int_const 19807040628566084398385987584"
                    },
                    "id": 1831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24308:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3934",
                      "id": 1830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24313:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_94_by_1",
                        "typeString": "int_const 94"
                      },
                      "value": "94"
                    },
                    "src": "24308:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_19807040628566084398385987584_by_1",
                      "typeString": "int_const 19807040628566084398385987584"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1837,
                  "mutability": "constant",
                  "name": "_ROLE_95",
                  "nameLocation": "24347:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24321:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1833,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24321:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_39614081257132168796771975168_by_1",
                      "typeString": "int_const 39614081257132168796771975168"
                    },
                    "id": 1836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24358:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3935",
                      "id": 1835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24363:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_95_by_1",
                        "typeString": "int_const 95"
                      },
                      "value": "95"
                    },
                    "src": "24358:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_39614081257132168796771975168_by_1",
                      "typeString": "int_const 39614081257132168796771975168"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1842,
                  "mutability": "constant",
                  "name": "_ROLE_96",
                  "nameLocation": "24397:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24371:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_79228162514264337593543950336_by_1",
                      "typeString": "int_const 79228162514264337593543950336"
                    },
                    "id": 1841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24408:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3936",
                      "id": 1840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24413:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_96_by_1",
                        "typeString": "int_const 96"
                      },
                      "value": "96"
                    },
                    "src": "24408:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_79228162514264337593543950336_by_1",
                      "typeString": "int_const 79228162514264337593543950336"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1847,
                  "mutability": "constant",
                  "name": "_ROLE_97",
                  "nameLocation": "24447:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24421:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1843,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24421:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_158456325028528675187087900672_by_1",
                      "typeString": "int_const 158456325028528675187087900672"
                    },
                    "id": 1846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24458:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3937",
                      "id": 1845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24463:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_97_by_1",
                        "typeString": "int_const 97"
                      },
                      "value": "97"
                    },
                    "src": "24458:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_158456325028528675187087900672_by_1",
                      "typeString": "int_const 158456325028528675187087900672"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1852,
                  "mutability": "constant",
                  "name": "_ROLE_98",
                  "nameLocation": "24497:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24471:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1848,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24471:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_316912650057057350374175801344_by_1",
                      "typeString": "int_const 316912650057057350374175801344"
                    },
                    "id": 1851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24508:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3938",
                      "id": 1850,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24513:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_98_by_1",
                        "typeString": "int_const 98"
                      },
                      "value": "98"
                    },
                    "src": "24508:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_316912650057057350374175801344_by_1",
                      "typeString": "int_const 316912650057057350374175801344"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1857,
                  "mutability": "constant",
                  "name": "_ROLE_99",
                  "nameLocation": "24547:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24521:44:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24521:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_633825300114114700748351602688_by_1",
                      "typeString": "int_const 633825300114114700748351602688"
                    },
                    "id": 1856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1854,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24558:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "3939",
                      "id": 1855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24563:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_99_by_1",
                        "typeString": "int_const 99"
                      },
                      "value": "99"
                    },
                    "src": "24558:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_633825300114114700748351602688_by_1",
                      "typeString": "int_const 633825300114114700748351602688"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1862,
                  "mutability": "constant",
                  "name": "_ROLE_100",
                  "nameLocation": "24597:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24571:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1858,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24571:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1267650600228229401496703205376_by_1",
                      "typeString": "int_const 1267650600228229401496703205376"
                    },
                    "id": 1861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24609:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313030",
                      "id": 1860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24614:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_100_by_1",
                        "typeString": "int_const 100"
                      },
                      "value": "100"
                    },
                    "src": "24609:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1267650600228229401496703205376_by_1",
                      "typeString": "int_const 1267650600228229401496703205376"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1867,
                  "mutability": "constant",
                  "name": "_ROLE_101",
                  "nameLocation": "24649:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24623:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1863,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24623:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2535301200456458802993406410752_by_1",
                      "typeString": "int_const 2535301200456458802993406410752"
                    },
                    "id": 1866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1864,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24661:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313031",
                      "id": 1865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24666:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_101_by_1",
                        "typeString": "int_const 101"
                      },
                      "value": "101"
                    },
                    "src": "24661:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2535301200456458802993406410752_by_1",
                      "typeString": "int_const 2535301200456458802993406410752"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1872,
                  "mutability": "constant",
                  "name": "_ROLE_102",
                  "nameLocation": "24701:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24675:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24675:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5070602400912917605986812821504_by_1",
                      "typeString": "int_const 5070602400912917605986812821504"
                    },
                    "id": 1871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24713:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313032",
                      "id": 1870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24718:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_102_by_1",
                        "typeString": "int_const 102"
                      },
                      "value": "102"
                    },
                    "src": "24713:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5070602400912917605986812821504_by_1",
                      "typeString": "int_const 5070602400912917605986812821504"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1877,
                  "mutability": "constant",
                  "name": "_ROLE_103",
                  "nameLocation": "24753:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24727:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1873,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24727:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_10141204801825835211973625643008_by_1",
                      "typeString": "int_const 10141204801825835211973625643008"
                    },
                    "id": 1876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24765:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313033",
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24770:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_103_by_1",
                        "typeString": "int_const 103"
                      },
                      "value": "103"
                    },
                    "src": "24765:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10141204801825835211973625643008_by_1",
                      "typeString": "int_const 10141204801825835211973625643008"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1882,
                  "mutability": "constant",
                  "name": "_ROLE_104",
                  "nameLocation": "24805:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24779:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1878,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24779:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_20282409603651670423947251286016_by_1",
                      "typeString": "int_const 20282409603651670423947251286016"
                    },
                    "id": 1881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24817:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313034",
                      "id": 1880,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24822:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_104_by_1",
                        "typeString": "int_const 104"
                      },
                      "value": "104"
                    },
                    "src": "24817:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20282409603651670423947251286016_by_1",
                      "typeString": "int_const 20282409603651670423947251286016"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1887,
                  "mutability": "constant",
                  "name": "_ROLE_105",
                  "nameLocation": "24857:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24831:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24831:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_40564819207303340847894502572032_by_1",
                      "typeString": "int_const 40564819207303340847894502572032"
                    },
                    "id": 1886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24869:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313035",
                      "id": 1885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24874:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_105_by_1",
                        "typeString": "int_const 105"
                      },
                      "value": "105"
                    },
                    "src": "24869:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_40564819207303340847894502572032_by_1",
                      "typeString": "int_const 40564819207303340847894502572032"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1892,
                  "mutability": "constant",
                  "name": "_ROLE_106",
                  "nameLocation": "24909:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24883:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24883:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_81129638414606681695789005144064_by_1",
                      "typeString": "int_const 81129638414606681695789005144064"
                    },
                    "id": 1891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24921:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313036",
                      "id": 1890,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24926:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_106_by_1",
                        "typeString": "int_const 106"
                      },
                      "value": "106"
                    },
                    "src": "24921:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_81129638414606681695789005144064_by_1",
                      "typeString": "int_const 81129638414606681695789005144064"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1897,
                  "mutability": "constant",
                  "name": "_ROLE_107",
                  "nameLocation": "24961:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24935:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1893,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24935:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_162259276829213363391578010288128_by_1",
                      "typeString": "int_const 1622...(25 digits omitted)...8128"
                    },
                    "id": 1896,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1894,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24973:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313037",
                      "id": 1895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24978:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_107_by_1",
                        "typeString": "int_const 107"
                      },
                      "value": "107"
                    },
                    "src": "24973:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_162259276829213363391578010288128_by_1",
                      "typeString": "int_const 1622...(25 digits omitted)...8128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1902,
                  "mutability": "constant",
                  "name": "_ROLE_108",
                  "nameLocation": "25013:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "24987:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1898,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24987:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_324518553658426726783156020576256_by_1",
                      "typeString": "int_const 3245...(25 digits omitted)...6256"
                    },
                    "id": 1901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25025:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313038",
                      "id": 1900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25030:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_108_by_1",
                        "typeString": "int_const 108"
                      },
                      "value": "108"
                    },
                    "src": "25025:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_324518553658426726783156020576256_by_1",
                      "typeString": "int_const 3245...(25 digits omitted)...6256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1907,
                  "mutability": "constant",
                  "name": "_ROLE_109",
                  "nameLocation": "25065:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25039:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25039:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_649037107316853453566312041152512_by_1",
                      "typeString": "int_const 6490...(25 digits omitted)...2512"
                    },
                    "id": 1906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1904,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25077:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313039",
                      "id": 1905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25082:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_109_by_1",
                        "typeString": "int_const 109"
                      },
                      "value": "109"
                    },
                    "src": "25077:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_649037107316853453566312041152512_by_1",
                      "typeString": "int_const 6490...(25 digits omitted)...2512"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1912,
                  "mutability": "constant",
                  "name": "_ROLE_110",
                  "nameLocation": "25117:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25091:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1908,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25091:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1298074214633706907132624082305024_by_1",
                      "typeString": "int_const 1298...(26 digits omitted)...5024"
                    },
                    "id": 1911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25129:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313130",
                      "id": 1910,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25134:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_110_by_1",
                        "typeString": "int_const 110"
                      },
                      "value": "110"
                    },
                    "src": "25129:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1298074214633706907132624082305024_by_1",
                      "typeString": "int_const 1298...(26 digits omitted)...5024"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1917,
                  "mutability": "constant",
                  "name": "_ROLE_111",
                  "nameLocation": "25169:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25143:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1913,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25143:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2596148429267413814265248164610048_by_1",
                      "typeString": "int_const 2596...(26 digits omitted)...0048"
                    },
                    "id": 1916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25181:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313131",
                      "id": 1915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25186:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_111_by_1",
                        "typeString": "int_const 111"
                      },
                      "value": "111"
                    },
                    "src": "25181:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2596148429267413814265248164610048_by_1",
                      "typeString": "int_const 2596...(26 digits omitted)...0048"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1922,
                  "mutability": "constant",
                  "name": "_ROLE_112",
                  "nameLocation": "25221:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25195:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1918,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25195:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1",
                      "typeString": "int_const 5192...(26 digits omitted)...0096"
                    },
                    "id": 1921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25233:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313132",
                      "id": 1920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25238:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_112_by_1",
                        "typeString": "int_const 112"
                      },
                      "value": "112"
                    },
                    "src": "25233:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1",
                      "typeString": "int_const 5192...(26 digits omitted)...0096"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1927,
                  "mutability": "constant",
                  "name": "_ROLE_113",
                  "nameLocation": "25273:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25247:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1923,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25247:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_10384593717069655257060992658440192_by_1",
                      "typeString": "int_const 1038...(27 digits omitted)...0192"
                    },
                    "id": 1926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25285:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313133",
                      "id": 1925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25290:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_113_by_1",
                        "typeString": "int_const 113"
                      },
                      "value": "113"
                    },
                    "src": "25285:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10384593717069655257060992658440192_by_1",
                      "typeString": "int_const 1038...(27 digits omitted)...0192"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1932,
                  "mutability": "constant",
                  "name": "_ROLE_114",
                  "nameLocation": "25325:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25299:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25299:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_20769187434139310514121985316880384_by_1",
                      "typeString": "int_const 2076...(27 digits omitted)...0384"
                    },
                    "id": 1931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25337:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313134",
                      "id": 1930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25342:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_114_by_1",
                        "typeString": "int_const 114"
                      },
                      "value": "114"
                    },
                    "src": "25337:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20769187434139310514121985316880384_by_1",
                      "typeString": "int_const 2076...(27 digits omitted)...0384"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1937,
                  "mutability": "constant",
                  "name": "_ROLE_115",
                  "nameLocation": "25377:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25351:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1933,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25351:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_41538374868278621028243970633760768_by_1",
                      "typeString": "int_const 4153...(27 digits omitted)...0768"
                    },
                    "id": 1936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1934,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25389:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313135",
                      "id": 1935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25394:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_115_by_1",
                        "typeString": "int_const 115"
                      },
                      "value": "115"
                    },
                    "src": "25389:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_41538374868278621028243970633760768_by_1",
                      "typeString": "int_const 4153...(27 digits omitted)...0768"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1942,
                  "mutability": "constant",
                  "name": "_ROLE_116",
                  "nameLocation": "25429:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25403:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1938,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25403:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_83076749736557242056487941267521536_by_1",
                      "typeString": "int_const 8307...(27 digits omitted)...1536"
                    },
                    "id": 1941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1939,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25441:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313136",
                      "id": 1940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25446:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_116_by_1",
                        "typeString": "int_const 116"
                      },
                      "value": "116"
                    },
                    "src": "25441:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_83076749736557242056487941267521536_by_1",
                      "typeString": "int_const 8307...(27 digits omitted)...1536"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1947,
                  "mutability": "constant",
                  "name": "_ROLE_117",
                  "nameLocation": "25481:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25455:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25455:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_166153499473114484112975882535043072_by_1",
                      "typeString": "int_const 1661...(28 digits omitted)...3072"
                    },
                    "id": 1946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25493:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313137",
                      "id": 1945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25498:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_117_by_1",
                        "typeString": "int_const 117"
                      },
                      "value": "117"
                    },
                    "src": "25493:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_166153499473114484112975882535043072_by_1",
                      "typeString": "int_const 1661...(28 digits omitted)...3072"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1952,
                  "mutability": "constant",
                  "name": "_ROLE_118",
                  "nameLocation": "25533:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25507:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25507:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_332306998946228968225951765070086144_by_1",
                      "typeString": "int_const 3323...(28 digits omitted)...6144"
                    },
                    "id": 1951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25545:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313138",
                      "id": 1950,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25550:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_118_by_1",
                        "typeString": "int_const 118"
                      },
                      "value": "118"
                    },
                    "src": "25545:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_332306998946228968225951765070086144_by_1",
                      "typeString": "int_const 3323...(28 digits omitted)...6144"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1957,
                  "mutability": "constant",
                  "name": "_ROLE_119",
                  "nameLocation": "25585:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25559:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25559:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_664613997892457936451903530140172288_by_1",
                      "typeString": "int_const 6646...(28 digits omitted)...2288"
                    },
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25597:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313139",
                      "id": 1955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25602:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_119_by_1",
                        "typeString": "int_const 119"
                      },
                      "value": "119"
                    },
                    "src": "25597:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_664613997892457936451903530140172288_by_1",
                      "typeString": "int_const 6646...(28 digits omitted)...2288"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1962,
                  "mutability": "constant",
                  "name": "_ROLE_120",
                  "nameLocation": "25637:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25611:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1958,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25611:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1329227995784915872903807060280344576_by_1",
                      "typeString": "int_const 1329...(29 digits omitted)...4576"
                    },
                    "id": 1961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25649:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313230",
                      "id": 1960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25654:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_120_by_1",
                        "typeString": "int_const 120"
                      },
                      "value": "120"
                    },
                    "src": "25649:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1329227995784915872903807060280344576_by_1",
                      "typeString": "int_const 1329...(29 digits omitted)...4576"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1967,
                  "mutability": "constant",
                  "name": "_ROLE_121",
                  "nameLocation": "25689:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25663:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25663:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2658455991569831745807614120560689152_by_1",
                      "typeString": "int_const 2658...(29 digits omitted)...9152"
                    },
                    "id": 1966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25701:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313231",
                      "id": 1965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25706:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_121_by_1",
                        "typeString": "int_const 121"
                      },
                      "value": "121"
                    },
                    "src": "25701:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2658455991569831745807614120560689152_by_1",
                      "typeString": "int_const 2658...(29 digits omitted)...9152"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1972,
                  "mutability": "constant",
                  "name": "_ROLE_122",
                  "nameLocation": "25741:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25715:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25715:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5316911983139663491615228241121378304_by_1",
                      "typeString": "int_const 5316...(29 digits omitted)...8304"
                    },
                    "id": 1971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25753:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313232",
                      "id": 1970,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25758:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_122_by_1",
                        "typeString": "int_const 122"
                      },
                      "value": "122"
                    },
                    "src": "25753:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5316911983139663491615228241121378304_by_1",
                      "typeString": "int_const 5316...(29 digits omitted)...8304"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1977,
                  "mutability": "constant",
                  "name": "_ROLE_123",
                  "nameLocation": "25793:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25767:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1973,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25767:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_10633823966279326983230456482242756608_by_1",
                      "typeString": "int_const 1063...(30 digits omitted)...6608"
                    },
                    "id": 1976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25805:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313233",
                      "id": 1975,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25810:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_123_by_1",
                        "typeString": "int_const 123"
                      },
                      "value": "123"
                    },
                    "src": "25805:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10633823966279326983230456482242756608_by_1",
                      "typeString": "int_const 1063...(30 digits omitted)...6608"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1982,
                  "mutability": "constant",
                  "name": "_ROLE_124",
                  "nameLocation": "25845:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25819:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25819:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_21267647932558653966460912964485513216_by_1",
                      "typeString": "int_const 2126...(30 digits omitted)...3216"
                    },
                    "id": 1981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25857:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313234",
                      "id": 1980,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25862:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_124_by_1",
                        "typeString": "int_const 124"
                      },
                      "value": "124"
                    },
                    "src": "25857:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_21267647932558653966460912964485513216_by_1",
                      "typeString": "int_const 2126...(30 digits omitted)...3216"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1987,
                  "mutability": "constant",
                  "name": "_ROLE_125",
                  "nameLocation": "25897:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25871:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1983,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25871:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_42535295865117307932921825928971026432_by_1",
                      "typeString": "int_const 4253...(30 digits omitted)...6432"
                    },
                    "id": 1986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1984,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25909:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313235",
                      "id": 1985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25914:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_125_by_1",
                        "typeString": "int_const 125"
                      },
                      "value": "125"
                    },
                    "src": "25909:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_42535295865117307932921825928971026432_by_1",
                      "typeString": "int_const 4253...(30 digits omitted)...6432"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1992,
                  "mutability": "constant",
                  "name": "_ROLE_126",
                  "nameLocation": "25949:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25923:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1988,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25923:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_85070591730234615865843651857942052864_by_1",
                      "typeString": "int_const 8507...(30 digits omitted)...2864"
                    },
                    "id": 1991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25961:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313236",
                      "id": 1990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25966:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_126_by_1",
                        "typeString": "int_const 126"
                      },
                      "value": "126"
                    },
                    "src": "25961:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_85070591730234615865843651857942052864_by_1",
                      "typeString": "int_const 8507...(30 digits omitted)...2864"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 1997,
                  "mutability": "constant",
                  "name": "_ROLE_127",
                  "nameLocation": "26001:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "25975:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1993,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25975:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_170141183460469231731687303715884105728_by_1",
                      "typeString": "int_const 1701...(31 digits omitted)...5728"
                    },
                    "id": 1996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26013:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313237",
                      "id": 1995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26018:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_127_by_1",
                        "typeString": "int_const 127"
                      },
                      "value": "127"
                    },
                    "src": "26013:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_170141183460469231731687303715884105728_by_1",
                      "typeString": "int_const 1701...(31 digits omitted)...5728"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2002,
                  "mutability": "constant",
                  "name": "_ROLE_128",
                  "nameLocation": "26053:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26027:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1998,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26027:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    },
                    "id": 2001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 1999,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26065:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313238",
                      "id": 2000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26070:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "128"
                    },
                    "src": "26065:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2007,
                  "mutability": "constant",
                  "name": "_ROLE_129",
                  "nameLocation": "26105:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26079:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2003,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26079:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_680564733841876926926749214863536422912_by_1",
                      "typeString": "int_const 6805...(31 digits omitted)...2912"
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26117:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313239",
                      "id": 2005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26122:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_129_by_1",
                        "typeString": "int_const 129"
                      },
                      "value": "129"
                    },
                    "src": "26117:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_680564733841876926926749214863536422912_by_1",
                      "typeString": "int_const 6805...(31 digits omitted)...2912"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2012,
                  "mutability": "constant",
                  "name": "_ROLE_130",
                  "nameLocation": "26157:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26131:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2008,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26131:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1361129467683753853853498429727072845824_by_1",
                      "typeString": "int_const 1361...(32 digits omitted)...5824"
                    },
                    "id": 2011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26169:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313330",
                      "id": 2010,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26174:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_130_by_1",
                        "typeString": "int_const 130"
                      },
                      "value": "130"
                    },
                    "src": "26169:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1361129467683753853853498429727072845824_by_1",
                      "typeString": "int_const 1361...(32 digits omitted)...5824"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2017,
                  "mutability": "constant",
                  "name": "_ROLE_131",
                  "nameLocation": "26209:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26183:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26183:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2722258935367507707706996859454145691648_by_1",
                      "typeString": "int_const 2722...(32 digits omitted)...1648"
                    },
                    "id": 2016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26221:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313331",
                      "id": 2015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26226:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_131_by_1",
                        "typeString": "int_const 131"
                      },
                      "value": "131"
                    },
                    "src": "26221:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2722258935367507707706996859454145691648_by_1",
                      "typeString": "int_const 2722...(32 digits omitted)...1648"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2022,
                  "mutability": "constant",
                  "name": "_ROLE_132",
                  "nameLocation": "26261:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26235:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26235:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5444517870735015415413993718908291383296_by_1",
                      "typeString": "int_const 5444...(32 digits omitted)...3296"
                    },
                    "id": 2021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26273:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313332",
                      "id": 2020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26278:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_132_by_1",
                        "typeString": "int_const 132"
                      },
                      "value": "132"
                    },
                    "src": "26273:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5444517870735015415413993718908291383296_by_1",
                      "typeString": "int_const 5444...(32 digits omitted)...3296"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2027,
                  "mutability": "constant",
                  "name": "_ROLE_133",
                  "nameLocation": "26313:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26287:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2023,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26287:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_10889035741470030830827987437816582766592_by_1",
                      "typeString": "int_const 1088...(33 digits omitted)...6592"
                    },
                    "id": 2026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26325:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313333",
                      "id": 2025,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26330:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_133_by_1",
                        "typeString": "int_const 133"
                      },
                      "value": "133"
                    },
                    "src": "26325:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10889035741470030830827987437816582766592_by_1",
                      "typeString": "int_const 1088...(33 digits omitted)...6592"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2032,
                  "mutability": "constant",
                  "name": "_ROLE_134",
                  "nameLocation": "26365:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26339:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26339:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_21778071482940061661655974875633165533184_by_1",
                      "typeString": "int_const 2177...(33 digits omitted)...3184"
                    },
                    "id": 2031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2029,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26377:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313334",
                      "id": 2030,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26382:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_134_by_1",
                        "typeString": "int_const 134"
                      },
                      "value": "134"
                    },
                    "src": "26377:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_21778071482940061661655974875633165533184_by_1",
                      "typeString": "int_const 2177...(33 digits omitted)...3184"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2037,
                  "mutability": "constant",
                  "name": "_ROLE_135",
                  "nameLocation": "26417:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26391:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2033,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26391:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_43556142965880123323311949751266331066368_by_1",
                      "typeString": "int_const 4355...(33 digits omitted)...6368"
                    },
                    "id": 2036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2034,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26429:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313335",
                      "id": 2035,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26434:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_135_by_1",
                        "typeString": "int_const 135"
                      },
                      "value": "135"
                    },
                    "src": "26429:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_43556142965880123323311949751266331066368_by_1",
                      "typeString": "int_const 4355...(33 digits omitted)...6368"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2042,
                  "mutability": "constant",
                  "name": "_ROLE_136",
                  "nameLocation": "26469:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26443:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2038,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26443:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_87112285931760246646623899502532662132736_by_1",
                      "typeString": "int_const 8711...(33 digits omitted)...2736"
                    },
                    "id": 2041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2039,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26481:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313336",
                      "id": 2040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26486:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_136_by_1",
                        "typeString": "int_const 136"
                      },
                      "value": "136"
                    },
                    "src": "26481:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_87112285931760246646623899502532662132736_by_1",
                      "typeString": "int_const 8711...(33 digits omitted)...2736"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2047,
                  "mutability": "constant",
                  "name": "_ROLE_137",
                  "nameLocation": "26521:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26495:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26495:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_174224571863520493293247799005065324265472_by_1",
                      "typeString": "int_const 1742...(34 digits omitted)...5472"
                    },
                    "id": 2046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2044,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26533:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313337",
                      "id": 2045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26538:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_137_by_1",
                        "typeString": "int_const 137"
                      },
                      "value": "137"
                    },
                    "src": "26533:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_174224571863520493293247799005065324265472_by_1",
                      "typeString": "int_const 1742...(34 digits omitted)...5472"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2052,
                  "mutability": "constant",
                  "name": "_ROLE_138",
                  "nameLocation": "26573:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26547:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26547:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_348449143727040986586495598010130648530944_by_1",
                      "typeString": "int_const 3484...(34 digits omitted)...0944"
                    },
                    "id": 2051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2049,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26585:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313338",
                      "id": 2050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26590:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_138_by_1",
                        "typeString": "int_const 138"
                      },
                      "value": "138"
                    },
                    "src": "26585:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_348449143727040986586495598010130648530944_by_1",
                      "typeString": "int_const 3484...(34 digits omitted)...0944"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2057,
                  "mutability": "constant",
                  "name": "_ROLE_139",
                  "nameLocation": "26625:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26599:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2053,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26599:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_696898287454081973172991196020261297061888_by_1",
                      "typeString": "int_const 6968...(34 digits omitted)...1888"
                    },
                    "id": 2056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26637:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313339",
                      "id": 2055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26642:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_139_by_1",
                        "typeString": "int_const 139"
                      },
                      "value": "139"
                    },
                    "src": "26637:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_696898287454081973172991196020261297061888_by_1",
                      "typeString": "int_const 6968...(34 digits omitted)...1888"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2062,
                  "mutability": "constant",
                  "name": "_ROLE_140",
                  "nameLocation": "26677:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26651:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26651:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1393796574908163946345982392040522594123776_by_1",
                      "typeString": "int_const 1393...(35 digits omitted)...3776"
                    },
                    "id": 2061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2059,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26689:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313430",
                      "id": 2060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26694:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_140_by_1",
                        "typeString": "int_const 140"
                      },
                      "value": "140"
                    },
                    "src": "26689:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1393796574908163946345982392040522594123776_by_1",
                      "typeString": "int_const 1393...(35 digits omitted)...3776"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2067,
                  "mutability": "constant",
                  "name": "_ROLE_141",
                  "nameLocation": "26729:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26703:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26703:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2787593149816327892691964784081045188247552_by_1",
                      "typeString": "int_const 2787...(35 digits omitted)...7552"
                    },
                    "id": 2066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2064,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26741:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313431",
                      "id": 2065,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26746:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_141_by_1",
                        "typeString": "int_const 141"
                      },
                      "value": "141"
                    },
                    "src": "26741:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2787593149816327892691964784081045188247552_by_1",
                      "typeString": "int_const 2787...(35 digits omitted)...7552"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2072,
                  "mutability": "constant",
                  "name": "_ROLE_142",
                  "nameLocation": "26781:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26755:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2068,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26755:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5575186299632655785383929568162090376495104_by_1",
                      "typeString": "int_const 5575...(35 digits omitted)...5104"
                    },
                    "id": 2071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26793:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313432",
                      "id": 2070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26798:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_142_by_1",
                        "typeString": "int_const 142"
                      },
                      "value": "142"
                    },
                    "src": "26793:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5575186299632655785383929568162090376495104_by_1",
                      "typeString": "int_const 5575...(35 digits omitted)...5104"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2077,
                  "mutability": "constant",
                  "name": "_ROLE_143",
                  "nameLocation": "26833:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26807:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26807:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_11150372599265311570767859136324180752990208_by_1",
                      "typeString": "int_const 1115...(36 digits omitted)...0208"
                    },
                    "id": 2076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26845:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313433",
                      "id": 2075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26850:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_143_by_1",
                        "typeString": "int_const 143"
                      },
                      "value": "143"
                    },
                    "src": "26845:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_11150372599265311570767859136324180752990208_by_1",
                      "typeString": "int_const 1115...(36 digits omitted)...0208"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2082,
                  "mutability": "constant",
                  "name": "_ROLE_144",
                  "nameLocation": "26885:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26859:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26859:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_22300745198530623141535718272648361505980416_by_1",
                      "typeString": "int_const 2230...(36 digits omitted)...0416"
                    },
                    "id": 2081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26897:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313434",
                      "id": 2080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26902:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_144_by_1",
                        "typeString": "int_const 144"
                      },
                      "value": "144"
                    },
                    "src": "26897:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_22300745198530623141535718272648361505980416_by_1",
                      "typeString": "int_const 2230...(36 digits omitted)...0416"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2087,
                  "mutability": "constant",
                  "name": "_ROLE_145",
                  "nameLocation": "26937:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26911:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26911:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_44601490397061246283071436545296723011960832_by_1",
                      "typeString": "int_const 4460...(36 digits omitted)...0832"
                    },
                    "id": 2086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2084,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26949:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313435",
                      "id": 2085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26954:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_145_by_1",
                        "typeString": "int_const 145"
                      },
                      "value": "145"
                    },
                    "src": "26949:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_44601490397061246283071436545296723011960832_by_1",
                      "typeString": "int_const 4460...(36 digits omitted)...0832"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2092,
                  "mutability": "constant",
                  "name": "_ROLE_146",
                  "nameLocation": "26989:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "26963:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2088,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26963:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_89202980794122492566142873090593446023921664_by_1",
                      "typeString": "int_const 8920...(36 digits omitted)...1664"
                    },
                    "id": 2091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2089,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27001:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313436",
                      "id": 2090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27006:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_146_by_1",
                        "typeString": "int_const 146"
                      },
                      "value": "146"
                    },
                    "src": "27001:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_89202980794122492566142873090593446023921664_by_1",
                      "typeString": "int_const 8920...(36 digits omitted)...1664"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2097,
                  "mutability": "constant",
                  "name": "_ROLE_147",
                  "nameLocation": "27041:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27015:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2093,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27015:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_178405961588244985132285746181186892047843328_by_1",
                      "typeString": "int_const 1784...(37 digits omitted)...3328"
                    },
                    "id": 2096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27053:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313437",
                      "id": 2095,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27058:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_147_by_1",
                        "typeString": "int_const 147"
                      },
                      "value": "147"
                    },
                    "src": "27053:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_178405961588244985132285746181186892047843328_by_1",
                      "typeString": "int_const 1784...(37 digits omitted)...3328"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2102,
                  "mutability": "constant",
                  "name": "_ROLE_148",
                  "nameLocation": "27093:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27067:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2098,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27067:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_356811923176489970264571492362373784095686656_by_1",
                      "typeString": "int_const 3568...(37 digits omitted)...6656"
                    },
                    "id": 2101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27105:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313438",
                      "id": 2100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27110:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_148_by_1",
                        "typeString": "int_const 148"
                      },
                      "value": "148"
                    },
                    "src": "27105:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_356811923176489970264571492362373784095686656_by_1",
                      "typeString": "int_const 3568...(37 digits omitted)...6656"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2107,
                  "mutability": "constant",
                  "name": "_ROLE_149",
                  "nameLocation": "27145:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27119:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27119:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_713623846352979940529142984724747568191373312_by_1",
                      "typeString": "int_const 7136...(37 digits omitted)...3312"
                    },
                    "id": 2106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27157:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313439",
                      "id": 2105,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27162:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_149_by_1",
                        "typeString": "int_const 149"
                      },
                      "value": "149"
                    },
                    "src": "27157:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_713623846352979940529142984724747568191373312_by_1",
                      "typeString": "int_const 7136...(37 digits omitted)...3312"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2112,
                  "mutability": "constant",
                  "name": "_ROLE_150",
                  "nameLocation": "27197:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27171:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2108,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27171:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1427247692705959881058285969449495136382746624_by_1",
                      "typeString": "int_const 1427...(38 digits omitted)...6624"
                    },
                    "id": 2111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27209:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313530",
                      "id": 2110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27214:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_150_by_1",
                        "typeString": "int_const 150"
                      },
                      "value": "150"
                    },
                    "src": "27209:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1427247692705959881058285969449495136382746624_by_1",
                      "typeString": "int_const 1427...(38 digits omitted)...6624"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2117,
                  "mutability": "constant",
                  "name": "_ROLE_151",
                  "nameLocation": "27249:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27223:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2113,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27223:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2854495385411919762116571938898990272765493248_by_1",
                      "typeString": "int_const 2854...(38 digits omitted)...3248"
                    },
                    "id": 2116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2114,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27261:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313531",
                      "id": 2115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27266:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_151_by_1",
                        "typeString": "int_const 151"
                      },
                      "value": "151"
                    },
                    "src": "27261:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2854495385411919762116571938898990272765493248_by_1",
                      "typeString": "int_const 2854...(38 digits omitted)...3248"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2122,
                  "mutability": "constant",
                  "name": "_ROLE_152",
                  "nameLocation": "27301:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27275:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2118,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27275:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5708990770823839524233143877797980545530986496_by_1",
                      "typeString": "int_const 5708...(38 digits omitted)...6496"
                    },
                    "id": 2121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27313:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313532",
                      "id": 2120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27318:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_152_by_1",
                        "typeString": "int_const 152"
                      },
                      "value": "152"
                    },
                    "src": "27313:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5708990770823839524233143877797980545530986496_by_1",
                      "typeString": "int_const 5708...(38 digits omitted)...6496"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2127,
                  "mutability": "constant",
                  "name": "_ROLE_153",
                  "nameLocation": "27353:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27327:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2123,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27327:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_11417981541647679048466287755595961091061972992_by_1",
                      "typeString": "int_const 1141...(39 digits omitted)...2992"
                    },
                    "id": 2126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27365:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313533",
                      "id": 2125,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27370:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_153_by_1",
                        "typeString": "int_const 153"
                      },
                      "value": "153"
                    },
                    "src": "27365:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_11417981541647679048466287755595961091061972992_by_1",
                      "typeString": "int_const 1141...(39 digits omitted)...2992"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2132,
                  "mutability": "constant",
                  "name": "_ROLE_154",
                  "nameLocation": "27405:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27379:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27379:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_22835963083295358096932575511191922182123945984_by_1",
                      "typeString": "int_const 2283...(39 digits omitted)...5984"
                    },
                    "id": 2131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2129,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27417:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313534",
                      "id": 2130,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27422:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_154_by_1",
                        "typeString": "int_const 154"
                      },
                      "value": "154"
                    },
                    "src": "27417:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_22835963083295358096932575511191922182123945984_by_1",
                      "typeString": "int_const 2283...(39 digits omitted)...5984"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2137,
                  "mutability": "constant",
                  "name": "_ROLE_155",
                  "nameLocation": "27457:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27431:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2133,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27431:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_45671926166590716193865151022383844364247891968_by_1",
                      "typeString": "int_const 4567...(39 digits omitted)...1968"
                    },
                    "id": 2136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2134,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27469:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313535",
                      "id": 2135,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27474:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_155_by_1",
                        "typeString": "int_const 155"
                      },
                      "value": "155"
                    },
                    "src": "27469:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_45671926166590716193865151022383844364247891968_by_1",
                      "typeString": "int_const 4567...(39 digits omitted)...1968"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2142,
                  "mutability": "constant",
                  "name": "_ROLE_156",
                  "nameLocation": "27509:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27483:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27483:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_91343852333181432387730302044767688728495783936_by_1",
                      "typeString": "int_const 9134...(39 digits omitted)...3936"
                    },
                    "id": 2141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2139,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27521:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313536",
                      "id": 2140,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27526:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_156_by_1",
                        "typeString": "int_const 156"
                      },
                      "value": "156"
                    },
                    "src": "27521:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_91343852333181432387730302044767688728495783936_by_1",
                      "typeString": "int_const 9134...(39 digits omitted)...3936"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2147,
                  "mutability": "constant",
                  "name": "_ROLE_157",
                  "nameLocation": "27561:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27535:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2143,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27535:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_182687704666362864775460604089535377456991567872_by_1",
                      "typeString": "int_const 1826...(40 digits omitted)...7872"
                    },
                    "id": 2146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2144,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27573:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313537",
                      "id": 2145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27578:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_157_by_1",
                        "typeString": "int_const 157"
                      },
                      "value": "157"
                    },
                    "src": "27573:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_182687704666362864775460604089535377456991567872_by_1",
                      "typeString": "int_const 1826...(40 digits omitted)...7872"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2152,
                  "mutability": "constant",
                  "name": "_ROLE_158",
                  "nameLocation": "27613:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27587:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27587:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_365375409332725729550921208179070754913983135744_by_1",
                      "typeString": "int_const 3653...(40 digits omitted)...5744"
                    },
                    "id": 2151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27625:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313538",
                      "id": 2150,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27630:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_158_by_1",
                        "typeString": "int_const 158"
                      },
                      "value": "158"
                    },
                    "src": "27625:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_365375409332725729550921208179070754913983135744_by_1",
                      "typeString": "int_const 3653...(40 digits omitted)...5744"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2157,
                  "mutability": "constant",
                  "name": "_ROLE_159",
                  "nameLocation": "27665:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27639:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27639:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_730750818665451459101842416358141509827966271488_by_1",
                      "typeString": "int_const 7307...(40 digits omitted)...1488"
                    },
                    "id": 2156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2154,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27677:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313539",
                      "id": 2155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27682:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_159_by_1",
                        "typeString": "int_const 159"
                      },
                      "value": "159"
                    },
                    "src": "27677:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_730750818665451459101842416358141509827966271488_by_1",
                      "typeString": "int_const 7307...(40 digits omitted)...1488"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2162,
                  "mutability": "constant",
                  "name": "_ROLE_160",
                  "nameLocation": "27717:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27691:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27691:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1461501637330902918203684832716283019655932542976_by_1",
                      "typeString": "int_const 1461...(41 digits omitted)...2976"
                    },
                    "id": 2161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27729:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313630",
                      "id": 2160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27734:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_160_by_1",
                        "typeString": "int_const 160"
                      },
                      "value": "160"
                    },
                    "src": "27729:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1461501637330902918203684832716283019655932542976_by_1",
                      "typeString": "int_const 1461...(41 digits omitted)...2976"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2167,
                  "mutability": "constant",
                  "name": "_ROLE_161",
                  "nameLocation": "27769:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27743:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2163,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27743:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2923003274661805836407369665432566039311865085952_by_1",
                      "typeString": "int_const 2923...(41 digits omitted)...5952"
                    },
                    "id": 2166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2164,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27781:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313631",
                      "id": 2165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27786:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_161_by_1",
                        "typeString": "int_const 161"
                      },
                      "value": "161"
                    },
                    "src": "27781:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2923003274661805836407369665432566039311865085952_by_1",
                      "typeString": "int_const 2923...(41 digits omitted)...5952"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2172,
                  "mutability": "constant",
                  "name": "_ROLE_162",
                  "nameLocation": "27821:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27795:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2168,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27795:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5846006549323611672814739330865132078623730171904_by_1",
                      "typeString": "int_const 5846...(41 digits omitted)...1904"
                    },
                    "id": 2171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27833:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313632",
                      "id": 2170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27838:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_162_by_1",
                        "typeString": "int_const 162"
                      },
                      "value": "162"
                    },
                    "src": "27833:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5846006549323611672814739330865132078623730171904_by_1",
                      "typeString": "int_const 5846...(41 digits omitted)...1904"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2177,
                  "mutability": "constant",
                  "name": "_ROLE_163",
                  "nameLocation": "27873:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27847:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2173,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27847:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_11692013098647223345629478661730264157247460343808_by_1",
                      "typeString": "int_const 1169...(42 digits omitted)...3808"
                    },
                    "id": 2176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2174,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27885:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313633",
                      "id": 2175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27890:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_163_by_1",
                        "typeString": "int_const 163"
                      },
                      "value": "163"
                    },
                    "src": "27885:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_11692013098647223345629478661730264157247460343808_by_1",
                      "typeString": "int_const 1169...(42 digits omitted)...3808"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2182,
                  "mutability": "constant",
                  "name": "_ROLE_164",
                  "nameLocation": "27925:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27899:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27899:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_23384026197294446691258957323460528314494920687616_by_1",
                      "typeString": "int_const 2338...(42 digits omitted)...7616"
                    },
                    "id": 2181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27937:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313634",
                      "id": 2180,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27942:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_164_by_1",
                        "typeString": "int_const 164"
                      },
                      "value": "164"
                    },
                    "src": "27937:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_23384026197294446691258957323460528314494920687616_by_1",
                      "typeString": "int_const 2338...(42 digits omitted)...7616"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2187,
                  "mutability": "constant",
                  "name": "_ROLE_165",
                  "nameLocation": "27977:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "27951:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27951:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_46768052394588893382517914646921056628989841375232_by_1",
                      "typeString": "int_const 4676...(42 digits omitted)...5232"
                    },
                    "id": 2186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27989:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313635",
                      "id": 2185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27994:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_165_by_1",
                        "typeString": "int_const 165"
                      },
                      "value": "165"
                    },
                    "src": "27989:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_46768052394588893382517914646921056628989841375232_by_1",
                      "typeString": "int_const 4676...(42 digits omitted)...5232"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2192,
                  "mutability": "constant",
                  "name": "_ROLE_166",
                  "nameLocation": "28029:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28003:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28003:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_93536104789177786765035829293842113257979682750464_by_1",
                      "typeString": "int_const 9353...(42 digits omitted)...0464"
                    },
                    "id": 2191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28041:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313636",
                      "id": 2190,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28046:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_166_by_1",
                        "typeString": "int_const 166"
                      },
                      "value": "166"
                    },
                    "src": "28041:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_93536104789177786765035829293842113257979682750464_by_1",
                      "typeString": "int_const 9353...(42 digits omitted)...0464"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2197,
                  "mutability": "constant",
                  "name": "_ROLE_167",
                  "nameLocation": "28081:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28055:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2193,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28055:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_187072209578355573530071658587684226515959365500928_by_1",
                      "typeString": "int_const 1870...(43 digits omitted)...0928"
                    },
                    "id": 2196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2194,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28093:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313637",
                      "id": 2195,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28098:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_167_by_1",
                        "typeString": "int_const 167"
                      },
                      "value": "167"
                    },
                    "src": "28093:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_187072209578355573530071658587684226515959365500928_by_1",
                      "typeString": "int_const 1870...(43 digits omitted)...0928"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2202,
                  "mutability": "constant",
                  "name": "_ROLE_168",
                  "nameLocation": "28133:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28107:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28107:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_374144419156711147060143317175368453031918731001856_by_1",
                      "typeString": "int_const 3741...(43 digits omitted)...1856"
                    },
                    "id": 2201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28145:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313638",
                      "id": 2200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28150:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_168_by_1",
                        "typeString": "int_const 168"
                      },
                      "value": "168"
                    },
                    "src": "28145:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_374144419156711147060143317175368453031918731001856_by_1",
                      "typeString": "int_const 3741...(43 digits omitted)...1856"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2207,
                  "mutability": "constant",
                  "name": "_ROLE_169",
                  "nameLocation": "28185:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28159:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2203,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28159:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_748288838313422294120286634350736906063837462003712_by_1",
                      "typeString": "int_const 7482...(43 digits omitted)...3712"
                    },
                    "id": 2206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28197:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313639",
                      "id": 2205,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28202:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_169_by_1",
                        "typeString": "int_const 169"
                      },
                      "value": "169"
                    },
                    "src": "28197:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_748288838313422294120286634350736906063837462003712_by_1",
                      "typeString": "int_const 7482...(43 digits omitted)...3712"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2212,
                  "mutability": "constant",
                  "name": "_ROLE_170",
                  "nameLocation": "28237:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28211:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28211:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1496577676626844588240573268701473812127674924007424_by_1",
                      "typeString": "int_const 1496...(44 digits omitted)...7424"
                    },
                    "id": 2211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28249:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313730",
                      "id": 2210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28254:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_170_by_1",
                        "typeString": "int_const 170"
                      },
                      "value": "170"
                    },
                    "src": "28249:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1496577676626844588240573268701473812127674924007424_by_1",
                      "typeString": "int_const 1496...(44 digits omitted)...7424"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2217,
                  "mutability": "constant",
                  "name": "_ROLE_171",
                  "nameLocation": "28289:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28263:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28263:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_2993155353253689176481146537402947624255349848014848_by_1",
                      "typeString": "int_const 2993...(44 digits omitted)...4848"
                    },
                    "id": 2216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28301:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313731",
                      "id": 2215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28306:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_171_by_1",
                        "typeString": "int_const 171"
                      },
                      "value": "171"
                    },
                    "src": "28301:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2993155353253689176481146537402947624255349848014848_by_1",
                      "typeString": "int_const 2993...(44 digits omitted)...4848"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2222,
                  "mutability": "constant",
                  "name": "_ROLE_172",
                  "nameLocation": "28341:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28315:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28315:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_5986310706507378352962293074805895248510699696029696_by_1",
                      "typeString": "int_const 5986...(44 digits omitted)...9696"
                    },
                    "id": 2221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28353:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313732",
                      "id": 2220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28358:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_172_by_1",
                        "typeString": "int_const 172"
                      },
                      "value": "172"
                    },
                    "src": "28353:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5986310706507378352962293074805895248510699696029696_by_1",
                      "typeString": "int_const 5986...(44 digits omitted)...9696"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2227,
                  "mutability": "constant",
                  "name": "_ROLE_173",
                  "nameLocation": "28393:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28367:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2223,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28367:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_11972621413014756705924586149611790497021399392059392_by_1",
                      "typeString": "int_const 1197...(45 digits omitted)...9392"
                    },
                    "id": 2226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28405:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313733",
                      "id": 2225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28410:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_173_by_1",
                        "typeString": "int_const 173"
                      },
                      "value": "173"
                    },
                    "src": "28405:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_11972621413014756705924586149611790497021399392059392_by_1",
                      "typeString": "int_const 1197...(45 digits omitted)...9392"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2232,
                  "mutability": "constant",
                  "name": "_ROLE_174",
                  "nameLocation": "28445:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28419:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2228,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28419:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_23945242826029513411849172299223580994042798784118784_by_1",
                      "typeString": "int_const 2394...(45 digits omitted)...8784"
                    },
                    "id": 2231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28457:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313734",
                      "id": 2230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28462:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_174_by_1",
                        "typeString": "int_const 174"
                      },
                      "value": "174"
                    },
                    "src": "28457:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_23945242826029513411849172299223580994042798784118784_by_1",
                      "typeString": "int_const 2394...(45 digits omitted)...8784"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2237,
                  "mutability": "constant",
                  "name": "_ROLE_175",
                  "nameLocation": "28497:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28471:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28471:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_47890485652059026823698344598447161988085597568237568_by_1",
                      "typeString": "int_const 4789...(45 digits omitted)...7568"
                    },
                    "id": 2236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28509:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313735",
                      "id": 2235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28514:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_175_by_1",
                        "typeString": "int_const 175"
                      },
                      "value": "175"
                    },
                    "src": "28509:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_47890485652059026823698344598447161988085597568237568_by_1",
                      "typeString": "int_const 4789...(45 digits omitted)...7568"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2242,
                  "mutability": "constant",
                  "name": "_ROLE_176",
                  "nameLocation": "28549:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28523:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2238,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28523:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_95780971304118053647396689196894323976171195136475136_by_1",
                      "typeString": "int_const 9578...(45 digits omitted)...5136"
                    },
                    "id": 2241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2239,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28561:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313736",
                      "id": 2240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28566:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_176_by_1",
                        "typeString": "int_const 176"
                      },
                      "value": "176"
                    },
                    "src": "28561:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_95780971304118053647396689196894323976171195136475136_by_1",
                      "typeString": "int_const 9578...(45 digits omitted)...5136"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2247,
                  "mutability": "constant",
                  "name": "_ROLE_177",
                  "nameLocation": "28601:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28575:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28575:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_191561942608236107294793378393788647952342390272950272_by_1",
                      "typeString": "int_const 1915...(46 digits omitted)...0272"
                    },
                    "id": 2246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28613:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313737",
                      "id": 2245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28618:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_177_by_1",
                        "typeString": "int_const 177"
                      },
                      "value": "177"
                    },
                    "src": "28613:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_191561942608236107294793378393788647952342390272950272_by_1",
                      "typeString": "int_const 1915...(46 digits omitted)...0272"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2252,
                  "mutability": "constant",
                  "name": "_ROLE_178",
                  "nameLocation": "28653:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28627:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2248,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28627:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_383123885216472214589586756787577295904684780545900544_by_1",
                      "typeString": "int_const 3831...(46 digits omitted)...0544"
                    },
                    "id": 2251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28665:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313738",
                      "id": 2250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28670:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_178_by_1",
                        "typeString": "int_const 178"
                      },
                      "value": "178"
                    },
                    "src": "28665:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_383123885216472214589586756787577295904684780545900544_by_1",
                      "typeString": "int_const 3831...(46 digits omitted)...0544"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2257,
                  "mutability": "constant",
                  "name": "_ROLE_179",
                  "nameLocation": "28705:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28679:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28679:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_766247770432944429179173513575154591809369561091801088_by_1",
                      "typeString": "int_const 7662...(46 digits omitted)...1088"
                    },
                    "id": 2256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28717:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313739",
                      "id": 2255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28722:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_179_by_1",
                        "typeString": "int_const 179"
                      },
                      "value": "179"
                    },
                    "src": "28717:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_766247770432944429179173513575154591809369561091801088_by_1",
                      "typeString": "int_const 7662...(46 digits omitted)...1088"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2262,
                  "mutability": "constant",
                  "name": "_ROLE_180",
                  "nameLocation": "28757:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28731:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28731:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1532495540865888858358347027150309183618739122183602176_by_1",
                      "typeString": "int_const 1532...(47 digits omitted)...2176"
                    },
                    "id": 2261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2259,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28769:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313830",
                      "id": 2260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28774:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_180_by_1",
                        "typeString": "int_const 180"
                      },
                      "value": "180"
                    },
                    "src": "28769:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1532495540865888858358347027150309183618739122183602176_by_1",
                      "typeString": "int_const 1532...(47 digits omitted)...2176"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2267,
                  "mutability": "constant",
                  "name": "_ROLE_181",
                  "nameLocation": "28809:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28783:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28783:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3064991081731777716716694054300618367237478244367204352_by_1",
                      "typeString": "int_const 3064...(47 digits omitted)...4352"
                    },
                    "id": 2266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2264,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28821:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313831",
                      "id": 2265,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28826:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_181_by_1",
                        "typeString": "int_const 181"
                      },
                      "value": "181"
                    },
                    "src": "28821:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3064991081731777716716694054300618367237478244367204352_by_1",
                      "typeString": "int_const 3064...(47 digits omitted)...4352"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2272,
                  "mutability": "constant",
                  "name": "_ROLE_182",
                  "nameLocation": "28861:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28835:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2268,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28835:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_6129982163463555433433388108601236734474956488734408704_by_1",
                      "typeString": "int_const 6129...(47 digits omitted)...8704"
                    },
                    "id": 2271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28873:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313832",
                      "id": 2270,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28878:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_182_by_1",
                        "typeString": "int_const 182"
                      },
                      "value": "182"
                    },
                    "src": "28873:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6129982163463555433433388108601236734474956488734408704_by_1",
                      "typeString": "int_const 6129...(47 digits omitted)...8704"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2277,
                  "mutability": "constant",
                  "name": "_ROLE_183",
                  "nameLocation": "28913:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28887:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2273,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28887:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_12259964326927110866866776217202473468949912977468817408_by_1",
                      "typeString": "int_const 1225...(48 digits omitted)...7408"
                    },
                    "id": 2276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28925:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313833",
                      "id": 2275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28930:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_183_by_1",
                        "typeString": "int_const 183"
                      },
                      "value": "183"
                    },
                    "src": "28925:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_12259964326927110866866776217202473468949912977468817408_by_1",
                      "typeString": "int_const 1225...(48 digits omitted)...7408"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2282,
                  "mutability": "constant",
                  "name": "_ROLE_184",
                  "nameLocation": "28965:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28939:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28939:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_24519928653854221733733552434404946937899825954937634816_by_1",
                      "typeString": "int_const 2451...(48 digits omitted)...4816"
                    },
                    "id": 2281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28977:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313834",
                      "id": 2280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28982:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_184_by_1",
                        "typeString": "int_const 184"
                      },
                      "value": "184"
                    },
                    "src": "28977:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_24519928653854221733733552434404946937899825954937634816_by_1",
                      "typeString": "int_const 2451...(48 digits omitted)...4816"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2287,
                  "mutability": "constant",
                  "name": "_ROLE_185",
                  "nameLocation": "29017:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "28991:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28991:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_49039857307708443467467104868809893875799651909875269632_by_1",
                      "typeString": "int_const 4903...(48 digits omitted)...9632"
                    },
                    "id": 2286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2284,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29029:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313835",
                      "id": 2285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29034:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_185_by_1",
                        "typeString": "int_const 185"
                      },
                      "value": "185"
                    },
                    "src": "29029:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_49039857307708443467467104868809893875799651909875269632_by_1",
                      "typeString": "int_const 4903...(48 digits omitted)...9632"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2292,
                  "mutability": "constant",
                  "name": "_ROLE_186",
                  "nameLocation": "29069:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29043:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29043:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_98079714615416886934934209737619787751599303819750539264_by_1",
                      "typeString": "int_const 9807...(48 digits omitted)...9264"
                    },
                    "id": 2291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29081:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313836",
                      "id": 2290,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29086:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_186_by_1",
                        "typeString": "int_const 186"
                      },
                      "value": "186"
                    },
                    "src": "29081:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_98079714615416886934934209737619787751599303819750539264_by_1",
                      "typeString": "int_const 9807...(48 digits omitted)...9264"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2297,
                  "mutability": "constant",
                  "name": "_ROLE_187",
                  "nameLocation": "29121:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29095:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29095:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_196159429230833773869868419475239575503198607639501078528_by_1",
                      "typeString": "int_const 1961...(49 digits omitted)...8528"
                    },
                    "id": 2296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29133:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313837",
                      "id": 2295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29138:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_187_by_1",
                        "typeString": "int_const 187"
                      },
                      "value": "187"
                    },
                    "src": "29133:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_196159429230833773869868419475239575503198607639501078528_by_1",
                      "typeString": "int_const 1961...(49 digits omitted)...8528"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2302,
                  "mutability": "constant",
                  "name": "_ROLE_188",
                  "nameLocation": "29173:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29147:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2298,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29147:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_392318858461667547739736838950479151006397215279002157056_by_1",
                      "typeString": "int_const 3923...(49 digits omitted)...7056"
                    },
                    "id": 2301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29185:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313838",
                      "id": 2300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29190:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_188_by_1",
                        "typeString": "int_const 188"
                      },
                      "value": "188"
                    },
                    "src": "29185:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_392318858461667547739736838950479151006397215279002157056_by_1",
                      "typeString": "int_const 3923...(49 digits omitted)...7056"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2307,
                  "mutability": "constant",
                  "name": "_ROLE_189",
                  "nameLocation": "29225:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29199:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2303,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29199:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_784637716923335095479473677900958302012794430558004314112_by_1",
                      "typeString": "int_const 7846...(49 digits omitted)...4112"
                    },
                    "id": 2306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2304,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29237:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313839",
                      "id": 2305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29242:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_189_by_1",
                        "typeString": "int_const 189"
                      },
                      "value": "189"
                    },
                    "src": "29237:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_784637716923335095479473677900958302012794430558004314112_by_1",
                      "typeString": "int_const 7846...(49 digits omitted)...4112"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2312,
                  "mutability": "constant",
                  "name": "_ROLE_190",
                  "nameLocation": "29277:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29251:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2308,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29251:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1569275433846670190958947355801916604025588861116008628224_by_1",
                      "typeString": "int_const 1569...(50 digits omitted)...8224"
                    },
                    "id": 2311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2309,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29289:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313930",
                      "id": 2310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29294:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_190_by_1",
                        "typeString": "int_const 190"
                      },
                      "value": "190"
                    },
                    "src": "29289:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1569275433846670190958947355801916604025588861116008628224_by_1",
                      "typeString": "int_const 1569...(50 digits omitted)...8224"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2317,
                  "mutability": "constant",
                  "name": "_ROLE_191",
                  "nameLocation": "29329:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29303:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2313,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29303:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3138550867693340381917894711603833208051177722232017256448_by_1",
                      "typeString": "int_const 3138...(50 digits omitted)...6448"
                    },
                    "id": 2316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29341:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313931",
                      "id": 2315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29346:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_191_by_1",
                        "typeString": "int_const 191"
                      },
                      "value": "191"
                    },
                    "src": "29341:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3138550867693340381917894711603833208051177722232017256448_by_1",
                      "typeString": "int_const 3138...(50 digits omitted)...6448"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2322,
                  "mutability": "constant",
                  "name": "_ROLE_192",
                  "nameLocation": "29381:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29355:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29355:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                      "typeString": "int_const 6277...(50 digits omitted)...2896"
                    },
                    "id": 2321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29393:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313932",
                      "id": 2320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29398:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_192_by_1",
                        "typeString": "int_const 192"
                      },
                      "value": "192"
                    },
                    "src": "29393:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                      "typeString": "int_const 6277...(50 digits omitted)...2896"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2327,
                  "mutability": "constant",
                  "name": "_ROLE_193",
                  "nameLocation": "29433:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29407:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2323,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29407:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_12554203470773361527671578846415332832204710888928069025792_by_1",
                      "typeString": "int_const 1255...(51 digits omitted)...5792"
                    },
                    "id": 2326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2324,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29445:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313933",
                      "id": 2325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29450:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_193_by_1",
                        "typeString": "int_const 193"
                      },
                      "value": "193"
                    },
                    "src": "29445:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_12554203470773361527671578846415332832204710888928069025792_by_1",
                      "typeString": "int_const 1255...(51 digits omitted)...5792"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2332,
                  "mutability": "constant",
                  "name": "_ROLE_194",
                  "nameLocation": "29485:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29459:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2328,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29459:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_25108406941546723055343157692830665664409421777856138051584_by_1",
                      "typeString": "int_const 2510...(51 digits omitted)...1584"
                    },
                    "id": 2331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29497:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313934",
                      "id": 2330,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29502:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_194_by_1",
                        "typeString": "int_const 194"
                      },
                      "value": "194"
                    },
                    "src": "29497:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_25108406941546723055343157692830665664409421777856138051584_by_1",
                      "typeString": "int_const 2510...(51 digits omitted)...1584"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2337,
                  "mutability": "constant",
                  "name": "_ROLE_195",
                  "nameLocation": "29537:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29511:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2333,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29511:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_50216813883093446110686315385661331328818843555712276103168_by_1",
                      "typeString": "int_const 5021...(51 digits omitted)...3168"
                    },
                    "id": 2336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2334,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29549:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313935",
                      "id": 2335,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29554:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_195_by_1",
                        "typeString": "int_const 195"
                      },
                      "value": "195"
                    },
                    "src": "29549:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_50216813883093446110686315385661331328818843555712276103168_by_1",
                      "typeString": "int_const 5021...(51 digits omitted)...3168"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2342,
                  "mutability": "constant",
                  "name": "_ROLE_196",
                  "nameLocation": "29589:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29563:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2338,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29563:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_100433627766186892221372630771322662657637687111424552206336_by_1",
                      "typeString": "int_const 1004...(52 digits omitted)...6336"
                    },
                    "id": 2341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29601:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313936",
                      "id": 2340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29606:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_196_by_1",
                        "typeString": "int_const 196"
                      },
                      "value": "196"
                    },
                    "src": "29601:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_100433627766186892221372630771322662657637687111424552206336_by_1",
                      "typeString": "int_const 1004...(52 digits omitted)...6336"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2347,
                  "mutability": "constant",
                  "name": "_ROLE_197",
                  "nameLocation": "29641:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29615:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29615:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_200867255532373784442745261542645325315275374222849104412672_by_1",
                      "typeString": "int_const 2008...(52 digits omitted)...2672"
                    },
                    "id": 2346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29653:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313937",
                      "id": 2345,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29658:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_197_by_1",
                        "typeString": "int_const 197"
                      },
                      "value": "197"
                    },
                    "src": "29653:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_200867255532373784442745261542645325315275374222849104412672_by_1",
                      "typeString": "int_const 2008...(52 digits omitted)...2672"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2352,
                  "mutability": "constant",
                  "name": "_ROLE_198",
                  "nameLocation": "29693:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29667:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29667:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_401734511064747568885490523085290650630550748445698208825344_by_1",
                      "typeString": "int_const 4017...(52 digits omitted)...5344"
                    },
                    "id": 2351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2349,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29705:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313938",
                      "id": 2350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29710:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_198_by_1",
                        "typeString": "int_const 198"
                      },
                      "value": "198"
                    },
                    "src": "29705:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_401734511064747568885490523085290650630550748445698208825344_by_1",
                      "typeString": "int_const 4017...(52 digits omitted)...5344"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2357,
                  "mutability": "constant",
                  "name": "_ROLE_199",
                  "nameLocation": "29745:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29719:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2353,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29719:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_803469022129495137770981046170581301261101496891396417650688_by_1",
                      "typeString": "int_const 8034...(52 digits omitted)...0688"
                    },
                    "id": 2356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2354,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29757:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "313939",
                      "id": 2355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29762:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_199_by_1",
                        "typeString": "int_const 199"
                      },
                      "value": "199"
                    },
                    "src": "29757:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_803469022129495137770981046170581301261101496891396417650688_by_1",
                      "typeString": "int_const 8034...(52 digits omitted)...0688"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2362,
                  "mutability": "constant",
                  "name": "_ROLE_200",
                  "nameLocation": "29797:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29771:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29771:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1606938044258990275541962092341162602522202993782792835301376_by_1",
                      "typeString": "int_const 1606...(53 digits omitted)...1376"
                    },
                    "id": 2361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29809:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323030",
                      "id": 2360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29814:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_200_by_1",
                        "typeString": "int_const 200"
                      },
                      "value": "200"
                    },
                    "src": "29809:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1606938044258990275541962092341162602522202993782792835301376_by_1",
                      "typeString": "int_const 1606...(53 digits omitted)...1376"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2367,
                  "mutability": "constant",
                  "name": "_ROLE_201",
                  "nameLocation": "29849:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29823:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2363,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29823:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3213876088517980551083924184682325205044405987565585670602752_by_1",
                      "typeString": "int_const 3213...(53 digits omitted)...2752"
                    },
                    "id": 2366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29861:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323031",
                      "id": 2365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29866:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_201_by_1",
                        "typeString": "int_const 201"
                      },
                      "value": "201"
                    },
                    "src": "29861:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3213876088517980551083924184682325205044405987565585670602752_by_1",
                      "typeString": "int_const 3213...(53 digits omitted)...2752"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2372,
                  "mutability": "constant",
                  "name": "_ROLE_202",
                  "nameLocation": "29901:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29875:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29875:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_6427752177035961102167848369364650410088811975131171341205504_by_1",
                      "typeString": "int_const 6427...(53 digits omitted)...5504"
                    },
                    "id": 2371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29913:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323032",
                      "id": 2370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29918:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_202_by_1",
                        "typeString": "int_const 202"
                      },
                      "value": "202"
                    },
                    "src": "29913:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6427752177035961102167848369364650410088811975131171341205504_by_1",
                      "typeString": "int_const 6427...(53 digits omitted)...5504"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2377,
                  "mutability": "constant",
                  "name": "_ROLE_203",
                  "nameLocation": "29953:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29927:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2373,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29927:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_12855504354071922204335696738729300820177623950262342682411008_by_1",
                      "typeString": "int_const 1285...(54 digits omitted)...1008"
                    },
                    "id": 2376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29965:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323033",
                      "id": 2375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29970:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_203_by_1",
                        "typeString": "int_const 203"
                      },
                      "value": "203"
                    },
                    "src": "29965:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_12855504354071922204335696738729300820177623950262342682411008_by_1",
                      "typeString": "int_const 1285...(54 digits omitted)...1008"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2382,
                  "mutability": "constant",
                  "name": "_ROLE_204",
                  "nameLocation": "30005:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "29979:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2378,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29979:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_25711008708143844408671393477458601640355247900524685364822016_by_1",
                      "typeString": "int_const 2571...(54 digits omitted)...2016"
                    },
                    "id": 2381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30017:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323034",
                      "id": 2380,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30022:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_204_by_1",
                        "typeString": "int_const 204"
                      },
                      "value": "204"
                    },
                    "src": "30017:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_25711008708143844408671393477458601640355247900524685364822016_by_1",
                      "typeString": "int_const 2571...(54 digits omitted)...2016"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2387,
                  "mutability": "constant",
                  "name": "_ROLE_205",
                  "nameLocation": "30057:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30031:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30031:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_51422017416287688817342786954917203280710495801049370729644032_by_1",
                      "typeString": "int_const 5142...(54 digits omitted)...4032"
                    },
                    "id": 2386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30069:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323035",
                      "id": 2385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30074:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_205_by_1",
                        "typeString": "int_const 205"
                      },
                      "value": "205"
                    },
                    "src": "30069:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_51422017416287688817342786954917203280710495801049370729644032_by_1",
                      "typeString": "int_const 5142...(54 digits omitted)...4032"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2392,
                  "mutability": "constant",
                  "name": "_ROLE_206",
                  "nameLocation": "30109:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30083:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2388,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30083:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_102844034832575377634685573909834406561420991602098741459288064_by_1",
                      "typeString": "int_const 1028...(55 digits omitted)...8064"
                    },
                    "id": 2391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30121:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323036",
                      "id": 2390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30126:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_206_by_1",
                        "typeString": "int_const 206"
                      },
                      "value": "206"
                    },
                    "src": "30121:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_102844034832575377634685573909834406561420991602098741459288064_by_1",
                      "typeString": "int_const 1028...(55 digits omitted)...8064"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2397,
                  "mutability": "constant",
                  "name": "_ROLE_207",
                  "nameLocation": "30161:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30135:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30135:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_205688069665150755269371147819668813122841983204197482918576128_by_1",
                      "typeString": "int_const 2056...(55 digits omitted)...6128"
                    },
                    "id": 2396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30173:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323037",
                      "id": 2395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30178:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_207_by_1",
                        "typeString": "int_const 207"
                      },
                      "value": "207"
                    },
                    "src": "30173:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_205688069665150755269371147819668813122841983204197482918576128_by_1",
                      "typeString": "int_const 2056...(55 digits omitted)...6128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2402,
                  "mutability": "constant",
                  "name": "_ROLE_208",
                  "nameLocation": "30213:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30187:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2398,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30187:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_411376139330301510538742295639337626245683966408394965837152256_by_1",
                      "typeString": "int_const 4113...(55 digits omitted)...2256"
                    },
                    "id": 2401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30225:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323038",
                      "id": 2400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30230:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_208_by_1",
                        "typeString": "int_const 208"
                      },
                      "value": "208"
                    },
                    "src": "30225:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_411376139330301510538742295639337626245683966408394965837152256_by_1",
                      "typeString": "int_const 4113...(55 digits omitted)...2256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2407,
                  "mutability": "constant",
                  "name": "_ROLE_209",
                  "nameLocation": "30265:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30239:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2403,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30239:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_822752278660603021077484591278675252491367932816789931674304512_by_1",
                      "typeString": "int_const 8227...(55 digits omitted)...4512"
                    },
                    "id": 2406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30277:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323039",
                      "id": 2405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30282:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_209_by_1",
                        "typeString": "int_const 209"
                      },
                      "value": "209"
                    },
                    "src": "30277:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_822752278660603021077484591278675252491367932816789931674304512_by_1",
                      "typeString": "int_const 8227...(55 digits omitted)...4512"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2412,
                  "mutability": "constant",
                  "name": "_ROLE_210",
                  "nameLocation": "30317:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30291:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2408,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30291:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1645504557321206042154969182557350504982735865633579863348609024_by_1",
                      "typeString": "int_const 1645...(56 digits omitted)...9024"
                    },
                    "id": 2411,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30329:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323130",
                      "id": 2410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30334:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_210_by_1",
                        "typeString": "int_const 210"
                      },
                      "value": "210"
                    },
                    "src": "30329:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1645504557321206042154969182557350504982735865633579863348609024_by_1",
                      "typeString": "int_const 1645...(56 digits omitted)...9024"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2417,
                  "mutability": "constant",
                  "name": "_ROLE_211",
                  "nameLocation": "30369:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30343:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30343:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3291009114642412084309938365114701009965471731267159726697218048_by_1",
                      "typeString": "int_const 3291...(56 digits omitted)...8048"
                    },
                    "id": 2416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30381:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323131",
                      "id": 2415,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30386:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_211_by_1",
                        "typeString": "int_const 211"
                      },
                      "value": "211"
                    },
                    "src": "30381:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3291009114642412084309938365114701009965471731267159726697218048_by_1",
                      "typeString": "int_const 3291...(56 digits omitted)...8048"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2422,
                  "mutability": "constant",
                  "name": "_ROLE_212",
                  "nameLocation": "30421:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30395:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2418,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30395:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_6582018229284824168619876730229402019930943462534319453394436096_by_1",
                      "typeString": "int_const 6582...(56 digits omitted)...6096"
                    },
                    "id": 2421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30433:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323132",
                      "id": 2420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30438:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_212_by_1",
                        "typeString": "int_const 212"
                      },
                      "value": "212"
                    },
                    "src": "30433:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6582018229284824168619876730229402019930943462534319453394436096_by_1",
                      "typeString": "int_const 6582...(56 digits omitted)...6096"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2427,
                  "mutability": "constant",
                  "name": "_ROLE_213",
                  "nameLocation": "30473:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30447:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30447:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_13164036458569648337239753460458804039861886925068638906788872192_by_1",
                      "typeString": "int_const 1316...(57 digits omitted)...2192"
                    },
                    "id": 2426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2424,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30485:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323133",
                      "id": 2425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30490:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_213_by_1",
                        "typeString": "int_const 213"
                      },
                      "value": "213"
                    },
                    "src": "30485:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_13164036458569648337239753460458804039861886925068638906788872192_by_1",
                      "typeString": "int_const 1316...(57 digits omitted)...2192"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2432,
                  "mutability": "constant",
                  "name": "_ROLE_214",
                  "nameLocation": "30525:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30499:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2428,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30499:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_26328072917139296674479506920917608079723773850137277813577744384_by_1",
                      "typeString": "int_const 2632...(57 digits omitted)...4384"
                    },
                    "id": 2431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30537:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323134",
                      "id": 2430,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30542:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_214_by_1",
                        "typeString": "int_const 214"
                      },
                      "value": "214"
                    },
                    "src": "30537:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_26328072917139296674479506920917608079723773850137277813577744384_by_1",
                      "typeString": "int_const 2632...(57 digits omitted)...4384"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2437,
                  "mutability": "constant",
                  "name": "_ROLE_215",
                  "nameLocation": "30577:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30551:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2433,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30551:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_52656145834278593348959013841835216159447547700274555627155488768_by_1",
                      "typeString": "int_const 5265...(57 digits omitted)...8768"
                    },
                    "id": 2436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30589:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323135",
                      "id": 2435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30594:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_215_by_1",
                        "typeString": "int_const 215"
                      },
                      "value": "215"
                    },
                    "src": "30589:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_52656145834278593348959013841835216159447547700274555627155488768_by_1",
                      "typeString": "int_const 5265...(57 digits omitted)...8768"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2442,
                  "mutability": "constant",
                  "name": "_ROLE_216",
                  "nameLocation": "30629:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30603:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30603:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_105312291668557186697918027683670432318895095400549111254310977536_by_1",
                      "typeString": "int_const 1053...(58 digits omitted)...7536"
                    },
                    "id": 2441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30641:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323136",
                      "id": 2440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30646:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_216_by_1",
                        "typeString": "int_const 216"
                      },
                      "value": "216"
                    },
                    "src": "30641:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_105312291668557186697918027683670432318895095400549111254310977536_by_1",
                      "typeString": "int_const 1053...(58 digits omitted)...7536"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2447,
                  "mutability": "constant",
                  "name": "_ROLE_217",
                  "nameLocation": "30681:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30655:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30655:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_210624583337114373395836055367340864637790190801098222508621955072_by_1",
                      "typeString": "int_const 2106...(58 digits omitted)...5072"
                    },
                    "id": 2446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30693:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323137",
                      "id": 2445,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30698:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_217_by_1",
                        "typeString": "int_const 217"
                      },
                      "value": "217"
                    },
                    "src": "30693:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_210624583337114373395836055367340864637790190801098222508621955072_by_1",
                      "typeString": "int_const 2106...(58 digits omitted)...5072"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2452,
                  "mutability": "constant",
                  "name": "_ROLE_218",
                  "nameLocation": "30733:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30707:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2448,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30707:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_421249166674228746791672110734681729275580381602196445017243910144_by_1",
                      "typeString": "int_const 4212...(58 digits omitted)...0144"
                    },
                    "id": 2451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30745:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323138",
                      "id": 2450,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30750:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_218_by_1",
                        "typeString": "int_const 218"
                      },
                      "value": "218"
                    },
                    "src": "30745:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_421249166674228746791672110734681729275580381602196445017243910144_by_1",
                      "typeString": "int_const 4212...(58 digits omitted)...0144"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2457,
                  "mutability": "constant",
                  "name": "_ROLE_219",
                  "nameLocation": "30785:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30759:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2453,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30759:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_842498333348457493583344221469363458551160763204392890034487820288_by_1",
                      "typeString": "int_const 8424...(58 digits omitted)...0288"
                    },
                    "id": 2456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2454,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30797:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323139",
                      "id": 2455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30802:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_219_by_1",
                        "typeString": "int_const 219"
                      },
                      "value": "219"
                    },
                    "src": "30797:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_842498333348457493583344221469363458551160763204392890034487820288_by_1",
                      "typeString": "int_const 8424...(58 digits omitted)...0288"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2462,
                  "mutability": "constant",
                  "name": "_ROLE_220",
                  "nameLocation": "30837:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30811:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30811:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1684996666696914987166688442938726917102321526408785780068975640576_by_1",
                      "typeString": "int_const 1684...(59 digits omitted)...0576"
                    },
                    "id": 2461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30849:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323230",
                      "id": 2460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30854:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_220_by_1",
                        "typeString": "int_const 220"
                      },
                      "value": "220"
                    },
                    "src": "30849:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1684996666696914987166688442938726917102321526408785780068975640576_by_1",
                      "typeString": "int_const 1684...(59 digits omitted)...0576"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2467,
                  "mutability": "constant",
                  "name": "_ROLE_221",
                  "nameLocation": "30889:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30863:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2463,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30863:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3369993333393829974333376885877453834204643052817571560137951281152_by_1",
                      "typeString": "int_const 3369...(59 digits omitted)...1152"
                    },
                    "id": 2466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30901:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323231",
                      "id": 2465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30906:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_221_by_1",
                        "typeString": "int_const 221"
                      },
                      "value": "221"
                    },
                    "src": "30901:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3369993333393829974333376885877453834204643052817571560137951281152_by_1",
                      "typeString": "int_const 3369...(59 digits omitted)...1152"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2472,
                  "mutability": "constant",
                  "name": "_ROLE_222",
                  "nameLocation": "30941:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30915:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2468,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30915:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_6739986666787659948666753771754907668409286105635143120275902562304_by_1",
                      "typeString": "int_const 6739...(59 digits omitted)...2304"
                    },
                    "id": 2471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30953:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323232",
                      "id": 2470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30958:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_222_by_1",
                        "typeString": "int_const 222"
                      },
                      "value": "222"
                    },
                    "src": "30953:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6739986666787659948666753771754907668409286105635143120275902562304_by_1",
                      "typeString": "int_const 6739...(59 digits omitted)...2304"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2477,
                  "mutability": "constant",
                  "name": "_ROLE_223",
                  "nameLocation": "30993:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "30967:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30967:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_13479973333575319897333507543509815336818572211270286240551805124608_by_1",
                      "typeString": "int_const 1347...(60 digits omitted)...4608"
                    },
                    "id": 2476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31005:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323233",
                      "id": 2475,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31010:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_223_by_1",
                        "typeString": "int_const 223"
                      },
                      "value": "223"
                    },
                    "src": "31005:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_13479973333575319897333507543509815336818572211270286240551805124608_by_1",
                      "typeString": "int_const 1347...(60 digits omitted)...4608"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2482,
                  "mutability": "constant",
                  "name": "_ROLE_224",
                  "nameLocation": "31045:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31019:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2478,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31019:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_26959946667150639794667015087019630673637144422540572481103610249216_by_1",
                      "typeString": "int_const 2695...(60 digits omitted)...9216"
                    },
                    "id": 2481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31057:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323234",
                      "id": 2480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31062:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_224_by_1",
                        "typeString": "int_const 224"
                      },
                      "value": "224"
                    },
                    "src": "31057:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_26959946667150639794667015087019630673637144422540572481103610249216_by_1",
                      "typeString": "int_const 2695...(60 digits omitted)...9216"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2487,
                  "mutability": "constant",
                  "name": "_ROLE_225",
                  "nameLocation": "31097:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31071:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31071:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_53919893334301279589334030174039261347274288845081144962207220498432_by_1",
                      "typeString": "int_const 5391...(60 digits omitted)...8432"
                    },
                    "id": 2486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31109:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323235",
                      "id": 2485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31114:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_225_by_1",
                        "typeString": "int_const 225"
                      },
                      "value": "225"
                    },
                    "src": "31109:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_53919893334301279589334030174039261347274288845081144962207220498432_by_1",
                      "typeString": "int_const 5391...(60 digits omitted)...8432"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2492,
                  "mutability": "constant",
                  "name": "_ROLE_226",
                  "nameLocation": "31149:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31123:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2488,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31123:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_107839786668602559178668060348078522694548577690162289924414440996864_by_1",
                      "typeString": "int_const 1078...(61 digits omitted)...6864"
                    },
                    "id": 2491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31161:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323236",
                      "id": 2490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31166:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_226_by_1",
                        "typeString": "int_const 226"
                      },
                      "value": "226"
                    },
                    "src": "31161:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_107839786668602559178668060348078522694548577690162289924414440996864_by_1",
                      "typeString": "int_const 1078...(61 digits omitted)...6864"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2497,
                  "mutability": "constant",
                  "name": "_ROLE_227",
                  "nameLocation": "31201:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31175:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31175:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_215679573337205118357336120696157045389097155380324579848828881993728_by_1",
                      "typeString": "int_const 2156...(61 digits omitted)...3728"
                    },
                    "id": 2496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31213:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323237",
                      "id": 2495,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31218:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_227_by_1",
                        "typeString": "int_const 227"
                      },
                      "value": "227"
                    },
                    "src": "31213:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_215679573337205118357336120696157045389097155380324579848828881993728_by_1",
                      "typeString": "int_const 2156...(61 digits omitted)...3728"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2502,
                  "mutability": "constant",
                  "name": "_ROLE_228",
                  "nameLocation": "31253:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31227:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2498,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31227:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_431359146674410236714672241392314090778194310760649159697657763987456_by_1",
                      "typeString": "int_const 4313...(61 digits omitted)...7456"
                    },
                    "id": 2501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31265:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323238",
                      "id": 2500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31270:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_228_by_1",
                        "typeString": "int_const 228"
                      },
                      "value": "228"
                    },
                    "src": "31265:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_431359146674410236714672241392314090778194310760649159697657763987456_by_1",
                      "typeString": "int_const 4313...(61 digits omitted)...7456"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2507,
                  "mutability": "constant",
                  "name": "_ROLE_229",
                  "nameLocation": "31305:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31279:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2503,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31279:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_862718293348820473429344482784628181556388621521298319395315527974912_by_1",
                      "typeString": "int_const 8627...(61 digits omitted)...4912"
                    },
                    "id": 2506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2504,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31317:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323239",
                      "id": 2505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31322:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_229_by_1",
                        "typeString": "int_const 229"
                      },
                      "value": "229"
                    },
                    "src": "31317:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_862718293348820473429344482784628181556388621521298319395315527974912_by_1",
                      "typeString": "int_const 8627...(61 digits omitted)...4912"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2512,
                  "mutability": "constant",
                  "name": "_ROLE_230",
                  "nameLocation": "31357:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31331:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2508,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31331:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1725436586697640946858688965569256363112777243042596638790631055949824_by_1",
                      "typeString": "int_const 1725...(62 digits omitted)...9824"
                    },
                    "id": 2511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31369:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323330",
                      "id": 2510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31374:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_230_by_1",
                        "typeString": "int_const 230"
                      },
                      "value": "230"
                    },
                    "src": "31369:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1725436586697640946858688965569256363112777243042596638790631055949824_by_1",
                      "typeString": "int_const 1725...(62 digits omitted)...9824"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2517,
                  "mutability": "constant",
                  "name": "_ROLE_231",
                  "nameLocation": "31409:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31383:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31383:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3450873173395281893717377931138512726225554486085193277581262111899648_by_1",
                      "typeString": "int_const 3450...(62 digits omitted)...9648"
                    },
                    "id": 2516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31421:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323331",
                      "id": 2515,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31426:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_231_by_1",
                        "typeString": "int_const 231"
                      },
                      "value": "231"
                    },
                    "src": "31421:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3450873173395281893717377931138512726225554486085193277581262111899648_by_1",
                      "typeString": "int_const 3450...(62 digits omitted)...9648"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2522,
                  "mutability": "constant",
                  "name": "_ROLE_232",
                  "nameLocation": "31461:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31435:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31435:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_6901746346790563787434755862277025452451108972170386555162524223799296_by_1",
                      "typeString": "int_const 6901...(62 digits omitted)...9296"
                    },
                    "id": 2521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31473:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323332",
                      "id": 2520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31478:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_232_by_1",
                        "typeString": "int_const 232"
                      },
                      "value": "232"
                    },
                    "src": "31473:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_6901746346790563787434755862277025452451108972170386555162524223799296_by_1",
                      "typeString": "int_const 6901...(62 digits omitted)...9296"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2527,
                  "mutability": "constant",
                  "name": "_ROLE_233",
                  "nameLocation": "31513:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31487:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31487:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_13803492693581127574869511724554050904902217944340773110325048447598592_by_1",
                      "typeString": "int_const 1380...(63 digits omitted)...8592"
                    },
                    "id": 2526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31525:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323333",
                      "id": 2525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31530:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_233_by_1",
                        "typeString": "int_const 233"
                      },
                      "value": "233"
                    },
                    "src": "31525:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_13803492693581127574869511724554050904902217944340773110325048447598592_by_1",
                      "typeString": "int_const 1380...(63 digits omitted)...8592"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2532,
                  "mutability": "constant",
                  "name": "_ROLE_234",
                  "nameLocation": "31565:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31539:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31539:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_27606985387162255149739023449108101809804435888681546220650096895197184_by_1",
                      "typeString": "int_const 2760...(63 digits omitted)...7184"
                    },
                    "id": 2531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31577:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323334",
                      "id": 2530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31582:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_234_by_1",
                        "typeString": "int_const 234"
                      },
                      "value": "234"
                    },
                    "src": "31577:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_27606985387162255149739023449108101809804435888681546220650096895197184_by_1",
                      "typeString": "int_const 2760...(63 digits omitted)...7184"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2537,
                  "mutability": "constant",
                  "name": "_ROLE_235",
                  "nameLocation": "31617:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31591:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31591:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_55213970774324510299478046898216203619608871777363092441300193790394368_by_1",
                      "typeString": "int_const 5521...(63 digits omitted)...4368"
                    },
                    "id": 2536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31629:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323335",
                      "id": 2535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31634:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_235_by_1",
                        "typeString": "int_const 235"
                      },
                      "value": "235"
                    },
                    "src": "31629:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_55213970774324510299478046898216203619608871777363092441300193790394368_by_1",
                      "typeString": "int_const 5521...(63 digits omitted)...4368"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2542,
                  "mutability": "constant",
                  "name": "_ROLE_236",
                  "nameLocation": "31669:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31643:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2538,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31643:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_110427941548649020598956093796432407239217743554726184882600387580788736_by_1",
                      "typeString": "int_const 1104...(64 digits omitted)...8736"
                    },
                    "id": 2541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31681:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323336",
                      "id": 2540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31686:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_236_by_1",
                        "typeString": "int_const 236"
                      },
                      "value": "236"
                    },
                    "src": "31681:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_110427941548649020598956093796432407239217743554726184882600387580788736_by_1",
                      "typeString": "int_const 1104...(64 digits omitted)...8736"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2547,
                  "mutability": "constant",
                  "name": "_ROLE_237",
                  "nameLocation": "31721:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31695:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31695:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_220855883097298041197912187592864814478435487109452369765200775161577472_by_1",
                      "typeString": "int_const 2208...(64 digits omitted)...7472"
                    },
                    "id": 2546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31733:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323337",
                      "id": 2545,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31738:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_237_by_1",
                        "typeString": "int_const 237"
                      },
                      "value": "237"
                    },
                    "src": "31733:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_220855883097298041197912187592864814478435487109452369765200775161577472_by_1",
                      "typeString": "int_const 2208...(64 digits omitted)...7472"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2552,
                  "mutability": "constant",
                  "name": "_ROLE_238",
                  "nameLocation": "31773:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31747:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2548,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31747:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_441711766194596082395824375185729628956870974218904739530401550323154944_by_1",
                      "typeString": "int_const 4417...(64 digits omitted)...4944"
                    },
                    "id": 2551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2549,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31785:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323338",
                      "id": 2550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31790:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_238_by_1",
                        "typeString": "int_const 238"
                      },
                      "value": "238"
                    },
                    "src": "31785:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_441711766194596082395824375185729628956870974218904739530401550323154944_by_1",
                      "typeString": "int_const 4417...(64 digits omitted)...4944"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2557,
                  "mutability": "constant",
                  "name": "_ROLE_239",
                  "nameLocation": "31825:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31799:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31799:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_883423532389192164791648750371459257913741948437809479060803100646309888_by_1",
                      "typeString": "int_const 8834...(64 digits omitted)...9888"
                    },
                    "id": 2556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2554,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31837:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323339",
                      "id": 2555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31842:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_239_by_1",
                        "typeString": "int_const 239"
                      },
                      "value": "239"
                    },
                    "src": "31837:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_883423532389192164791648750371459257913741948437809479060803100646309888_by_1",
                      "typeString": "int_const 8834...(64 digits omitted)...9888"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2562,
                  "mutability": "constant",
                  "name": "_ROLE_240",
                  "nameLocation": "31877:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31851:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31851:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1766847064778384329583297500742918515827483896875618958121606201292619776_by_1",
                      "typeString": "int_const 1766...(65 digits omitted)...9776"
                    },
                    "id": 2561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31889:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323430",
                      "id": 2560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31894:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_240_by_1",
                        "typeString": "int_const 240"
                      },
                      "value": "240"
                    },
                    "src": "31889:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1766847064778384329583297500742918515827483896875618958121606201292619776_by_1",
                      "typeString": "int_const 1766...(65 digits omitted)...9776"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2567,
                  "mutability": "constant",
                  "name": "_ROLE_241",
                  "nameLocation": "31929:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31903:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2563,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31903:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3533694129556768659166595001485837031654967793751237916243212402585239552_by_1",
                      "typeString": "int_const 3533...(65 digits omitted)...9552"
                    },
                    "id": 2566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2564,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31941:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323431",
                      "id": 2565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31946:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_241_by_1",
                        "typeString": "int_const 241"
                      },
                      "value": "241"
                    },
                    "src": "31941:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3533694129556768659166595001485837031654967793751237916243212402585239552_by_1",
                      "typeString": "int_const 3533...(65 digits omitted)...9552"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2572,
                  "mutability": "constant",
                  "name": "_ROLE_242",
                  "nameLocation": "31981:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "31955:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2568,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31955:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_7067388259113537318333190002971674063309935587502475832486424805170479104_by_1",
                      "typeString": "int_const 7067...(65 digits omitted)...9104"
                    },
                    "id": 2571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2569,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31993:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323432",
                      "id": 2570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31998:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_242_by_1",
                        "typeString": "int_const 242"
                      },
                      "value": "242"
                    },
                    "src": "31993:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_7067388259113537318333190002971674063309935587502475832486424805170479104_by_1",
                      "typeString": "int_const 7067...(65 digits omitted)...9104"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2577,
                  "mutability": "constant",
                  "name": "_ROLE_243",
                  "nameLocation": "32033:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32007:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2573,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32007:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_14134776518227074636666380005943348126619871175004951664972849610340958208_by_1",
                      "typeString": "int_const 1413...(66 digits omitted)...8208"
                    },
                    "id": 2576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32045:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323433",
                      "id": 2575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32050:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_243_by_1",
                        "typeString": "int_const 243"
                      },
                      "value": "243"
                    },
                    "src": "32045:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_14134776518227074636666380005943348126619871175004951664972849610340958208_by_1",
                      "typeString": "int_const 1413...(66 digits omitted)...8208"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2582,
                  "mutability": "constant",
                  "name": "_ROLE_244",
                  "nameLocation": "32085:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32059:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2578,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32059:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_28269553036454149273332760011886696253239742350009903329945699220681916416_by_1",
                      "typeString": "int_const 2826...(66 digits omitted)...6416"
                    },
                    "id": 2581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32097:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323434",
                      "id": 2580,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32102:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_244_by_1",
                        "typeString": "int_const 244"
                      },
                      "value": "244"
                    },
                    "src": "32097:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_28269553036454149273332760011886696253239742350009903329945699220681916416_by_1",
                      "typeString": "int_const 2826...(66 digits omitted)...6416"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2587,
                  "mutability": "constant",
                  "name": "_ROLE_245",
                  "nameLocation": "32137:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32111:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32111:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_56539106072908298546665520023773392506479484700019806659891398441363832832_by_1",
                      "typeString": "int_const 5653...(66 digits omitted)...2832"
                    },
                    "id": 2586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32149:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323435",
                      "id": 2585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32154:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_245_by_1",
                        "typeString": "int_const 245"
                      },
                      "value": "245"
                    },
                    "src": "32149:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_56539106072908298546665520023773392506479484700019806659891398441363832832_by_1",
                      "typeString": "int_const 5653...(66 digits omitted)...2832"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2592,
                  "mutability": "constant",
                  "name": "_ROLE_246",
                  "nameLocation": "32189:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32163:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2588,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32163:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_113078212145816597093331040047546785012958969400039613319782796882727665664_by_1",
                      "typeString": "int_const 1130...(67 digits omitted)...5664"
                    },
                    "id": 2591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32201:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323436",
                      "id": 2590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32206:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_246_by_1",
                        "typeString": "int_const 246"
                      },
                      "value": "246"
                    },
                    "src": "32201:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_113078212145816597093331040047546785012958969400039613319782796882727665664_by_1",
                      "typeString": "int_const 1130...(67 digits omitted)...5664"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2597,
                  "mutability": "constant",
                  "name": "_ROLE_247",
                  "nameLocation": "32241:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32215:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32215:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_226156424291633194186662080095093570025917938800079226639565593765455331328_by_1",
                      "typeString": "int_const 2261...(67 digits omitted)...1328"
                    },
                    "id": 2596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32253:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323437",
                      "id": 2595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32258:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_247_by_1",
                        "typeString": "int_const 247"
                      },
                      "value": "247"
                    },
                    "src": "32253:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_226156424291633194186662080095093570025917938800079226639565593765455331328_by_1",
                      "typeString": "int_const 2261...(67 digits omitted)...1328"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2602,
                  "mutability": "constant",
                  "name": "_ROLE_248",
                  "nameLocation": "32293:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32267:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2598,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32267:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 2601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32305:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323438",
                      "id": 2600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32310:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "32305:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2607,
                  "mutability": "constant",
                  "name": "_ROLE_249",
                  "nameLocation": "32345:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32319:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2603,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32319:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_904625697166532776746648320380374280103671755200316906558262375061821325312_by_1",
                      "typeString": "int_const 9046...(67 digits omitted)...5312"
                    },
                    "id": 2606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32357:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323439",
                      "id": 2605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32362:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_249_by_1",
                        "typeString": "int_const 249"
                      },
                      "value": "249"
                    },
                    "src": "32357:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_904625697166532776746648320380374280103671755200316906558262375061821325312_by_1",
                      "typeString": "int_const 9046...(67 digits omitted)...5312"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2612,
                  "mutability": "constant",
                  "name": "_ROLE_250",
                  "nameLocation": "32397:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32371:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2608,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32371:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1",
                      "typeString": "int_const 1809...(68 digits omitted)...0624"
                    },
                    "id": 2611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32409:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323530",
                      "id": 2610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32414:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_250_by_1",
                        "typeString": "int_const 250"
                      },
                      "value": "250"
                    },
                    "src": "32409:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1",
                      "typeString": "int_const 1809...(68 digits omitted)...0624"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2617,
                  "mutability": "constant",
                  "name": "_ROLE_251",
                  "nameLocation": "32449:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32423:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32423:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1",
                      "typeString": "int_const 3618...(68 digits omitted)...1248"
                    },
                    "id": 2616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32461:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323531",
                      "id": 2615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32466:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_251_by_1",
                        "typeString": "int_const 251"
                      },
                      "value": "251"
                    },
                    "src": "32461:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1",
                      "typeString": "int_const 3618...(68 digits omitted)...1248"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2622,
                  "mutability": "constant",
                  "name": "_ROLE_252",
                  "nameLocation": "32501:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32475:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2618,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32475:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_7237005577332262213973186563042994240829374041602535252466099000494570602496_by_1",
                      "typeString": "int_const 7237...(68 digits omitted)...2496"
                    },
                    "id": 2621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32513:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323532",
                      "id": 2620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32518:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_252_by_1",
                        "typeString": "int_const 252"
                      },
                      "value": "252"
                    },
                    "src": "32513:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_7237005577332262213973186563042994240829374041602535252466099000494570602496_by_1",
                      "typeString": "int_const 7237...(68 digits omitted)...2496"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2627,
                  "mutability": "constant",
                  "name": "_ROLE_253",
                  "nameLocation": "32553:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32527:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2623,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32527:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_14474011154664524427946373126085988481658748083205070504932198000989141204992_by_1",
                      "typeString": "int_const 1447...(69 digits omitted)...4992"
                    },
                    "id": 2626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32565:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323533",
                      "id": 2625,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32570:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_253_by_1",
                        "typeString": "int_const 253"
                      },
                      "value": "253"
                    },
                    "src": "32565:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_14474011154664524427946373126085988481658748083205070504932198000989141204992_by_1",
                      "typeString": "int_const 1447...(69 digits omitted)...4992"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2632,
                  "mutability": "constant",
                  "name": "_ROLE_254",
                  "nameLocation": "32605:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32579:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2628,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32579:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1",
                      "typeString": "int_const 2894...(69 digits omitted)...9984"
                    },
                    "id": 2631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32617:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323534",
                      "id": 2630,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32622:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_254_by_1",
                        "typeString": "int_const 254"
                      },
                      "value": "254"
                    },
                    "src": "32617:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1",
                      "typeString": "int_const 2894...(69 digits omitted)...9984"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 2637,
                  "mutability": "constant",
                  "name": "_ROLE_255",
                  "nameLocation": "32657:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 2638,
                  "src": "32631:46:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32631:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const 5789...(69 digits omitted)...9968"
                    },
                    "id": 2636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "31",
                      "id": 2634,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32669:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "hexValue": "323535",
                      "id": 2635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32674:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "32669:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const 5789...(69 digits omitted)...9968"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "scope": 2639,
              "src": "535:32145:2",
              "usedErrors": [
                1085,
                1088,
                1091
              ]
            }
          ],
          "src": "32:32649:2"
        },
        "id": 2
      },
      "@turbo-eth/solbase-sol/src/utils/Base64.sol": {
        "ast": {
          "absolutePath": "@turbo-eth/solbase-sol/src/utils/Base64.sol",
          "exportedSymbols": {
            "Base64": [
              2702
            ]
          },
          "id": 2703,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2640,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:3"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Base64",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 2641,
                "nodeType": "StructuredDocumentation",
                "src": "57:250:3",
                "text": "@notice Library to encode and decode strings in Base64.\n @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/utils/Base64.sol)\n @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)"
              },
              "fullyImplemented": true,
              "id": 2702,
              "linearizedBaseContracts": [
                2702
              ],
              "name": "Base64",
              "nameLocation": "315:6:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2654,
                    "nodeType": "Block",
                    "src": "710:2824:3",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "729:2799:3",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "743:29:3",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "767:4:3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "761:5:3"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "761:11:3"
                              },
                              "variables": [
                                {
                                  "name": "dataLength",
                                  "nodeType": "YulTypedName",
                                  "src": "747:10:3",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "800:2718:3",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "937:55:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "962:1:3",
                                          "type": "",
                                          "value": "2"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "dataLength",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "973:10:3"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "985:1:3",
                                                  "type": "",
                                                  "value": "2"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "969:3:3"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "969:18:3"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "989:1:3",
                                              "type": "",
                                              "value": "3"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "div",
                                            "nodeType": "YulIdentifier",
                                            "src": "965:3:3"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "965:26:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "958:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "958:34:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "encodedLength",
                                        "nodeType": "YulTypedName",
                                        "src": "941:13:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1084:21:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1100:4:3",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1094:5:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1094:11:3"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "result",
                                        "nodeType": "YulIdentifier",
                                        "src": "1084:6:3"
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1466:4:3",
                                          "type": "",
                                          "value": "0x1f"
                                        },
                                        {
                                          "hexValue": "4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566",
                                          "kind": "string",
                                          "nodeType": "YulLiteral",
                                          "src": "1472:34:3",
                                          "type": "",
                                          "value": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1459:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1459:48:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1459:48:3"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1531:4:3",
                                          "type": "",
                                          "value": "0x3f"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "hexValue": "6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f",
                                              "kind": "string",
                                              "nodeType": "YulLiteral",
                                              "src": "1541:34:3",
                                              "type": "",
                                              "value": "ghijklmnopqrstuvwxyz0123456789-_"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "fileSafe",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1588:8:3"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "iszero",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1581:6:3"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1581:16:3"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1599:6:3",
                                                  "type": "",
                                                  "value": "0x0230"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mul",
                                                "nodeType": "YulIdentifier",
                                                "src": "1577:3:3"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1577:29:3"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sub",
                                            "nodeType": "YulIdentifier",
                                            "src": "1537:3:3"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1537:70:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1524:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1524:84:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1524:84:3"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1691:28:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "result",
                                          "nodeType": "YulIdentifier",
                                          "src": "1706:6:3"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1714:4:3",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1702:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1702:17:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "1695:3:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1736:34:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "ptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1751:3:3"
                                        },
                                        {
                                          "name": "encodedLength",
                                          "nodeType": "YulIdentifier",
                                          "src": "1756:13:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1747:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1747:23:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "end",
                                        "nodeType": "YulTypedName",
                                        "src": "1740:3:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "1893:675:3",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "1915:20:3",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "1927:4:3"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1933:1:3",
                                                "type": "",
                                                "value": "3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "1923:3:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1923:12:3"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "data",
                                              "nodeType": "YulIdentifier",
                                              "src": "1915:4:3"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "1976:24:3",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "1995:4:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "1989:5:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1989:11:3"
                                          },
                                          "variables": [
                                            {
                                              "name": "input",
                                              "nodeType": "YulTypedName",
                                              "src": "1980:5:3",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "2110:3:3"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2133:2:3",
                                                            "type": "",
                                                            "value": "18"
                                                          },
                                                          {
                                                            "name": "input",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2137:5:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shr",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2129:3:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2129:14:3"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2145:4:3",
                                                        "type": "",
                                                        "value": "0x3F"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2125:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2125:25:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2119:5:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2119:32:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore8",
                                              "nodeType": "YulIdentifier",
                                              "src": "2098:7:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2098:54:3"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2098:54:3"
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2185:3:3"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2190:1:3",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2181:3:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2181:11:3"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2208:2:3",
                                                            "type": "",
                                                            "value": "12"
                                                          },
                                                          {
                                                            "name": "input",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2212:5:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shr",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2204:3:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2204:14:3"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2220:4:3",
                                                        "type": "",
                                                        "value": "0x3F"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2200:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2200:25:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2194:5:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2194:32:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore8",
                                              "nodeType": "YulIdentifier",
                                              "src": "2173:7:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2173:54:3"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2173:54:3"
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2260:3:3"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2265:1:3",
                                                    "type": "",
                                                    "value": "2"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2256:3:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2256:11:3"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2284:1:3",
                                                            "type": "",
                                                            "value": "6"
                                                          },
                                                          {
                                                            "name": "input",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2287:5:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shr",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2279:3:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2279:14:3"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2295:4:3",
                                                        "type": "",
                                                        "value": "0x3F"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2275:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2275:25:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2269:5:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2269:32:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore8",
                                              "nodeType": "YulIdentifier",
                                              "src": "2248:7:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2248:54:3"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2248:54:3"
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2335:3:3"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2340:1:3",
                                                    "type": "",
                                                    "value": "3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2331:3:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2331:11:3"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "input",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2362:5:3"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2370:4:3",
                                                        "type": "",
                                                        "value": "0x3F"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2350:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2350:25:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2344:5:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2344:32:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore8",
                                              "nodeType": "YulIdentifier",
                                              "src": "2323:7:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2323:54:3"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2323:54:3"
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2419:18:3",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "2430:3:3"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2435:1:3",
                                                "type": "",
                                                "value": "4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2426:3:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2426:11:3"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "2419:3:3"
                                            }
                                          ]
                                        },
                                        {
                                          "body": {
                                            "nodeType": "YulBlock",
                                            "src": "2541:9:3",
                                            "statements": [
                                              {
                                                "nodeType": "YulBreak",
                                                "src": "2543:5:3"
                                              }
                                            ]
                                          },
                                          "condition": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2530:3:3"
                                                  },
                                                  {
                                                    "name": "end",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2535:3:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "lt",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2527:2:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2527:12:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "2520:6:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2520:20:3"
                                          },
                                          "nodeType": "YulIf",
                                          "src": "2517:33:3"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1888:1:3",
                                      "type": "",
                                      "value": "1"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "1890:2:3",
                                      "statements": []
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "1885:2:3",
                                      "statements": []
                                    },
                                    "src": "1881:687:3"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2586:27:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dataLength",
                                          "nodeType": "YulIdentifier",
                                          "src": "2599:10:3"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2611:1:3",
                                          "type": "",
                                          "value": "3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mod",
                                        "nodeType": "YulIdentifier",
                                        "src": "2595:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2595:18:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulTypedName",
                                        "src": "2590:1:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "cases": [
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "2671:402:3",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "ptr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2793:3:3"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "r",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2812:1:3"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "iszero",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2805:6:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2805:9:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "iszero",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2798:6:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2798:17:3"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "sub",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2789:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2789:27:3"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2818:4:3",
                                                    "type": "",
                                                    "value": "0x3d"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore8",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2781:7:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2781:42:3"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "2781:42:3"
                                            },
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "ptr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2888:3:3"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "2897:1:3",
                                                            "type": "",
                                                            "value": "1"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "r",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2903:1:3"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "2906:1:3",
                                                                "type": "",
                                                                "value": "1"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "eq",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2900:2:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2900:8:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shl",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2893:3:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2893:16:3"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "sub",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2884:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2884:26:3"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2912:4:3",
                                                    "type": "",
                                                    "value": "0x3d"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore8",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2876:7:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2876:41:3"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "2876:41:3"
                                            },
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "result",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3033:6:3"
                                                  },
                                                  {
                                                    "name": "encodedLength",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3041:13:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3026:6:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3026:29:3"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "3026:29:3"
                                            }
                                          ]
                                        },
                                        "nodeType": "YulCase",
                                        "src": "2664:409:3",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2669:1:3",
                                          "type": "",
                                          "value": "0"
                                        }
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "3098:163:3",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "name": "result",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3182:6:3"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "encodedLength",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3194:13:3"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "name": "r",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "3227:1:3"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "iszero",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "3220:6:3"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "3220:9:3"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "iszero",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3213:6:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "3213:17:3"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "r",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "3235:1:3"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "3238:1:3",
                                                                "type": "",
                                                                "value": "1"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "eq",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3232:2:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "3232:8:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3209:3:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "3209:32:3"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "sub",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "3190:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "3190:52:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3175:6:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "3175:68:3"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "3175:68:3"
                                            }
                                          ]
                                        },
                                        "nodeType": "YulCase",
                                        "src": "3090:171:3",
                                        "value": "default"
                                      }
                                    ],
                                    "expression": {
                                      "name": "noPadding",
                                      "nodeType": "YulIdentifier",
                                      "src": "2638:9:3"
                                    },
                                    "nodeType": "YulSwitch",
                                    "src": "2631:630:3"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3471:4:3",
                                          "type": "",
                                          "value": "0x40"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "end",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3485:3:3"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3490:2:3",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "3481:3:3"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3481:12:3"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3499:2:3",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "not",
                                                "nodeType": "YulIdentifier",
                                                "src": "3495:3:3"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3495:7:3"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3477:3:3"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3477:26:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3464:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3464:40:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3464:40:3"
                                  }
                                ]
                              },
                              "condition": {
                                "name": "dataLength",
                                "nodeType": "YulIdentifier",
                                "src": "789:10:3"
                              },
                              "nodeType": "YulIf",
                              "src": "786:2732:3"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 2644,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1915:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2644,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1927:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2644,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1995:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2644,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "767:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2646,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1588:8:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2648,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2638:9:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2651,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1084:6:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2651,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1706:6:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2651,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3033:6:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2651,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3182:6:3",
                            "valueSize": 1
                          }
                        ],
                        "id": 2653,
                        "nodeType": "InlineAssembly",
                        "src": "720:2808:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2642,
                    "nodeType": "StructuredDocumentation",
                    "src": "328:266:3",
                    "text": "@dev Encodes `data` using the base64 encoding described in RFC 4648.\n See: https://datatracker.ietf.org/doc/html/rfc4648\n @param fileSafe  Whether to replace '+' with '-' and '/' with '_'.\n @param noPadding Whether to strip away the padding."
                  },
                  "id": 2655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "encode",
                  "nameLocation": "608:6:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2644,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "628:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2655,
                        "src": "615:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2643,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "615:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2646,
                        "mutability": "mutable",
                        "name": "fileSafe",
                        "nameLocation": "639:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2655,
                        "src": "634:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2645,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "634:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2648,
                        "mutability": "mutable",
                        "name": "noPadding",
                        "nameLocation": "654:9:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2655,
                        "src": "649:14:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2647,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "649:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "614:50:3"
                  },
                  "returnParameters": {
                    "id": 2652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2651,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "702:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2655,
                        "src": "688:20:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2650,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "688:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "687:22:3"
                  },
                  "scope": 2702,
                  "src": "599:2935:3",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2671,
                    "nodeType": "Block",
                    "src": "3749:52:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 2669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2663,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2661,
                            "src": "3759:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2665,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2658,
                                "src": "3775:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "hexValue": "66616c7365",
                                "id": 2666,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3781:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "66616c7365",
                                "id": 2667,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3788:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 2664,
                              "name": "encode",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                2655,
                                2672,
                                2691
                              ],
                              "referencedDeclaration": 2655,
                              "src": "3768:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bool_$_t_bool_$returns$_t_string_memory_ptr_$",
                                "typeString": "function (bytes memory,bool,bool) pure returns (string memory)"
                              }
                            },
                            "id": 2668,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3768:26:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3759:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 2670,
                        "nodeType": "ExpressionStatement",
                        "src": "3759:35:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2656,
                    "nodeType": "StructuredDocumentation",
                    "src": "3540:124:3",
                    "text": "@dev Encodes `data` using the base64 encoding described in RFC 4648.\n Equivalent to `encode(data, false, false)`."
                  },
                  "id": 2672,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "encode",
                  "nameLocation": "3678:6:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2659,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2658,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3698:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2672,
                        "src": "3685:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2657,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3685:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3684:19:3"
                  },
                  "returnParameters": {
                    "id": 2662,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2661,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3741:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2672,
                        "src": "3727:20:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2660,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3727:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3726:22:3"
                  },
                  "scope": 2702,
                  "src": "3669:132:3",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2690,
                    "nodeType": "Block",
                    "src": "4034:55:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 2688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2682,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2680,
                            "src": "4044:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2684,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2675,
                                "src": "4060:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "id": 2685,
                                "name": "fileSafe",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2677,
                                "src": "4066:8:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "hexValue": "66616c7365",
                                "id": 2686,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4076:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 2683,
                              "name": "encode",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                2655,
                                2672,
                                2691
                              ],
                              "referencedDeclaration": 2655,
                              "src": "4053:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bool_$_t_bool_$returns$_t_string_memory_ptr_$",
                                "typeString": "function (bytes memory,bool,bool) pure returns (string memory)"
                              }
                            },
                            "id": 2687,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4053:29:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "4044:38:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "id": 2689,
                        "nodeType": "ExpressionStatement",
                        "src": "4044:38:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2673,
                    "nodeType": "StructuredDocumentation",
                    "src": "3807:127:3",
                    "text": "@dev Encodes `data` using the base64 encoding described in RFC 4648.\n Equivalent to `encode(data, fileSafe, false)`."
                  },
                  "id": 2691,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "encode",
                  "nameLocation": "3948:6:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2678,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2675,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3968:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2691,
                        "src": "3955:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2674,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3955:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2677,
                        "mutability": "mutable",
                        "name": "fileSafe",
                        "nameLocation": "3979:8:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2691,
                        "src": "3974:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2676,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3974:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3954:34:3"
                  },
                  "returnParameters": {
                    "id": 2681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2680,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "4026:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2691,
                        "src": "4012:20:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2679,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4012:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4011:22:3"
                  },
                  "scope": 2702,
                  "src": "3939:150:3",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2700,
                    "nodeType": "Block",
                    "src": "4677:2636:3",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4696:2611:3",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4710:29:3",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "4734:4:3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4728:5:3"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4728:11:3"
                              },
                              "variables": [
                                {
                                  "name": "dataLength",
                                  "nodeType": "YulTypedName",
                                  "src": "4714:10:3",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4767:2530:3",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "4785:32:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "data",
                                          "nodeType": "YulIdentifier",
                                          "src": "4800:4:3"
                                        },
                                        {
                                          "name": "dataLength",
                                          "nodeType": "YulIdentifier",
                                          "src": "4806:10:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4796:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4796:21:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "end",
                                        "nodeType": "YulTypedName",
                                        "src": "4789:3:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "4834:47:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4863:1:3",
                                              "type": "",
                                              "value": "2"
                                            },
                                            {
                                              "name": "dataLength",
                                              "nodeType": "YulIdentifier",
                                              "src": "4866:10:3"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shr",
                                            "nodeType": "YulIdentifier",
                                            "src": "4859:3:3"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4859:18:3"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4879:1:3",
                                          "type": "",
                                          "value": "3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mul",
                                        "nodeType": "YulIdentifier",
                                        "src": "4855:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4855:26:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "decodedLength",
                                        "nodeType": "YulTypedName",
                                        "src": "4838:13:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "cases": [
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "4948:254:3",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "5004:180:3",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "decodedLength",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5050:13:3"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "name": "end",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "5106:3:3"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "mload",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "5100:5:3"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "5100:10:3"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "5112:4:3",
                                                                "type": "",
                                                                "value": "0xFF"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "and",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "5096:3:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "5096:21:3"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5119:4:3",
                                                            "type": "",
                                                            "value": "0x3d"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "eq",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5093:2:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5093:31:3"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "name": "end",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "5139:3:3"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "mload",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "5133:5:3"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "5133:10:3"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "5145:6:3",
                                                                "type": "",
                                                                "value": "0xFFFF"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "and",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "5129:3:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "5129:23:3"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5154:6:3",
                                                            "type": "",
                                                            "value": "0x3d3d"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "eq",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5126:2:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5126:35:3"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5089:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5089:73:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "sub",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5021:3:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5021:163:3"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "decodedLength",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5004:13:3"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "nodeType": "YulCase",
                                        "src": "4941:261:3",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4946:1:3",
                                          "type": "",
                                          "value": "0"
                                        }
                                      },
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "5227:141:3",
                                          "statements": [
                                            {
                                              "nodeType": "YulAssignment",
                                              "src": "5287:63:3",
                                              "value": {
                                                "arguments": [
                                                  {
                                                    "name": "decodedLength",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5308:13:3"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "dataLength",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "5331:10:3"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5343:1:3",
                                                            "type": "",
                                                            "value": "3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "and",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5327:3:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5327:18:3"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5347:1:3",
                                                        "type": "",
                                                        "value": "1"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "sub",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5323:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5323:26:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5304:3:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5304:46:3"
                                              },
                                              "variableNames": [
                                                {
                                                  "name": "decodedLength",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5287:13:3"
                                                }
                                              ]
                                            }
                                          ]
                                        },
                                        "nodeType": "YulCase",
                                        "src": "5219:149:3",
                                        "value": "default"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dataLength",
                                          "nodeType": "YulIdentifier",
                                          "src": "4910:10:3"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4922:1:3",
                                          "type": "",
                                          "value": "3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "4906:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4906:18:3"
                                    },
                                    "nodeType": "YulSwitch",
                                    "src": "4899:469:3"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5386:21:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5402:4:3",
                                          "type": "",
                                          "value": "0x40"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "5396:5:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5396:11:3"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "result",
                                        "nodeType": "YulIdentifier",
                                        "src": "5386:6:3"
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "result",
                                          "nodeType": "YulIdentifier",
                                          "src": "5483:6:3"
                                        },
                                        {
                                          "name": "decodedLength",
                                          "nodeType": "YulIdentifier",
                                          "src": "5491:13:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5476:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5476:29:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5476:29:3"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "5588:28:3",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "result",
                                          "nodeType": "YulIdentifier",
                                          "src": "5603:6:3"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5611:4:3",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5599:3:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5599:17:3"
                                    },
                                    "variables": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulTypedName",
                                        "src": "5592:3:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "5849:75:3",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "5858:66:3",
                                      "type": "",
                                      "value": "0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc"
                                    },
                                    "variables": [
                                      {
                                        "name": "m",
                                        "nodeType": "YulTypedName",
                                        "src": "5853:1:3",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5948:4:3",
                                          "type": "",
                                          "value": "0x5b"
                                        },
                                        {
                                          "name": "m",
                                          "nodeType": "YulIdentifier",
                                          "src": "5954:1:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5941:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5941:15:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5941:15:3"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5980:4:3",
                                          "type": "",
                                          "value": "0x3b"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5986:52:3",
                                          "type": "",
                                          "value": "0x04080c1014181c2024282c3034383c4044484c5054585c6064"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5973:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5973:66:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5973:66:3"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6063:4:3",
                                          "type": "",
                                          "value": "0x1a"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6069:32:3",
                                          "type": "",
                                          "value": "0xf8fcf800fcd0d4d8dce0e4e8ecf0f4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6056:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6056:46:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6056:46:3"
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "6167:770:3",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "6226:20:3",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "6238:4:3"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6244:1:3",
                                                "type": "",
                                                "value": "4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "6234:3:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6234:12:3"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "data",
                                              "nodeType": "YulIdentifier",
                                              "src": "6226:4:3"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "6267:24:3",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "data",
                                                "nodeType": "YulIdentifier",
                                                "src": "6286:4:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "6280:5:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6280:11:3"
                                          },
                                          "variables": [
                                            {
                                              "name": "input",
                                              "nodeType": "YulTypedName",
                                              "src": "6271:5:3",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "6358:3:3"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "m",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "6395:1:3"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "6409:2:3",
                                                                "type": "",
                                                                "value": "28"
                                                              },
                                                              {
                                                                "name": "input",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "6413:5:3"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "byte",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "6404:4:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "6404:15:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "mload",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "6398:5:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "6398:22:3"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "6391:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "6391:30:3"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "6451:1:3",
                                                        "type": "",
                                                        "value": "6"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "m",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "6490:1:3"
                                                              },
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "arguments": [
                                                                      {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "6504:2:3",
                                                                        "type": "",
                                                                        "value": "29"
                                                                      },
                                                                      {
                                                                        "name": "input",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "6508:5:3"
                                                                      }
                                                                    ],
                                                                    "functionName": {
                                                                      "name": "byte",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "6499:4:3"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "6499:15:3"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "mload",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "6493:5:3"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "6493:22:3"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "and",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "6486:3:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "6486:30:3"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "6550:1:3",
                                                                "type": "",
                                                                "value": "6"
                                                              },
                                                              {
                                                                "arguments": [
                                                                  {
                                                                    "arguments": [
                                                                      {
                                                                        "name": "m",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "6593:1:3"
                                                                      },
                                                                      {
                                                                        "arguments": [
                                                                          {
                                                                            "arguments": [
                                                                              {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "6607:2:3",
                                                                                "type": "",
                                                                                "value": "30"
                                                                              },
                                                                              {
                                                                                "name": "input",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "6611:5:3"
                                                                              }
                                                                            ],
                                                                            "functionName": {
                                                                              "name": "byte",
                                                                              "nodeType": "YulIdentifier",
                                                                              "src": "6602:4:3"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "6602:15:3"
                                                                          }
                                                                        ],
                                                                        "functionName": {
                                                                          "name": "mload",
                                                                          "nodeType": "YulIdentifier",
                                                                          "src": "6596:5:3"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "6596:22:3"
                                                                      }
                                                                    ],
                                                                    "functionName": {
                                                                      "name": "and",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "6589:3:3"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "6589:30:3"
                                                                  },
                                                                  {
                                                                    "arguments": [
                                                                      {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "6657:1:3",
                                                                        "type": "",
                                                                        "value": "6"
                                                                      },
                                                                      {
                                                                        "arguments": [
                                                                          {
                                                                            "arguments": [
                                                                              {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "6671:2:3",
                                                                                "type": "",
                                                                                "value": "31"
                                                                              },
                                                                              {
                                                                                "name": "input",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "6675:5:3"
                                                                              }
                                                                            ],
                                                                            "functionName": {
                                                                              "name": "byte",
                                                                              "nodeType": "YulIdentifier",
                                                                              "src": "6666:4:3"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "6666:15:3"
                                                                          }
                                                                        ],
                                                                        "functionName": {
                                                                          "name": "mload",
                                                                          "nodeType": "YulIdentifier",
                                                                          "src": "6660:5:3"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "6660:22:3"
                                                                      }
                                                                    ],
                                                                    "functionName": {
                                                                      "name": "shr",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "6653:3:3"
                                                                    },
                                                                    "nodeType": "YulFunctionCall",
                                                                    "src": "6653:30:3"
                                                                  }
                                                                ],
                                                                "functionName": {
                                                                  "name": "or",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "6553:2:3"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "6553:160:3"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "shr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "6546:3:3"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "6546:168:3"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "or",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "6454:2:3"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "6454:286:3"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "shr",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "6447:3:3"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "6447:294:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "or",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6363:2:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "6363:400:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "6351:6:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6351:413:3"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "6351:413:3"
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "6786:18:3",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "6797:3:3"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6802:1:3",
                                                "type": "",
                                                "value": "3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "6793:3:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6793:11:3"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "6786:3:3"
                                            }
                                          ]
                                        },
                                        {
                                          "body": {
                                            "nodeType": "YulBlock",
                                            "src": "6910:9:3",
                                            "statements": [
                                              {
                                                "nodeType": "YulBreak",
                                                "src": "6912:5:3"
                                              }
                                            ]
                                          },
                                          "condition": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "data",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "6898:4:3"
                                                  },
                                                  {
                                                    "name": "end",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "6904:3:3"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "lt",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6895:2:3"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "6895:13:3"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "6888:6:3"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6888:21:3"
                                          },
                                          "nodeType": "YulIf",
                                          "src": "6885:34:3"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "6162:1:3",
                                      "type": "",
                                      "value": "1"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "6164:2:3",
                                      "statements": []
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "6159:2:3",
                                      "statements": []
                                    },
                                    "src": "6155:782:3"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7152:4:3",
                                          "type": "",
                                          "value": "0x40"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "result",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "7170:6:3"
                                                    },
                                                    {
                                                      "name": "decodedLength",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "7178:13:3"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7166:3:3"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "7166:26:3"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "7194:2:3",
                                                  "type": "",
                                                  "value": "63"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "7162:3:3"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7162:35:3"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "7203:2:3",
                                                  "type": "",
                                                  "value": "31"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "not",
                                                "nodeType": "YulIdentifier",
                                                "src": "7199:3:3"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7199:7:3"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "7158:3:3"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7158:49:3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7145:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7145:63:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7145:63:3"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7275:4:3",
                                          "type": "",
                                          "value": "0x60"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7281:1:3",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7268:6:3"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7268:15:3"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7268:15:3"
                                  }
                                ]
                              },
                              "condition": {
                                "name": "dataLength",
                                "nodeType": "YulIdentifier",
                                "src": "4756:10:3"
                              },
                              "nodeType": "YulIf",
                              "src": "4753:2544:3"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 2694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4734:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4800:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6226:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6238:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6286:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2694,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6898:4:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2697,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5386:6:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2697,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5483:6:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2697,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5603:6:3",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2697,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7170:6:3",
                            "valueSize": 1
                          }
                        ],
                        "id": 2699,
                        "nodeType": "InlineAssembly",
                        "src": "4687:2620:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2692,
                    "nodeType": "StructuredDocumentation",
                    "src": "4095:497:3",
                    "text": "@dev Decodes base64 encoded `data`.\n Supports:\n - RFC 4648 (both standard and file-safe mode).\n - RFC 3501 (63: ',').\n Does not support:\n - Line breaks.\n Note: For performance reasons,\n this function will NOT revert on invalid `data` inputs.\n Outputs for invalid inputs will simply be undefined behaviour.\n It is the user's responsibility to ensure that the `data`\n is a valid base64 encoded string."
                  },
                  "id": 2701,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decode",
                  "nameLocation": "4606:6:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2694,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4627:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2701,
                        "src": "4613:18:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2693,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4613:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4612:20:3"
                  },
                  "returnParameters": {
                    "id": 2698,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2697,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "4669:6:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 2701,
                        "src": "4656:19:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2696,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4656:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4655:21:3"
                  },
                  "scope": 2702,
                  "src": "4597:2716:3",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 2703,
              "src": "307:7008:3",
              "usedErrors": []
            }
          ],
          "src": "32:7284:3"
        },
        "id": 3
      },
      "contracts/ERC721K.sol": {
        "ast": {
          "absolutePath": "contracts/ERC721K.sol",
          "exportedSymbols": {
            "ERC721": [
              3721
            ],
            "ERC721K": [
              2844
            ],
            "ERC721Storage": [
              3147
            ],
            "OwnedRoles": [
              2638
            ]
          },
          "id": 2845,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2704,
              "literals": [
                "solidity",
                "0.8",
                ".15"
              ],
              "nodeType": "PragmaDirective",
              "src": "31:23:4"
            },
            {
              "absolutePath": "contracts/helpers/ERC721.sol",
              "file": "./helpers/ERC721.sol",
              "id": 2706,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2845,
              "sourceUnit": 3742,
              "src": "56:46:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2705,
                    "name": "ERC721",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3721,
                    "src": "65:6:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol",
              "file": "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol",
              "id": 2708,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2845,
              "sourceUnit": 2639,
              "src": "103:76:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2707,
                    "name": "OwnedRoles",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2638,
                    "src": "112:10:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/ERC721Storage.sol",
              "file": "./ERC721Storage.sol",
              "id": 2710,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2845,
              "sourceUnit": 3148,
              "src": "180:52:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2709,
                    "name": "ERC721Storage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3147,
                    "src": "189:13:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2712,
                    "name": "ERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3721,
                    "src": "315:6:4"
                  },
                  "id": 2713,
                  "nodeType": "InheritanceSpecifier",
                  "src": "315:6:4"
                },
                {
                  "baseName": {
                    "id": 2714,
                    "name": "OwnedRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2638,
                    "src": "323:10:4"
                  },
                  "id": 2715,
                  "nodeType": "InheritanceSpecifier",
                  "src": "323:10:4"
                }
              ],
              "canonicalName": "ERC721K",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2711,
                "nodeType": "StructuredDocumentation",
                "src": "234:51:4",
                "text": " @title ERC721K\n @author Kames Geraghty"
              },
              "fullyImplemented": false,
              "id": 2844,
              "linearizedBaseContracts": [
                2844,
                2638,
                3721
              ],
              "name": "ERC721K",
              "nameLocation": "304:7:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "documentation": {
                    "id": 2716,
                    "nodeType": "StructuredDocumentation",
                    "src": "338:40:4",
                    "text": "@notice ID counter for ERC721 tokens"
                  },
                  "id": 2718,
                  "mutability": "mutable",
                  "name": "_idCounter",
                  "nameLocation": "398:10:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "381:27:4",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "381:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 2719,
                    "nodeType": "StructuredDocumentation",
                    "src": "413:38:4",
                    "text": "@notice ENSReverseRecords instance"
                  },
                  "id": 2721,
                  "mutability": "mutable",
                  "name": "_erc721Storage",
                  "nameLocation": "471:14:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "454:31:4",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2720,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "454:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "anonymous": false,
                  "eventSelector": "d833c7cea3bce2562e201bf7e85016d0bc1173580c719f63378cc5d0457552b6",
                  "id": 2725,
                  "name": "ERC721StorageUpdated",
                  "nameLocation": "496:20:4",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2723,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "erc721Storage",
                        "nameLocation": "525:13:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2725,
                        "src": "517:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2722,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "517:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "516:23:4"
                  },
                  "src": "490:50:4"
                },
                {
                  "body": {
                    "id": 2748,
                    "nodeType": "Block",
                    "src": "866:77:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2739,
                            "name": "_erc721Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2721,
                            "src": "872:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2740,
                            "name": "_erc721Storage_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2732,
                            "src": "889:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "872:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2742,
                        "nodeType": "ExpressionStatement",
                        "src": "872:32:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2744,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "927:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2745,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "927:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2743,
                            "name": "_initializeOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1119,
                            "src": "910:16:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2746,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "910:28:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2747,
                        "nodeType": "ExpressionStatement",
                        "src": "910:28:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2726,
                    "nodeType": "StructuredDocumentation",
                    "src": "544:199:4",
                    "text": " @notice ERC721K Construction\n @param name_ string - Name of ERC721 token\n @param symbol_ string - Symbol of ERC721 token\n @param _erc721Storage_ address - Metadata instance"
                  },
                  "id": 2749,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 2735,
                          "name": "name_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2728,
                          "src": "850:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "id": 2736,
                          "name": "symbol_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2730,
                          "src": "857:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 2737,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 2734,
                        "name": "ERC721",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 3721,
                        "src": "843:6:4"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "843:22:4"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2733,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2728,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "777:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2749,
                        "src": "763:19:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2727,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "763:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2730,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "802:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2749,
                        "src": "788:21:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2729,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "788:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2732,
                        "mutability": "mutable",
                        "name": "_erc721Storage_",
                        "nameLocation": "823:15:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2749,
                        "src": "815:23:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "815:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "757:85:4"
                  },
                  "returnParameters": {
                    "id": 2738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "866:0:4"
                  },
                  "scope": 2844,
                  "src": "746:197:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3536
                  ],
                  "body": {
                    "id": 2763,
                    "nodeType": "Block",
                    "src": "1346:54:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2760,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2751,
                              "src": "1383:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            ],
                            "expression": {
                              "id": 2758,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1359:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC721K_$2844_$",
                                "typeString": "type(contract super ERC721K)"
                              }
                            },
                            "id": 2759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "supportsInterface",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3536,
                            "src": "1359:23:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                              "typeString": "function (bytes4) view returns (bool)"
                            }
                          },
                          "id": 2761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1359:36:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2757,
                        "id": 2762,
                        "nodeType": "Return",
                        "src": "1352:43:4"
                      }
                    ]
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 2764,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "1234:17:4",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2754,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 2753,
                        "name": "ERC721",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 3721,
                        "src": "1317:6:4"
                      }
                    ],
                    "src": "1308:16:4"
                  },
                  "parameters": {
                    "id": 2752,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2751,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "1259:11:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2764,
                        "src": "1252:18:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 2750,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1252:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1251:20:4"
                  },
                  "returnParameters": {
                    "id": 2757,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2756,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2764,
                        "src": "1338:4:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2755,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1338:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1337:6:4"
                  },
                  "scope": 2844,
                  "src": "1225:175:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "id": 2773,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tokenData",
                  "nameLocation": "1695:10:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2767,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2766,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1714:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2773,
                        "src": "1706:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2765,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1706:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1705:17:4"
                  },
                  "returnParameters": {
                    "id": 2772,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2769,
                        "mutability": "mutable",
                        "name": "imageBytes",
                        "nameLocation": "1783:10:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2773,
                        "src": "1770:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2768,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1770:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2771,
                        "mutability": "mutable",
                        "name": "traitsBytes",
                        "nameLocation": "1808:11:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2773,
                        "src": "1795:24:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2770,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1795:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1769:51:4"
                  },
                  "scope": 2844,
                  "src": "1686:135:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2784,
                    "nodeType": "Block",
                    "src": "2169:70:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2779,
                                  "name": "_erc721Storage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2721,
                                  "src": "2196:14:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2778,
                                "name": "ERC721Storage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3147,
                                "src": "2182:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC721Storage_$3147_$",
                                  "typeString": "type(contract ERC721Storage)"
                                }
                              },
                              "id": 2780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2182:29:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC721Storage_$3147",
                                "typeString": "contract ERC721Storage"
                              }
                            },
                            "id": 2781,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "constructContractURI",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3097,
                            "src": "2182:50:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () view external returns (string memory)"
                            }
                          },
                          "id": 2782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2182:52:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2777,
                        "id": 2783,
                        "nodeType": "Return",
                        "src": "2175:59:4"
                      }
                    ]
                  },
                  "functionSelector": "e8a3d485",
                  "id": 2785,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "contractURI",
                  "nameLocation": "2117:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2774,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2128:2:4"
                  },
                  "returnParameters": {
                    "id": 2777,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2776,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2785,
                        "src": "2154:13:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2775,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2154:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2153:15:4"
                  },
                  "scope": 2844,
                  "src": "2108:131:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2792,
                    "nodeType": "Block",
                    "src": "2298:28:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2790,
                          "name": "_idCounter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2718,
                          "src": "2311:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2789,
                        "id": 2791,
                        "nodeType": "Return",
                        "src": "2304:17:4"
                      }
                    ]
                  },
                  "functionSelector": "18160ddd",
                  "id": 2793,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "2252:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2786,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2263:2:4"
                  },
                  "returnParameters": {
                    "id": 2789,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2788,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2793,
                        "src": "2289:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2787,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2289:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2288:9:4"
                  },
                  "scope": 2844,
                  "src": "2243:83:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2800,
                    "nodeType": "Block",
                    "src": "2390:32:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2798,
                          "name": "_erc721Storage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2721,
                          "src": "2403:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2797,
                        "id": 2799,
                        "nodeType": "Return",
                        "src": "2396:21:4"
                      }
                    ]
                  },
                  "functionSelector": "87a89ee6",
                  "id": 2801,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getERC721Storage",
                  "nameLocation": "2339:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2355:2:4"
                  },
                  "returnParameters": {
                    "id": 2797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2796,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2801,
                        "src": "2381:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2795,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2381:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2380:9:4"
                  },
                  "scope": 2844,
                  "src": "2330:92:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3202
                  ],
                  "body": {
                    "id": 2826,
                    "nodeType": "Block",
                    "src": "2506:178:4",
                    "statements": [
                      {
                        "assignments": [
                          2810,
                          2812
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2810,
                            "mutability": "mutable",
                            "name": "imageBytes",
                            "nameLocation": "2526:10:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 2826,
                            "src": "2513:23:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2809,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2513:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 2812,
                            "mutability": "mutable",
                            "name": "traitsBytes",
                            "nameLocation": "2551:11:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 2826,
                            "src": "2538:24:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2811,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2538:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2816,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2814,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2803,
                              "src": "2577:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2813,
                            "name": "_tokenData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2773,
                            "src": "2566:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) view returns (bytes memory,bytes memory)"
                            }
                          },
                          "id": 2815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2566:19:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bytes memory,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2512:73:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2821,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2803,
                              "src": "2646:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2822,
                              "name": "imageBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2810,
                              "src": "2655:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 2823,
                              "name": "traitsBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2812,
                              "src": "2667:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2818,
                                  "name": "_erc721Storage",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2721,
                                  "src": "2612:14:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2817,
                                "name": "ERC721Storage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3147,
                                "src": "2598:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC721Storage_$3147_$",
                                  "typeString": "type(contract ERC721Storage)"
                                }
                              },
                              "id": 2819,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2598:29:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC721Storage_$3147",
                                "typeString": "contract ERC721Storage"
                              }
                            },
                            "id": 2820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "constructTokenURI",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3042,
                            "src": "2598:47:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256,bytes memory,bytes memory) view external returns (string memory)"
                            }
                          },
                          "id": 2824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2598:81:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2808,
                        "id": 2825,
                        "nodeType": "Return",
                        "src": "2591:88:4"
                      }
                    ]
                  },
                  "functionSelector": "c87b56dd",
                  "id": 2827,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "2435:8:4",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2805,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2473:8:4"
                  },
                  "parameters": {
                    "id": 2804,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2803,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2452:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2827,
                        "src": "2444:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2802,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2444:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2443:17:4"
                  },
                  "returnParameters": {
                    "id": 2808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2807,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2827,
                        "src": "2491:13:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2806,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2491:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2490:15:4"
                  },
                  "scope": 2844,
                  "src": "2426:258:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2842,
                    "nodeType": "Block",
                    "src": "2857:87:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2834,
                            "name": "_erc721Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2721,
                            "src": "2863:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2835,
                            "name": "erc721Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2829,
                            "src": "2880:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2863:30:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2837,
                        "nodeType": "ExpressionStatement",
                        "src": "2863:30:4"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 2839,
                              "name": "erc721Storage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2829,
                              "src": "2925:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2838,
                            "name": "ERC721StorageUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2725,
                            "src": "2904:20:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2904:35:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2841,
                        "nodeType": "EmitStatement",
                        "src": "2899:40:4"
                      }
                    ]
                  },
                  "functionSelector": "9137c1a7",
                  "id": 2843,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2832,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2831,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "2847:9:4"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2847:9:4"
                    }
                  ],
                  "name": "setStorage",
                  "nameLocation": "2804:10:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2829,
                        "mutability": "mutable",
                        "name": "erc721Storage",
                        "nameLocation": "2823:13:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2843,
                        "src": "2815:21:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2828,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2815:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2814:23:4"
                  },
                  "returnParameters": {
                    "id": 2833,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2857:0:4"
                  },
                  "scope": 2844,
                  "src": "2795:149:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2845,
              "src": "286:2660:4",
              "usedErrors": [
                1085,
                1088,
                1091,
                3178,
                3180,
                3182,
                3184,
                3186,
                3188,
                3190
              ]
            }
          ],
          "src": "31:2916:4"
        },
        "id": 4
      },
      "contracts/ERC721Storage.sol": {
        "ast": {
          "absolutePath": "contracts/ERC721Storage.sol",
          "exportedSymbols": {
            "Base64": [
              2702
            ],
            "ERC721Storage": [
              3147
            ],
            "IERC721KImage": [
              3751
            ],
            "IERC721KTraits": [
              3768
            ],
            "OwnedRoles": [
              2638
            ]
          },
          "id": 3148,
          "license": "GPL-3.0",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2846,
              "literals": [
                "solidity",
                "0.8",
                ".15"
              ],
              "nodeType": "PragmaDirective",
              "src": "36:23:5"
            },
            {
              "absolutePath": "@turbo-eth/solbase-sol/src/utils/Base64.sol",
              "file": "@turbo-eth/solbase-sol/src/utils/Base64.sol",
              "id": 2848,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3148,
              "sourceUnit": 2703,
              "src": "61:69:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2847,
                    "name": "Base64",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2702,
                    "src": "70:6:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol",
              "file": "@turbo-eth/solbase-sol/src/auth/OwnedRoles.sol",
              "id": 2850,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3148,
              "sourceUnit": 2639,
              "src": "131:76:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2849,
                    "name": "OwnedRoles",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2638,
                    "src": "140:10:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IERC721KImage.sol",
              "file": "./interfaces/IERC721KImage.sol",
              "id": 2852,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3148,
              "sourceUnit": 3752,
              "src": "208:63:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2851,
                    "name": "IERC721KImage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3751,
                    "src": "217:13:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/interfaces/IERC721KTraits.sol",
              "file": "./interfaces/IERC721KTraits.sol",
              "id": 2854,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3148,
              "sourceUnit": 3769,
              "src": "272:65:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2853,
                    "name": "IERC721KTraits",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3768,
                    "src": "281:14:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2856,
                    "name": "OwnedRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2638,
                    "src": "432:10:5"
                  },
                  "id": 2857,
                  "nodeType": "InheritanceSpecifier",
                  "src": "432:10:5"
                }
              ],
              "canonicalName": "ERC721Storage",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2855,
                "nodeType": "StructuredDocumentation",
                "src": "339:57:5",
                "text": " @title ERC721Storage\n @author Kames Geraghty"
              },
              "fullyImplemented": false,
              "id": 3147,
              "linearizedBaseContracts": [
                3147,
                2638
              ],
              "name": "ERC721Storage",
              "nameLocation": "415:13:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 2859,
                  "mutability": "mutable",
                  "name": "svgRenderInstance",
                  "nameLocation": "464:17:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 3147,
                  "src": "447:34:5",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2858,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "447:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2861,
                  "mutability": "mutable",
                  "name": "traitsFetchInstance",
                  "nameLocation": "502:19:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 3147,
                  "src": "485:36:5",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "485:7:5",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2864,
                  "mutability": "mutable",
                  "name": "_contractURI",
                  "nameLocation": "546:12:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 3147,
                  "src": "525:33:5",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                    "typeString": "struct ERC721Storage.ContractURI"
                  },
                  "typeName": {
                    "id": 2863,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2862,
                      "name": "ContractURI",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2877,
                      "src": "525:11:5"
                    },
                    "referencedDeclaration": 2877,
                    "src": "525:11:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ContractURI_$2877_storage_ptr",
                      "typeString": "struct ERC721Storage.ContractURI"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "canonicalName": "ERC721Storage.ContractURI",
                  "id": 2877,
                  "members": [
                    {
                      "constant": false,
                      "id": 2866,
                      "mutability": "mutable",
                      "name": "name",
                      "nameLocation": "595:4:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2877,
                      "src": "588:11:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2865,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "588:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2868,
                      "mutability": "mutable",
                      "name": "description",
                      "nameLocation": "612:11:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2877,
                      "src": "605:18:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2867,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "605:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2870,
                      "mutability": "mutable",
                      "name": "image",
                      "nameLocation": "636:5:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2877,
                      "src": "629:12:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2869,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "629:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2872,
                      "mutability": "mutable",
                      "name": "externalLink",
                      "nameLocation": "654:12:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2877,
                      "src": "647:19:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2871,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "647:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2874,
                      "mutability": "mutable",
                      "name": "sellerFeeBasisPoints",
                      "nameLocation": "679:20:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2877,
                      "src": "672:27:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2873,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "672:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2876,
                      "mutability": "mutable",
                      "name": "feeRecipient",
                      "nameLocation": "712:12:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2877,
                      "src": "705:19:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2875,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "705:6:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ContractURI",
                  "nameLocation": "570:11:5",
                  "nodeType": "StructDefinition",
                  "scope": 3147,
                  "src": "563:166:5",
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "eventSelector": "3c2715cb5e4b39dd4af38ac12bb292a030fb6a063dbd5467ed49da665bcaa973",
                  "id": 2881,
                  "name": "SvgRenderUpdated",
                  "nameLocation": "739:16:5",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2880,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2879,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "svgRender",
                        "nameLocation": "764:9:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2881,
                        "src": "756:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2878,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "756:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "755:19:5"
                  },
                  "src": "733:42:5"
                },
                {
                  "anonymous": false,
                  "eventSelector": "10c0817f42b2182992d55b707430b153f12e59d7e54a975bfec790497dd7f63f",
                  "id": 2885,
                  "name": "TraitsFetchUpdated",
                  "nameLocation": "785:18:5",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2884,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2883,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "traitsFetch",
                        "nameLocation": "812:11:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2885,
                        "src": "804:19:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2882,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "804:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "803:21:5"
                  },
                  "src": "779:46:5"
                },
                {
                  "anonymous": false,
                  "eventSelector": "03a10335d532669eac03b3b7e4ce44aff7f8cb14b7aa397c653fdcb40ae06bec",
                  "id": 2890,
                  "name": "ContractURIUpdated",
                  "nameLocation": "835:18:5",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2889,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2888,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "contractURI",
                        "nameLocation": "866:11:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2890,
                        "src": "854:23:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                          "typeString": "struct ERC721Storage.ContractURI"
                        },
                        "typeName": {
                          "id": 2887,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2886,
                            "name": "ContractURI",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2877,
                            "src": "854:11:5"
                          },
                          "referencedDeclaration": 2877,
                          "src": "854:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage_ptr",
                            "typeString": "struct ERC721Storage.ContractURI"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "853:25:5"
                  },
                  "src": "829:50:5"
                },
                {
                  "body": {
                    "id": 2919,
                    "nodeType": "Block",
                    "src": "1016:165:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 2904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2902,
                            "name": "svgRenderInstance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2859,
                            "src": "1022:17:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2903,
                            "name": "svgRender_Instance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2892,
                            "src": "1042:18:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1022:38:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2905,
                        "nodeType": "ExpressionStatement",
                        "src": "1022:38:5"
                      },
                      {
                        "expression": {
                          "id": 2908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2906,
                            "name": "traitsFetchInstance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2861,
                            "src": "1066:19:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2907,
                            "name": "traitsFetchInstance_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2894,
                            "src": "1088:20:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1066:42:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2909,
                        "nodeType": "ExpressionStatement",
                        "src": "1066:42:5"
                      },
                      {
                        "expression": {
                          "id": 2912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2910,
                            "name": "_contractURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2864,
                            "src": "1114:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                              "typeString": "struct ERC721Storage.ContractURI storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2911,
                            "name": "_contractURI_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2897,
                            "src": "1129:13:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                              "typeString": "struct ERC721Storage.ContractURI memory"
                            }
                          },
                          "src": "1114:28:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                            "typeString": "struct ERC721Storage.ContractURI storage ref"
                          }
                        },
                        "id": 2913,
                        "nodeType": "ExpressionStatement",
                        "src": "1114:28:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2915,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1165:3:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1165:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2914,
                            "name": "_initializeOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1119,
                            "src": "1148:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1148:28:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2918,
                        "nodeType": "ExpressionStatement",
                        "src": "1148:28:5"
                      }
                    ]
                  },
                  "id": 2920,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [],
                      "id": 2900,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 2899,
                        "name": "OwnedRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2638,
                        "src": "1003:10:5"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1003:12:5"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2898,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2892,
                        "mutability": "mutable",
                        "name": "svgRender_Instance",
                        "nameLocation": "908:18:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2920,
                        "src": "900:26:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2891,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "900:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2894,
                        "mutability": "mutable",
                        "name": "traitsFetchInstance_",
                        "nameLocation": "940:20:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2920,
                        "src": "932:28:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2893,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "932:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2897,
                        "mutability": "mutable",
                        "name": "_contractURI_",
                        "nameLocation": "985:13:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2920,
                        "src": "966:32:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                          "typeString": "struct ERC721Storage.ContractURI"
                        },
                        "typeName": {
                          "id": 2896,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2895,
                            "name": "ContractURI",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2877,
                            "src": "966:11:5"
                          },
                          "referencedDeclaration": 2877,
                          "src": "966:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage_ptr",
                            "typeString": "struct ERC721Storage.ContractURI"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "894:108:5"
                  },
                  "returnParameters": {
                    "id": 2901,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1016:0:5"
                  },
                  "scope": 3147,
                  "src": "883:298:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "id": 2927,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_parseName",
                  "nameLocation": "1477:10:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2923,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2922,
                        "mutability": "mutable",
                        "name": "_tokenId",
                        "nameLocation": "1496:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2927,
                        "src": "1488:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2921,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1488:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1487:18:5"
                  },
                  "returnParameters": {
                    "id": 2926,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2925,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2927,
                        "src": "1537:13:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2924,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1537:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1536:15:5"
                  },
                  "scope": 3147,
                  "src": "1468:84:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "id": 2934,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_parseDescription",
                  "nameLocation": "1565:17:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2929,
                        "mutability": "mutable",
                        "name": "_tokenId",
                        "nameLocation": "1591:8:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2934,
                        "src": "1583:16:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1583:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1582:18:5"
                  },
                  "returnParameters": {
                    "id": 2933,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2932,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2934,
                        "src": "1632:13:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2931,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1632:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1631:15:5"
                  },
                  "scope": 3147,
                  "src": "1556:91:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2941,
                    "nodeType": "Block",
                    "src": "1993:35:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 2939,
                          "name": "svgRenderInstance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2859,
                          "src": "2006:17:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2938,
                        "id": 2940,
                        "nodeType": "Return",
                        "src": "1999:24:5"
                      }
                    ]
                  },
                  "functionSelector": "a4cd8696",
                  "id": 2942,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getERC721KRender",
                  "nameLocation": "1942:16:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2935,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1958:2:5"
                  },
                  "returnParameters": {
                    "id": 2938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2937,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2942,
                        "src": "1984:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2936,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1984:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1983:9:5"
                  },
                  "scope": 3147,
                  "src": "1933:95:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2949,
                    "nodeType": "Block",
                    "src": "2091:37:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 2947,
                          "name": "traitsFetchInstance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2861,
                          "src": "2104:19:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2946,
                        "id": 2948,
                        "nodeType": "Return",
                        "src": "2097:26:5"
                      }
                    ]
                  },
                  "functionSelector": "25c28b4a",
                  "id": 2950,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getERC72KTraits",
                  "nameLocation": "2041:15:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2943,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2056:2:5"
                  },
                  "returnParameters": {
                    "id": 2946,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2945,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2950,
                        "src": "2082:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2944,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2082:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2081:9:5"
                  },
                  "scope": 3147,
                  "src": "2032:96:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2958,
                    "nodeType": "Block",
                    "src": "2209:30:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 2956,
                          "name": "_contractURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2864,
                          "src": "2222:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                            "typeString": "struct ERC721Storage.ContractURI storage ref"
                          }
                        },
                        "functionReturnParameters": 2955,
                        "id": 2957,
                        "nodeType": "Return",
                        "src": "2215:19:5"
                      }
                    ]
                  },
                  "functionSelector": "d12bcb12",
                  "id": 2959,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getContractDescription",
                  "nameLocation": "2141:22:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2951,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2163:2:5"
                  },
                  "returnParameters": {
                    "id": 2955,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2954,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2959,
                        "src": "2189:18:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                          "typeString": "struct ERC721Storage.ContractURI"
                        },
                        "typeName": {
                          "id": 2953,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2952,
                            "name": "ContractURI",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2877,
                            "src": "2189:11:5"
                          },
                          "referencedDeclaration": 2877,
                          "src": "2189:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage_ptr",
                            "typeString": "struct ERC721Storage.ContractURI"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2188:20:5"
                  },
                  "scope": 3147,
                  "src": "2132:107:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 2973,
                    "nodeType": "Block",
                    "src": "2317:64:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2970,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2961,
                              "src": "2370:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2967,
                                  "name": "svgRenderInstance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2859,
                                  "src": "2344:17:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2966,
                                "name": "IERC721KImage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3751,
                                "src": "2330:13:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721KImage_$3751_$",
                                  "typeString": "type(contract IERC721KImage)"
                                }
                              },
                              "id": 2968,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2330:32:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721KImage_$3751",
                                "typeString": "contract IERC721KImage"
                              }
                            },
                            "id": 2969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "render",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3750,
                            "src": "2330:39:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (bytes memory) view external returns (string memory)"
                            }
                          },
                          "id": 2971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2330:46:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2965,
                        "id": 2972,
                        "nodeType": "Return",
                        "src": "2323:53:5"
                      }
                    ]
                  },
                  "functionSelector": "316df61e",
                  "id": 2974,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "render",
                  "nameLocation": "2252:6:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2962,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2961,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "2272:5:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2974,
                        "src": "2259:18:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2960,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2259:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2258:20:5"
                  },
                  "returnParameters": {
                    "id": 2965,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2964,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2974,
                        "src": "2302:13:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2963,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2302:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2301:15:5"
                  },
                  "scope": 3147,
                  "src": "2243:138:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3041,
                    "nodeType": "Block",
                    "src": "2537:813:5",
                    "statements": [
                      {
                        "assignments": [
                          2986
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2986,
                            "mutability": "mutable",
                            "name": "image_",
                            "nameLocation": "2557:6:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 3041,
                            "src": "2543:20:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 2985,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2543:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2993,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2991,
                              "name": "input0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2978,
                              "src": "2606:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2988,
                                  "name": "svgRenderInstance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2859,
                                  "src": "2580:17:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2987,
                                "name": "IERC721KImage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3751,
                                "src": "2566:13:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721KImage_$3751_$",
                                  "typeString": "type(contract IERC721KImage)"
                                }
                              },
                              "id": 2989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2566:32:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721KImage_$3751",
                                "typeString": "contract IERC721KImage"
                              }
                            },
                            "id": 2990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "render",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3750,
                            "src": "2566:39:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (bytes memory) view external returns (string memory)"
                            }
                          },
                          "id": 2992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2566:47:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2543:70:5"
                      },
                      {
                        "assignments": [
                          2995
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2995,
                            "mutability": "mutable",
                            "name": "traits_",
                            "nameLocation": "2633:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 3041,
                            "src": "2619:21:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 2994,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2619:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3002,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3000,
                              "name": "input1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2980,
                              "src": "2685:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2997,
                                  "name": "traitsFetchInstance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2861,
                                  "src": "2658:19:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2996,
                                "name": "IERC721KTraits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3768,
                                "src": "2643:14:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721KTraits_$3768_$",
                                  "typeString": "type(contract IERC721KTraits)"
                                }
                              },
                              "id": 2998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2643:35:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721KTraits_$3768",
                                "typeString": "contract IERC721KTraits"
                              }
                            },
                            "id": 2999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fetch",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3767,
                            "src": "2643:41:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (bytes memory) view external returns (string memory)"
                            }
                          },
                          "id": 3001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2643:49:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2619:73:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c",
                                  "id": 3007,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2755:31:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa",
                                    "typeString": "literal_string \"data:application/json;base64,\""
                                  },
                                  "value": "data:application/json;base64,"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "hexValue": "7b226e616d65223a",
                                              "id": 3015,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2877:10:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a",
                                                "typeString": "literal_string \"{\"name\":\""
                                              },
                                              "value": "{\"name\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3016,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2905:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "id": 3018,
                                                  "name": "tokenId",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2976,
                                                  "src": "2937:7:5",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 3017,
                                                "name": "_parseName",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2927,
                                                "src": "2926:10:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                                  "typeString": "function (uint256) view returns (string memory)"
                                                }
                                              },
                                              "id": 3019,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2926:19:5",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3020,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2963:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "226465736372697074696f6e223a",
                                              "id": 3021,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2985:16:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e",
                                                "typeString": "literal_string \"\"description\":\""
                                              },
                                              "value": "\"description\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3022,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3019:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "id": 3024,
                                                  "name": "tokenId",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2976,
                                                  "src": "3058:7:5",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 3023,
                                                "name": "_parseDescription",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2934,
                                                "src": "3040:17:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                                  "typeString": "function (uint256) view returns (string memory)"
                                                }
                                              },
                                              "id": 3025,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "3040:26:5",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3026,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3084:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "22696d616765223a",
                                              "id": 3027,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3106:10:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd",
                                                "typeString": "literal_string \"\"image\":\""
                                              },
                                              "value": "\"image\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3028,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3134:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "id": 3029,
                                              "name": "image_",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2986,
                                              "src": "3155:6:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3030,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3179:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "2261747472696275746573223a205b",
                                              "id": 3031,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3201:17:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_a9d6c84473de3f3a866c16d436066b8d4df325a647d2d3a768ffba45df210f3c",
                                                "typeString": "literal_string \"\"attributes\": [\""
                                              },
                                              "value": "\"attributes\": ["
                                            },
                                            {
                                              "id": 3032,
                                              "name": "traits_",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2995,
                                              "src": "3236:7:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "5d",
                                              "id": 3033,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3261:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29",
                                                "typeString": "literal_string \"]\""
                                              },
                                              "value": "]"
                                            },
                                            {
                                              "hexValue": "7d",
                                              "id": 3034,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3282:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff",
                                                "typeString": "literal_string \"}\""
                                              },
                                              "value": "}"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a",
                                                "typeString": "literal_string \"{\"name\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e",
                                                "typeString": "literal_string \"\"description\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd",
                                                "typeString": "literal_string \"\"image\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_a9d6c84473de3f3a866c16d436066b8d4df325a647d2d3a768ffba45df210f3c",
                                                "typeString": "literal_string \"\"attributes\": [\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29",
                                                "typeString": "literal_string \"]\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff",
                                                "typeString": "literal_string \"}\""
                                              }
                                            ],
                                            "expression": {
                                              "id": 3013,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2846:6:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                              },
                                              "typeName": {
                                                "id": 3012,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2846:6:5",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 3014,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "concat",
                                            "nodeType": "MemberAccess",
                                            "src": "2846:13:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                                              "typeString": "function () pure returns (string memory)"
                                            }
                                          },
                                          "id": 3035,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2846:455:5",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 3011,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2825:5:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                          "typeString": "type(bytes storage pointer)"
                                        },
                                        "typeName": {
                                          "id": 3010,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2825:5:5",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3036,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2825:490:5",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3008,
                                      "name": "Base64",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2702,
                                      "src": "2798:6:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Base64_$2702_$",
                                        "typeString": "type(library Base64)"
                                      }
                                    },
                                    "id": 3009,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2672,
                                    "src": "2798:13:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                                      "typeString": "function (bytes memory) pure returns (string memory)"
                                    }
                                  },
                                  "id": 3037,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2798:529:5",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa",
                                    "typeString": "literal_string \"data:application/json;base64,\""
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 3005,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "2727:3:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3006,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "2727:16:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 3038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2727:610:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2711:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 3003,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2711:6:5",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2711:634:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 2984,
                        "id": 3040,
                        "nodeType": "Return",
                        "src": "2698:647:5"
                      }
                    ]
                  },
                  "functionSelector": "f0679616",
                  "id": 3042,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "constructTokenURI",
                  "nameLocation": "2394:17:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2981,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2976,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2425:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3042,
                        "src": "2417:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2975,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2417:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2978,
                        "mutability": "mutable",
                        "name": "input0",
                        "nameLocation": "2451:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3042,
                        "src": "2438:19:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2977,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2438:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2980,
                        "mutability": "mutable",
                        "name": "input1",
                        "nameLocation": "2476:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3042,
                        "src": "2463:19:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2979,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2463:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2411:75:5"
                  },
                  "returnParameters": {
                    "id": 2984,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2983,
                        "mutability": "mutable",
                        "name": "uri",
                        "nameLocation": "2532:3:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3042,
                        "src": "2518:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2982,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2518:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2517:19:5"
                  },
                  "scope": 3147,
                  "src": "2385:965:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3096,
                    "nodeType": "Block",
                    "src": "3436:963:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c",
                                  "id": 3051,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3499:31:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa",
                                    "typeString": "literal_string \"data:application/json;base64,\""
                                  },
                                  "value": "data:application/json;base64,"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "hexValue": "7b226e616d65223a",
                                              "id": 3059,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3621:10:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a",
                                                "typeString": "literal_string \"{\"name\":\""
                                              },
                                              "value": "{\"name\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3060,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3649:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "expression": {
                                                "id": 3061,
                                                "name": "_contractURI",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2864,
                                                "src": "3670:12:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                                                  "typeString": "struct ERC721Storage.ContractURI storage ref"
                                                }
                                              },
                                              "id": 3062,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "name",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2866,
                                              "src": "3670:17:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3063,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3705:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "226465736372697074696f6e223a",
                                              "id": 3064,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3727:16:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e",
                                                "typeString": "literal_string \"\"description\":\""
                                              },
                                              "value": "\"description\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3065,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3761:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "expression": {
                                                "id": 3066,
                                                "name": "_contractURI",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2864,
                                                "src": "3782:12:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                                                  "typeString": "struct ERC721Storage.ContractURI storage ref"
                                                }
                                              },
                                              "id": 3067,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "description",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2868,
                                              "src": "3782:24:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3068,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3824:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "22696d616765223a",
                                              "id": 3069,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3846:10:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd",
                                                "typeString": "literal_string \"\"image\":\""
                                              },
                                              "value": "\"image\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3070,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3874:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "expression": {
                                                "id": 3071,
                                                "name": "_contractURI",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2864,
                                                "src": "3895:12:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                                                  "typeString": "struct ERC721Storage.ContractURI storage ref"
                                                }
                                              },
                                              "id": 3072,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "image",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2870,
                                              "src": "3895:18:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3073,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3931:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "2265787465726e616c4c696e6b223a",
                                              "id": 3074,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3953:17:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_edb9dfb434f39030c7e6c0ebaca14c5292f46611913432e75654d81f7110ccf5",
                                                "typeString": "literal_string \"\"externalLink\":\""
                                              },
                                              "value": "\"externalLink\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3075,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3988:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "expression": {
                                                "id": 3076,
                                                "name": "_contractURI",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2864,
                                                "src": "4009:12:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                                                  "typeString": "struct ERC721Storage.ContractURI storage ref"
                                                }
                                              },
                                              "id": 3077,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "externalLink",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2872,
                                              "src": "4009:25:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3078,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4052:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "2273656c6c65724665654261736973506f696e7473223a",
                                              "id": 3079,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4074:25:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_5a0f64621135531f27a699625627339d4f3757e3c959615dacead2ddd2286d1b",
                                                "typeString": "literal_string \"\"sellerFeeBasisPoints\":\""
                                              },
                                              "value": "\"sellerFeeBasisPoints\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3080,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4117:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "expression": {
                                                "id": 3081,
                                                "name": "_contractURI",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2864,
                                                "src": "4138:12:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                                                  "typeString": "struct ERC721Storage.ContractURI storage ref"
                                                }
                                              },
                                              "id": 3082,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "sellerFeeBasisPoints",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2874,
                                              "src": "4138:33:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              }
                                            },
                                            {
                                              "hexValue": "222c",
                                              "id": 3083,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4189:4:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              "value": "\","
                                            },
                                            {
                                              "hexValue": "22666565526563697069656e74223a",
                                              "id": 3084,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4211:17:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_891c8a98c445fe915cd335eea8eb2435a302f46b695ab6cce63074b1689567fb",
                                                "typeString": "literal_string \"\"feeRecipient\":\""
                                              },
                                              "value": "\"feeRecipient\":"
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3085,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4246:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "expression": {
                                                "id": 3086,
                                                "name": "_contractURI",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2864,
                                                "src": "4267:12:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                                                  "typeString": "struct ERC721Storage.ContractURI storage ref"
                                                }
                                              },
                                              "id": 3087,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "feeRecipient",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2876,
                                              "src": "4267:25:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              }
                                            },
                                            {
                                              "hexValue": "22",
                                              "id": 3088,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4310:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              "value": "\""
                                            },
                                            {
                                              "hexValue": "7d",
                                              "id": 3089,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4331:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff",
                                                "typeString": "literal_string \"}\""
                                              },
                                              "value": "}"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_stringliteral_40bb4457a4d2d4af283e66d24aa61be535e9c05eff5c1d6e2cbf6a690fc1e88a",
                                                "typeString": "literal_string \"{\"name\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_d167fde83a20dbcab7f3066a2d97a70a940b8f30a06b31b2998495a01cbfa18e",
                                                "typeString": "literal_string \"\"description\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_047438afa15ee03984186f8f07e674d5251d9cfba9b05506c928826307a9facd",
                                                "typeString": "literal_string \"\"image\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_edb9dfb434f39030c7e6c0ebaca14c5292f46611913432e75654d81f7110ccf5",
                                                "typeString": "literal_string \"\"externalLink\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_5a0f64621135531f27a699625627339d4f3757e3c959615dacead2ddd2286d1b",
                                                "typeString": "literal_string \"\"sellerFeeBasisPoints\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb",
                                                "typeString": "literal_string \"\",\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_891c8a98c445fe915cd335eea8eb2435a302f46b695ab6cce63074b1689567fb",
                                                "typeString": "literal_string \"\"feeRecipient\":\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                "typeString": "literal_string \"\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff",
                                                "typeString": "literal_string \"}\""
                                              }
                                            ],
                                            "expression": {
                                              "id": 3057,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "3590:6:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                                "typeString": "type(string storage pointer)"
                                              },
                                              "typeName": {
                                                "id": 3056,
                                                "name": "string",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3590:6:5",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 3058,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "concat",
                                            "nodeType": "MemberAccess",
                                            "src": "3590:13:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                                              "typeString": "function () pure returns (string memory)"
                                            }
                                          },
                                          "id": 3090,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3590:760:5",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 3055,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "3569:5:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                          "typeString": "type(bytes storage pointer)"
                                        },
                                        "typeName": {
                                          "id": 3054,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "3569:5:5",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3091,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3569:795:5",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3052,
                                      "name": "Base64",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2702,
                                      "src": "3542:6:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Base64_$2702_$",
                                        "typeString": "type(library Base64)"
                                      }
                                    },
                                    "id": 3053,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2672,
                                    "src": "3542:13:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                                      "typeString": "function (bytes memory) pure returns (string memory)"
                                    }
                                  },
                                  "id": 3092,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3542:834:5",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa",
                                    "typeString": "literal_string \"data:application/json;base64,\""
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 3049,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3471:3:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3050,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "3471:16:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 3093,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3471:915:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3048,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3455:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 3047,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3455:6:5",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3455:939:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 3046,
                        "id": 3095,
                        "nodeType": "Return",
                        "src": "3442:952:5"
                      }
                    ]
                  },
                  "functionSelector": "725fa09c",
                  "id": 3097,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "constructContractURI",
                  "nameLocation": "3363:20:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3043,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3383:2:5"
                  },
                  "returnParameters": {
                    "id": 3046,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3045,
                        "mutability": "mutable",
                        "name": "uri",
                        "nameLocation": "3431:3:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3097,
                        "src": "3417:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3044,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3417:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3416:19:5"
                  },
                  "scope": 3147,
                  "src": "3354:1045:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3112,
                    "nodeType": "Block",
                    "src": "4463:78:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 3106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3104,
                            "name": "svgRenderInstance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2859,
                            "src": "4469:17:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3105,
                            "name": "svgRender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3099,
                            "src": "4489:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4469:29:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3107,
                        "nodeType": "ExpressionStatement",
                        "src": "4469:29:5"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3109,
                              "name": "svgRender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3099,
                              "src": "4526:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3108,
                            "name": "SvgRenderUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2881,
                            "src": "4509:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3110,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4509:27:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3111,
                        "nodeType": "EmitStatement",
                        "src": "4504:32:5"
                      }
                    ]
                  },
                  "functionSelector": "ae70ed13",
                  "id": 3113,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3102,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3101,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "4453:9:5"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4453:9:5"
                    }
                  ],
                  "name": "setSvgRender",
                  "nameLocation": "4412:12:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3099,
                        "mutability": "mutable",
                        "name": "svgRender",
                        "nameLocation": "4433:9:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3113,
                        "src": "4425:17:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3098,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4425:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4424:19:5"
                  },
                  "returnParameters": {
                    "id": 3103,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4463:0:5"
                  },
                  "scope": 3147,
                  "src": "4403:138:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3128,
                    "nodeType": "Block",
                    "src": "4609:86:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 3122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3120,
                            "name": "traitsFetchInstance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2861,
                            "src": "4615:19:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3121,
                            "name": "traitsFetch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "4637:11:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4615:33:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3123,
                        "nodeType": "ExpressionStatement",
                        "src": "4615:33:5"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3125,
                              "name": "traitsFetch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3115,
                              "src": "4678:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3124,
                            "name": "TraitsFetchUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2885,
                            "src": "4659:18:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4659:31:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3127,
                        "nodeType": "EmitStatement",
                        "src": "4654:36:5"
                      }
                    ]
                  },
                  "functionSelector": "3ee6fa92",
                  "id": 3129,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3118,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3117,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "4599:9:5"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4599:9:5"
                    }
                  ],
                  "name": "setTraitsFetch",
                  "nameLocation": "4554:14:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3115,
                        "mutability": "mutable",
                        "name": "traitsFetch",
                        "nameLocation": "4577:11:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3129,
                        "src": "4569:19:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3114,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4569:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4568:21:5"
                  },
                  "returnParameters": {
                    "id": 3119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4609:0:5"
                  },
                  "scope": 3147,
                  "src": "4545:150:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3145,
                    "nodeType": "Block",
                    "src": "4774:79:5",
                    "statements": [
                      {
                        "expression": {
                          "id": 3139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3137,
                            "name": "_contractURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2864,
                            "src": "4780:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                              "typeString": "struct ERC721Storage.ContractURI storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3138,
                            "name": "contractURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3132,
                            "src": "4795:11:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                              "typeString": "struct ERC721Storage.ContractURI memory"
                            }
                          },
                          "src": "4780:26:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage",
                            "typeString": "struct ERC721Storage.ContractURI storage ref"
                          }
                        },
                        "id": 3140,
                        "nodeType": "ExpressionStatement",
                        "src": "4780:26:5"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3142,
                              "name": "contractURI",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3132,
                              "src": "4836:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                                "typeString": "struct ERC721Storage.ContractURI memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                                "typeString": "struct ERC721Storage.ContractURI memory"
                              }
                            ],
                            "id": 3141,
                            "name": "ContractURIUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2890,
                            "src": "4817:18:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_struct$_ContractURI_$2877_memory_ptr_$returns$__$",
                              "typeString": "function (struct ERC721Storage.ContractURI memory)"
                            }
                          },
                          "id": 3143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4817:31:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3144,
                        "nodeType": "EmitStatement",
                        "src": "4812:36:5"
                      }
                    ]
                  },
                  "functionSelector": "57e30f44",
                  "id": 3146,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3135,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3134,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1332,
                        "src": "4764:9:5"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4764:9:5"
                    }
                  ],
                  "name": "setContractURI",
                  "nameLocation": "4708:14:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3132,
                        "mutability": "mutable",
                        "name": "contractURI",
                        "nameLocation": "4742:11:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 3146,
                        "src": "4723:30:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                          "typeString": "struct ERC721Storage.ContractURI"
                        },
                        "typeName": {
                          "id": 3131,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3130,
                            "name": "ContractURI",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2877,
                            "src": "4723:11:5"
                          },
                          "referencedDeclaration": 2877,
                          "src": "4723:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage_ptr",
                            "typeString": "struct ERC721Storage.ContractURI"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4722:32:5"
                  },
                  "returnParameters": {
                    "id": 3136,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4774:0:5"
                  },
                  "scope": 3147,
                  "src": "4699:154:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3148,
              "src": "397:4458:5",
              "usedErrors": [
                1085,
                1088,
                1091
              ]
            }
          ],
          "src": "36:4820:5"
        },
        "id": 5
      },
      "contracts/helpers/ERC721.sol": {
        "ast": {
          "absolutePath": "contracts/helpers/ERC721.sol",
          "exportedSymbols": {
            "ERC721": [
              3721
            ],
            "ERC721TokenReceiver": [
              3741
            ]
          },
          "id": 3742,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3149,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:6"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "ERC721",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3150,
                "nodeType": "StructuredDocumentation",
                "src": "57:272:6",
                "text": "@notice Modern, minimalist, and gas-optimized ERC721 implementation.\n @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\n @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)"
              },
              "fullyImplemented": false,
              "id": 3721,
              "linearizedBaseContracts": [
                3721
              ],
              "name": "ERC721",
              "nameLocation": "347:6:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3151,
                    "nodeType": "StructuredDocumentation",
                    "src": "360:171:6",
                    "text": "-----------------------------------------------------------------------\n Events\n -----------------------------------------------------------------------"
                  },
                  "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                  "id": 3159,
                  "name": "Transfer",
                  "nameLocation": "542:8:6",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3158,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3153,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "567:4:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3159,
                        "src": "551:20:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "551:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3155,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "589:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3159,
                        "src": "573:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3154,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "573:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3157,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "609:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3159,
                        "src": "593:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3156,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "593:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "550:62:6"
                  },
                  "src": "536:77:6"
                },
                {
                  "anonymous": false,
                  "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
                  "id": 3167,
                  "name": "Approval",
                  "nameLocation": "625:8:6",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3166,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3161,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "650:5:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3167,
                        "src": "634:21:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3160,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "634:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3163,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "673:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3167,
                        "src": "657:23:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "657:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3165,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "698:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3167,
                        "src": "682:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3164,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "682:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "633:68:6"
                  },
                  "src": "619:83:6"
                },
                {
                  "anonymous": false,
                  "eventSelector": "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
                  "id": 3175,
                  "name": "ApprovalForAll",
                  "nameLocation": "714:14:6",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3174,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3169,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "745:5:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3175,
                        "src": "729:21:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3168,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "729:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3171,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "768:8:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3175,
                        "src": "752:24:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3170,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "752:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3173,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "783:8:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3175,
                        "src": "778:13:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3172,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "778:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "728:64:6"
                  },
                  "src": "708:85:6"
                },
                {
                  "documentation": {
                    "id": 3176,
                    "nodeType": "StructuredDocumentation",
                    "src": "799:178:6",
                    "text": "-----------------------------------------------------------------------\n Custom Errors\n -----------------------------------------------------------------------"
                  },
                  "errorSelector": "4d5e5fb3",
                  "id": 3178,
                  "name": "NotMinted",
                  "nameLocation": "988:9:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3177,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "997:2:6"
                  },
                  "src": "982:18:6"
                },
                {
                  "errorSelector": "d92e233d",
                  "id": 3180,
                  "name": "ZeroAddress",
                  "nameLocation": "1012:11:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3179,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1023:2:6"
                  },
                  "src": "1006:20:6"
                },
                {
                  "errorSelector": "ea8e4eb5",
                  "id": 3182,
                  "name": "NotAuthorized",
                  "nameLocation": "1038:13:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3181,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1051:2:6"
                  },
                  "src": "1032:22:6"
                },
                {
                  "errorSelector": "c6de3f25",
                  "id": 3184,
                  "name": "WrongFrom",
                  "nameLocation": "1066:9:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1075:2:6"
                  },
                  "src": "1060:18:6"
                },
                {
                  "errorSelector": "9c8d2cd2",
                  "id": 3186,
                  "name": "InvalidRecipient",
                  "nameLocation": "1090:16:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3185,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1106:2:6"
                  },
                  "src": "1084:25:6"
                },
                {
                  "errorSelector": "3da63931",
                  "id": 3188,
                  "name": "UnsafeRecipient",
                  "nameLocation": "1121:15:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3187,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1136:2:6"
                  },
                  "src": "1115:24:6"
                },
                {
                  "errorSelector": "ddefae28",
                  "id": 3190,
                  "name": "AlreadyMinted",
                  "nameLocation": "1151:13:6",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3189,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1164:2:6"
                  },
                  "src": "1145:22:6"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 3191,
                    "nodeType": "StructuredDocumentation",
                    "src": "1173:187:6",
                    "text": "-----------------------------------------------------------------------\n Metadata Storage/Logic\n -----------------------------------------------------------------------"
                  },
                  "functionSelector": "06fdde03",
                  "id": 3193,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "1379:4:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 3721,
                  "src": "1365:18:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3192,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1365:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "95d89b41",
                  "id": 3195,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nameLocation": "1404:6:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 3721,
                  "src": "1390:20:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3194,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1390:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "functionSelector": "c87b56dd",
                  "id": 3202,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "1426:8:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3198,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3197,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1443:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3202,
                        "src": "1435:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3196,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1435:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1434:12:6"
                  },
                  "returnParameters": {
                    "id": 3201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3200,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3202,
                        "src": "1476:13:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3199,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1476:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1475:15:6"
                  },
                  "scope": 3721,
                  "src": "1417:74:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 3203,
                    "nodeType": "StructuredDocumentation",
                    "src": "1497:193:6",
                    "text": "-----------------------------------------------------------------------\n ERC721 Balance/Owner Storage\n -----------------------------------------------------------------------"
                  },
                  "id": 3207,
                  "mutability": "mutable",
                  "name": "_ownerOf",
                  "nameLocation": "1732:8:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 3721,
                  "src": "1695:45:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 3206,
                    "keyType": {
                      "id": 3204,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1703:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1695:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 3205,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1714:7:6",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3211,
                  "mutability": "mutable",
                  "name": "_balanceOf",
                  "nameLocation": "1784:10:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 3721,
                  "src": "1747:47:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 3210,
                    "keyType": {
                      "id": 3208,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1755:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1747:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 3209,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1766:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3233,
                    "nodeType": "Block",
                    "src": "1874:77:6",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "id": 3222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3218,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3216,
                                  "src": "1889:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 3219,
                                    "name": "_ownerOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3207,
                                    "src": "1897:8:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                      "typeString": "mapping(uint256 => address)"
                                    }
                                  },
                                  "id": 3221,
                                  "indexExpression": {
                                    "id": 3220,
                                    "name": "id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3213,
                                    "src": "1906:2:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1897:12:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1889:20:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 3223,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1888:22:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3226,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1922:1:6",
                                "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": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1914:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3224,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1914:7:6",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1914:10:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1888:36:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3232,
                        "nodeType": "IfStatement",
                        "src": "1884:60:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3229,
                              "name": "NotMinted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3178,
                              "src": "1933:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1933:11:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3231,
                          "nodeType": "RevertStatement",
                          "src": "1926:18:6"
                        }
                      }
                    ]
                  },
                  "functionSelector": "6352211e",
                  "id": 3234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "1810:7:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3214,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3213,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1826:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3234,
                        "src": "1818:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3212,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1818:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1817:12:6"
                  },
                  "returnParameters": {
                    "id": 3217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3216,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1867:5:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3234,
                        "src": "1859:13:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3215,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1859:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1858:15:6"
                  },
                  "scope": 3721,
                  "src": "1801:150:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3255,
                    "nodeType": "Block",
                    "src": "2029:96:6",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3241,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3236,
                            "src": "2043:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3244,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2060:1:6",
                                "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": 3243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2052:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3242,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2052:7:6",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3245,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2052:10:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2043:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3250,
                        "nodeType": "IfStatement",
                        "src": "2039:45:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3247,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3180,
                              "src": "2071:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3248,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2071:13:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3249,
                          "nodeType": "RevertStatement",
                          "src": "2064:20:6"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 3251,
                            "name": "_balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3211,
                            "src": "2101:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3253,
                          "indexExpression": {
                            "id": 3252,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3236,
                            "src": "2112:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2101:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3240,
                        "id": 3254,
                        "nodeType": "Return",
                        "src": "2094:24:6"
                      }
                    ]
                  },
                  "functionSelector": "70a08231",
                  "id": 3256,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "1966:9:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3237,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3236,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1984:5:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3256,
                        "src": "1976:13:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3235,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1976:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1975:15:6"
                  },
                  "returnParameters": {
                    "id": 3240,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3239,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3256,
                        "src": "2020:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3238,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2020:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2019:9:6"
                  },
                  "scope": 3721,
                  "src": "1957:168:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 3257,
                    "nodeType": "StructuredDocumentation",
                    "src": "2131:188:6",
                    "text": "-----------------------------------------------------------------------\n ERC721 Approval Storage\n -----------------------------------------------------------------------"
                  },
                  "functionSelector": "081812fc",
                  "id": 3261,
                  "mutability": "mutable",
                  "name": "getApproved",
                  "nameLocation": "2359:11:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 3721,
                  "src": "2324:46:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 3260,
                    "keyType": {
                      "id": 3258,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2332:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "2324:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 3259,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2343:7:6",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "e985e9c5",
                  "id": 3267,
                  "mutability": "mutable",
                  "name": "isApprovedForAll",
                  "nameLocation": "2429:16:6",
                  "nodeType": "VariableDeclaration",
                  "scope": 3721,
                  "src": "2377:68:6",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                    "typeString": "mapping(address => mapping(address => bool))"
                  },
                  "typeName": {
                    "id": 3266,
                    "keyType": {
                      "id": 3262,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2385:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "2377:44:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                      "typeString": "mapping(address => mapping(address => bool))"
                    },
                    "valueType": {
                      "id": 3265,
                      "keyType": {
                        "id": 3263,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2404:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "2396:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      },
                      "valueType": {
                        "id": 3264,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2415:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3283,
                    "nodeType": "Block",
                    "src": "2689:55:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 3277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3275,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3193,
                            "src": "2699:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3276,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3270,
                            "src": "2706:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2699:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 3278,
                        "nodeType": "ExpressionStatement",
                        "src": "2699:12:6"
                      },
                      {
                        "expression": {
                          "id": 3281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3279,
                            "name": "symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3195,
                            "src": "2721:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3280,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3272,
                            "src": "2730:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "2721:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 3282,
                        "nodeType": "ExpressionStatement",
                        "src": "2721:16:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3268,
                    "nodeType": "StructuredDocumentation",
                    "src": "2452:176:6",
                    "text": "-----------------------------------------------------------------------\n Constructor\n -----------------------------------------------------------------------"
                  },
                  "id": 3284,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3270,
                        "mutability": "mutable",
                        "name": "_name",
                        "nameLocation": "2659:5:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3284,
                        "src": "2645:19:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3269,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2645:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3272,
                        "mutability": "mutable",
                        "name": "_symbol",
                        "nameLocation": "2680:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3284,
                        "src": "2666:21:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3271,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2666:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2644:44:6"
                  },
                  "returnParameters": {
                    "id": 3274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2689:0:6"
                  },
                  "scope": 3721,
                  "src": "2633:111:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3326,
                    "nodeType": "Block",
                    "src": "2993:223:6",
                    "statements": [
                      {
                        "assignments": [
                          3293
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3293,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "3011:5:6",
                            "nodeType": "VariableDeclaration",
                            "scope": 3326,
                            "src": "3003:13:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3292,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3003:7:6",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3297,
                        "initialValue": {
                          "baseExpression": {
                            "id": 3294,
                            "name": "_ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3207,
                            "src": "3019:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 3296,
                          "indexExpression": {
                            "id": 3295,
                            "name": "id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3289,
                            "src": "3028:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3019:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3003:28:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 3298,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3046:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3299,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3046:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 3300,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3293,
                              "src": "3060:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3046:19:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 3308,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "3069:36:6",
                            "subExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 3302,
                                  "name": "isApprovedForAll",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3267,
                                  "src": "3070:16:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                    "typeString": "mapping(address => mapping(address => bool))"
                                  }
                                },
                                "id": 3304,
                                "indexExpression": {
                                  "id": 3303,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3293,
                                  "src": "3087:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3070:23:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 3307,
                              "indexExpression": {
                                "expression": {
                                  "id": 3305,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3094:3:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3306,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "3094:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3070:35:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3046:59:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3313,
                        "nodeType": "IfStatement",
                        "src": "3042:87:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3310,
                              "name": "NotAuthorized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3182,
                              "src": "3114:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3114:15:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3312,
                          "nodeType": "RevertStatement",
                          "src": "3107:22:6"
                        }
                      },
                      {
                        "expression": {
                          "id": 3318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3314,
                              "name": "getApproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3261,
                              "src": "3140:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3316,
                            "indexExpression": {
                              "id": 3315,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3289,
                              "src": "3152:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3140:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3317,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3287,
                            "src": "3158:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3140:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3319,
                        "nodeType": "ExpressionStatement",
                        "src": "3140:25:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3321,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3293,
                              "src": "3190:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3322,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3287,
                              "src": "3197:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3323,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3289,
                              "src": "3206:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3320,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3167,
                            "src": "3181:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3181:28:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3325,
                        "nodeType": "EmitStatement",
                        "src": "3176:33:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3285,
                    "nodeType": "StructuredDocumentation",
                    "src": "2750:177:6",
                    "text": "-----------------------------------------------------------------------\n ERC721 Logic\n -----------------------------------------------------------------------"
                  },
                  "functionSelector": "095ea7b3",
                  "id": 3327,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "2941:7:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3287,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2957:7:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3327,
                        "src": "2949:15:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3286,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2949:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3289,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "2974:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3327,
                        "src": "2966:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3288,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2966:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2948:29:6"
                  },
                  "returnParameters": {
                    "id": 3291,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2993:0:6"
                  },
                  "scope": 3721,
                  "src": "2932:284:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3350,
                    "nodeType": "Block",
                    "src": "3297:128:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 3341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 3334,
                                "name": "isApprovedForAll",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3267,
                                "src": "3307:16:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 3338,
                              "indexExpression": {
                                "expression": {
                                  "id": 3335,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3324:3:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3336,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "3324:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3307:28:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 3339,
                            "indexExpression": {
                              "id": 3337,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3329,
                              "src": "3336:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3307:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3340,
                            "name": "approved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3331,
                            "src": "3348:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3307:49:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3342,
                        "nodeType": "ExpressionStatement",
                        "src": "3307:49:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3344,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3387:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3387:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3346,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3329,
                              "src": "3399:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3347,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3331,
                              "src": "3409:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3343,
                            "name": "ApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3175,
                            "src": "3372:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 3348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3372:46:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3349,
                        "nodeType": "EmitStatement",
                        "src": "3367:51:6"
                      }
                    ]
                  },
                  "functionSelector": "a22cb465",
                  "id": 3351,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "3231:17:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3329,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3257:8:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3351,
                        "src": "3249:16:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3328,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3249:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3331,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "3272:8:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3351,
                        "src": "3267:13:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3330,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3267:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3248:33:6"
                  },
                  "returnParameters": {
                    "id": 3333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3297:0:6"
                  },
                  "scope": 3721,
                  "src": "3222:203:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3430,
                    "nodeType": "Block",
                    "src": "3506:618:6",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3360,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3353,
                            "src": "3520:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 3361,
                              "name": "_ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3207,
                              "src": "3528:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3363,
                            "indexExpression": {
                              "id": 3362,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3357,
                              "src": "3537:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3528:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3520:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3368,
                        "nodeType": "IfStatement",
                        "src": "3516:44:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3365,
                              "name": "WrongFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3184,
                              "src": "3549:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3549:11:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3367,
                          "nodeType": "RevertStatement",
                          "src": "3542:18:6"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3369,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3355,
                            "src": "3575:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3589:1:6",
                                "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": 3371,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3581:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3370,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3581:7:6",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3581:10:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3575:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3378,
                        "nodeType": "IfStatement",
                        "src": "3571:47:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3375,
                              "name": "InvalidRecipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3186,
                              "src": "3600:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3376,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3600:18:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3377,
                          "nodeType": "RevertStatement",
                          "src": "3593:25:6"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3397,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 3390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3382,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 3379,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3633:3:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "3633:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 3381,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3353,
                                "src": "3647:4:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "3633:18:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "id": 3389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "3655:35:6",
                              "subExpression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 3383,
                                    "name": "isApprovedForAll",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3267,
                                    "src": "3656:16:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                      "typeString": "mapping(address => mapping(address => bool))"
                                    }
                                  },
                                  "id": 3385,
                                  "indexExpression": {
                                    "id": 3384,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3353,
                                    "src": "3673:4:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3656:22:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                    "typeString": "mapping(address => bool)"
                                  }
                                },
                                "id": 3388,
                                "indexExpression": {
                                  "expression": {
                                    "id": 3386,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "3679:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 3387,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3679:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3656:34:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "3633:57:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 3391,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3694:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3392,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3694:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "baseExpression": {
                                "id": 3393,
                                "name": "getApproved",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3261,
                                "src": "3708:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                  "typeString": "mapping(uint256 => address)"
                                }
                              },
                              "id": 3395,
                              "indexExpression": {
                                "id": 3394,
                                "name": "id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3357,
                                "src": "3720:2:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3708:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "3694:29:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3633:90:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3401,
                        "nodeType": "IfStatement",
                        "src": "3629:130:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3398,
                              "name": "NotAuthorized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3182,
                              "src": "3744:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3744:15:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3400,
                          "nodeType": "RevertStatement",
                          "src": "3737:22:6"
                        }
                      },
                      {
                        "id": 3412,
                        "nodeType": "UncheckedBlock",
                        "src": "3935:84:6",
                        "statements": [
                          {
                            "expression": {
                              "id": 3405,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "--",
                              "prefix": false,
                              "src": "3959:18:6",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 3402,
                                  "name": "_balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3211,
                                  "src": "3959:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 3404,
                                "indexExpression": {
                                  "id": 3403,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3353,
                                  "src": "3970:4:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "3959:16:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3406,
                            "nodeType": "ExpressionStatement",
                            "src": "3959:18:6"
                          },
                          {
                            "expression": {
                              "id": 3410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "3992:16:6",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 3407,
                                  "name": "_balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3211,
                                  "src": "3992:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 3409,
                                "indexExpression": {
                                  "id": 3408,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3355,
                                  "src": "4003:2:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "3992:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3411,
                            "nodeType": "ExpressionStatement",
                            "src": "3992:16:6"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 3417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3413,
                              "name": "_ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3207,
                              "src": "4029:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3415,
                            "indexExpression": {
                              "id": 3414,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3357,
                              "src": "4038:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4029:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3416,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3355,
                            "src": "4044:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4029:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3418,
                        "nodeType": "ExpressionStatement",
                        "src": "4029:17:6"
                      },
                      {
                        "expression": {
                          "id": 3422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "4057:22:6",
                          "subExpression": {
                            "baseExpression": {
                              "id": 3419,
                              "name": "getApproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3261,
                              "src": "4064:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3421,
                            "indexExpression": {
                              "id": 3420,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3357,
                              "src": "4076:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4064:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3423,
                        "nodeType": "ExpressionStatement",
                        "src": "4057:22:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3425,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3353,
                              "src": "4104:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3426,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3355,
                              "src": "4110:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3427,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3357,
                              "src": "4114:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3424,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3159,
                            "src": "4095:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4095:22:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3429,
                        "nodeType": "EmitStatement",
                        "src": "4090:27:6"
                      }
                    ]
                  },
                  "functionSelector": "23b872dd",
                  "id": 3431,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "3440:12:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3358,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3353,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "3461:4:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3431,
                        "src": "3453:12:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3352,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3453:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3355,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3475:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3431,
                        "src": "3467:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3354,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3467:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3357,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "3487:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3431,
                        "src": "3479:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3356,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3479:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3452:38:6"
                  },
                  "returnParameters": {
                    "id": 3359,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3506:0:6"
                  },
                  "scope": 3721,
                  "src": "3431:693:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3471,
                    "nodeType": "Block",
                    "src": "4209:294:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3441,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3433,
                              "src": "4232:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3442,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3435,
                              "src": "4238:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3443,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3437,
                              "src": "4242:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3440,
                            "name": "transferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3431,
                            "src": "4219:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4219:26:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3445,
                        "nodeType": "ExpressionStatement",
                        "src": "4219:26:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 3446,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3435,
                                "src": "4260:2:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "4260:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4260:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4278:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4260:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3470,
                        "nodeType": "IfStatement",
                        "src": "4256:241:6",
                        "trueBody": {
                          "id": 3469,
                          "nodeType": "Block",
                          "src": "4281:216:6",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 3464,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 3455,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "4357:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 3456,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "4357:10:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3457,
                                      "name": "from",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3433,
                                      "src": "4369:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3458,
                                      "name": "id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3437,
                                      "src": "4375:2:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "hexValue": "",
                                      "id": 3459,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4379:2:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      },
                                      "value": ""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3452,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3435,
                                          "src": "4336:2:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 3451,
                                        "name": "ERC721TokenReceiver",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3741,
                                        "src": "4316:19:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                          "typeString": "type(contract ERC721TokenReceiver)"
                                        }
                                      },
                                      "id": 3453,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4316:23:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ERC721TokenReceiver_$3741",
                                        "typeString": "contract ERC721TokenReceiver"
                                      }
                                    },
                                    "id": 3454,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "4316:40:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                    }
                                  },
                                  "id": 3460,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4316:66:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 3461,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3741,
                                      "src": "4402:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 3462,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "4402:36:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function ERC721TokenReceiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                                    }
                                  },
                                  "id": 3463,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "4402:45:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "4316:131:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3468,
                              "nodeType": "IfStatement",
                              "src": "4295:191:6",
                              "trueBody": {
                                "errorCall": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 3465,
                                    "name": "UnsafeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3188,
                                    "src": "4469:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 3466,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4469:17:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 3467,
                                "nodeType": "RevertStatement",
                                "src": "4462:24:6"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "functionSelector": "42842e0e",
                  "id": 3472,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4139:16:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3438,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3433,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4164:4:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3472,
                        "src": "4156:12:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3432,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4156:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3435,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4178:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3472,
                        "src": "4170:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3434,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4170:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3437,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "4190:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3472,
                        "src": "4182:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3436,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4182:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4155:38:6"
                  },
                  "returnParameters": {
                    "id": 3439,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4209:0:6"
                  },
                  "scope": 3721,
                  "src": "4130:373:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3514,
                    "nodeType": "Block",
                    "src": "4609:296:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3484,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3474,
                              "src": "4632:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3485,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3476,
                              "src": "4638:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3486,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3478,
                              "src": "4642:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3483,
                            "name": "transferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3431,
                            "src": "4619:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4619:26:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3488,
                        "nodeType": "ExpressionStatement",
                        "src": "4619:26:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 3489,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3476,
                                "src": "4660:2:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "4660:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4660:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4678:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4660:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3513,
                        "nodeType": "IfStatement",
                        "src": "4656:243:6",
                        "trueBody": {
                          "id": 3512,
                          "nodeType": "Block",
                          "src": "4681:218:6",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 3507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 3498,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "4757:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 3499,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "4757:10:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3500,
                                      "name": "from",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3474,
                                      "src": "4769:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3501,
                                      "name": "id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3478,
                                      "src": "4775:2:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 3502,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3480,
                                      "src": "4779:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3495,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3476,
                                          "src": "4736:2:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 3494,
                                        "name": "ERC721TokenReceiver",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3741,
                                        "src": "4716:19:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                          "typeString": "type(contract ERC721TokenReceiver)"
                                        }
                                      },
                                      "id": 3496,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4716:23:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ERC721TokenReceiver_$3741",
                                        "typeString": "contract ERC721TokenReceiver"
                                      }
                                    },
                                    "id": 3497,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "4716:40:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                    }
                                  },
                                  "id": 3503,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4716:68:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 3504,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3741,
                                      "src": "4804:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 3505,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "4804:36:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function ERC721TokenReceiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                                    }
                                  },
                                  "id": 3506,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "4804:45:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "4716:133:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3511,
                              "nodeType": "IfStatement",
                              "src": "4695:193:6",
                              "trueBody": {
                                "errorCall": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 3508,
                                    "name": "UnsafeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3188,
                                    "src": "4871:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 3509,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4871:17:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 3510,
                                "nodeType": "RevertStatement",
                                "src": "4864:24:6"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "functionSelector": "b88d4fde",
                  "id": 3515,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4518:16:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3481,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3474,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4543:4:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3515,
                        "src": "4535:12:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3473,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4535:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3476,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4557:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3515,
                        "src": "4549:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3475,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4549:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3478,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "4569:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3515,
                        "src": "4561:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3477,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4561:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3480,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4588:4:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3515,
                        "src": "4573:19:6",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3479,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4573:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4534:59:6"
                  },
                  "returnParameters": {
                    "id": 3482,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4609:0:6"
                  },
                  "scope": 3721,
                  "src": "4509:396:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3535,
                    "nodeType": "Block",
                    "src": "5175:253:6",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 3529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 3525,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3523,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3518,
                                "src": "5204:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30783031666663396137",
                                "id": 3524,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5219:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_33540519_by_1",
                                  "typeString": "int_const 33540519"
                                },
                                "value": "0x01ffc9a7"
                              },
                              "src": "5204:25:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 3528,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3526,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3518,
                                "src": "5279:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30783830616335386364",
                                "id": 3527,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5294:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2158778573_by_1",
                                  "typeString": "int_const 2158778573"
                                },
                                "value": "0x80ac58cd"
                              },
                              "src": "5279:25:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "5204:100:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 3532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3530,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3518,
                              "src": "5354:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30783562356531333966",
                              "id": 3531,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5369:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1532892063_by_1",
                                "typeString": "int_const 1532892063"
                              },
                              "value": "0x5b5e139f"
                            },
                            "src": "5354:25:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5204:175:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 3522,
                        "id": 3534,
                        "nodeType": "Return",
                        "src": "5185:194:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3516,
                    "nodeType": "StructuredDocumentation",
                    "src": "4911:177:6",
                    "text": "-----------------------------------------------------------------------\n ERC165 Logic\n -----------------------------------------------------------------------"
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 3536,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "5102:17:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3519,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3518,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "5127:11:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3536,
                        "src": "5120:18:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 3517,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "5120:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5119:20:6"
                  },
                  "returnParameters": {
                    "id": 3522,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3521,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3536,
                        "src": "5169:4:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3520,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5169:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5168:6:6"
                  },
                  "scope": 3721,
                  "src": "5093:335:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3587,
                    "nodeType": "Block",
                    "src": "5684:317:6",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3544,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "5698:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3547,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5712:1:6",
                                "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": 3546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5704:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3545,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5704:7:6",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5704:10:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5698:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3553,
                        "nodeType": "IfStatement",
                        "src": "5694:47:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3550,
                              "name": "InvalidRecipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3186,
                              "src": "5723:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3551,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5723:18:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3552,
                          "nodeType": "RevertStatement",
                          "src": "5716:25:6"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 3554,
                              "name": "_ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3207,
                              "src": "5756:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3556,
                            "indexExpression": {
                              "id": 3555,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3541,
                              "src": "5765:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5756:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5780:1:6",
                                "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": 3558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5772:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3557,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5772:7:6",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3560,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5772:10:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5756:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3565,
                        "nodeType": "IfStatement",
                        "src": "5752:54:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3562,
                              "name": "AlreadyMinted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3190,
                              "src": "5791:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5791:15:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3564,
                          "nodeType": "RevertStatement",
                          "src": "5784:22:6"
                        }
                      },
                      {
                        "id": 3571,
                        "nodeType": "UncheckedBlock",
                        "src": "5872:51:6",
                        "statements": [
                          {
                            "expression": {
                              "id": 3569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "5896:16:6",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 3566,
                                  "name": "_balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3211,
                                  "src": "5896:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 3568,
                                "indexExpression": {
                                  "id": 3567,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3539,
                                  "src": "5907:2:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "5896:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3570,
                            "nodeType": "ExpressionStatement",
                            "src": "5896:16:6"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 3576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3572,
                              "name": "_ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3207,
                              "src": "5933:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3574,
                            "indexExpression": {
                              "id": 3573,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3541,
                              "src": "5942:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5933:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3575,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "5948:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5933:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3577,
                        "nodeType": "ExpressionStatement",
                        "src": "5933:17:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 3581,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5983:1:6",
                                  "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": 3580,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5975:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3579,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5975:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3582,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5975:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3583,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3539,
                              "src": "5987:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3584,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3541,
                              "src": "5991:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3578,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3159,
                            "src": "5966:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5966:28:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3586,
                        "nodeType": "EmitStatement",
                        "src": "5961:33:6"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3537,
                    "nodeType": "StructuredDocumentation",
                    "src": "5434:189:6",
                    "text": "-----------------------------------------------------------------------\n Internal Mint/Burn Logic\n -----------------------------------------------------------------------"
                  },
                  "id": 3588,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "5637:5:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3542,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3539,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5651:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3588,
                        "src": "5643:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3538,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5643:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3541,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "5663:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3588,
                        "src": "5655:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3540,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5655:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5642:24:6"
                  },
                  "returnParameters": {
                    "id": 3543,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5684:0:6"
                  },
                  "scope": 3721,
                  "src": "5628:373:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3634,
                    "nodeType": "Block",
                    "src": "6051:328:6",
                    "statements": [
                      {
                        "assignments": [
                          3594
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3594,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "6069:5:6",
                            "nodeType": "VariableDeclaration",
                            "scope": 3634,
                            "src": "6061:13:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3593,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6061:7:6",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3598,
                        "initialValue": {
                          "baseExpression": {
                            "id": 3595,
                            "name": "_ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3207,
                            "src": "6077:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 3597,
                          "indexExpression": {
                            "id": 3596,
                            "name": "id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3590,
                            "src": "6086:2:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6077:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6061:28:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3599,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3594,
                            "src": "6104:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3602,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6121:1:6",
                                "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": 3601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6113:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3600,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6113:7:6",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6113:10:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6104:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3608,
                        "nodeType": "IfStatement",
                        "src": "6100:43:6",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3605,
                              "name": "NotMinted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3178,
                              "src": "6132:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3606,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6132:11:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3607,
                          "nodeType": "RevertStatement",
                          "src": "6125:18:6"
                        }
                      },
                      {
                        "id": 3614,
                        "nodeType": "UncheckedBlock",
                        "src": "6209:54:6",
                        "statements": [
                          {
                            "expression": {
                              "id": 3612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "--",
                              "prefix": false,
                              "src": "6233:19:6",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 3609,
                                  "name": "_balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3211,
                                  "src": "6233:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 3611,
                                "indexExpression": {
                                  "id": 3610,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3594,
                                  "src": "6244:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "6233:17:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3613,
                            "nodeType": "ExpressionStatement",
                            "src": "6233:19:6"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 3618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6273:19:6",
                          "subExpression": {
                            "baseExpression": {
                              "id": 3615,
                              "name": "_ownerOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3207,
                              "src": "6280:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3617,
                            "indexExpression": {
                              "id": 3616,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3590,
                              "src": "6289:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6280:12:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3619,
                        "nodeType": "ExpressionStatement",
                        "src": "6273:19:6"
                      },
                      {
                        "expression": {
                          "id": 3623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6303:22:6",
                          "subExpression": {
                            "baseExpression": {
                              "id": 3620,
                              "name": "getApproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3261,
                              "src": "6310:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 3622,
                            "indexExpression": {
                              "id": 3621,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3590,
                              "src": "6322:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6310:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3624,
                        "nodeType": "ExpressionStatement",
                        "src": "6303:22:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3626,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3594,
                              "src": "6350:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 3629,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6365:1:6",
                                  "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": 3628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6357:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3627,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6357:7:6",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3630,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6357:10:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3631,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3590,
                              "src": "6369:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3625,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3159,
                            "src": "6341:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6341:31:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3633,
                        "nodeType": "EmitStatement",
                        "src": "6336:36:6"
                      }
                    ]
                  },
                  "id": 3635,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "6016:5:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3591,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3590,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "6030:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3635,
                        "src": "6022:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3589,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6022:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6021:12:6"
                  },
                  "returnParameters": {
                    "id": 3592,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6051:0:6"
                  },
                  "scope": 3721,
                  "src": "6007:372:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3676,
                    "nodeType": "Block",
                    "src": "6639:287:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3644,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3638,
                              "src": "6655:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3645,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3640,
                              "src": "6659:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3643,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3588,
                            "src": "6649:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 3646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6649:13:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3647,
                        "nodeType": "ExpressionStatement",
                        "src": "6649:13:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 3648,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3638,
                                "src": "6677:2:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3649,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "6677:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6677:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6695:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6677:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3675,
                        "nodeType": "IfStatement",
                        "src": "6673:247:6",
                        "trueBody": {
                          "id": 3674,
                          "nodeType": "Block",
                          "src": "6698:222:6",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 3669,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 3657,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "6774:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 3658,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "6774:10:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 3661,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6794:1:6",
                                          "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": 3660,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "6786:7:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 3659,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "6786:7:6",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3662,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6786:10:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3663,
                                      "name": "id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3640,
                                      "src": "6798:2:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "hexValue": "",
                                      "id": 3664,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6802:2:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      },
                                      "value": ""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3654,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3638,
                                          "src": "6753:2:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 3653,
                                        "name": "ERC721TokenReceiver",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3741,
                                        "src": "6733:19:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                          "typeString": "type(contract ERC721TokenReceiver)"
                                        }
                                      },
                                      "id": 3655,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "6733:23:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ERC721TokenReceiver_$3741",
                                        "typeString": "contract ERC721TokenReceiver"
                                      }
                                    },
                                    "id": 3656,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "6733:40:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                    }
                                  },
                                  "id": 3665,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6733:72:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 3666,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3741,
                                      "src": "6825:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 3667,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "6825:36:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function ERC721TokenReceiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                                    }
                                  },
                                  "id": 3668,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "6825:45:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "6733:137:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3673,
                              "nodeType": "IfStatement",
                              "src": "6712:197:6",
                              "trueBody": {
                                "errorCall": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 3670,
                                    "name": "UnsafeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3188,
                                    "src": "6892:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 3671,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6892:17:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 3672,
                                "nodeType": "RevertStatement",
                                "src": "6885:24:6"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3636,
                    "nodeType": "StructuredDocumentation",
                    "src": "6385:189:6",
                    "text": "-----------------------------------------------------------------------\n Internal Safe Mint Logic\n -----------------------------------------------------------------------"
                  },
                  "id": 3677,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "6588:9:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3641,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3638,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "6606:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3677,
                        "src": "6598:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3637,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6598:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3640,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "6618:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3677,
                        "src": "6610:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3639,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6610:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6597:24:6"
                  },
                  "returnParameters": {
                    "id": 3642,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6639:0:6"
                  },
                  "scope": 3721,
                  "src": "6579:347:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3719,
                    "nodeType": "Block",
                    "src": "7011:289:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3687,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3679,
                              "src": "7027:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3688,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3681,
                              "src": "7031:2:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3686,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3588,
                            "src": "7021:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 3689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7021:13:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3690,
                        "nodeType": "ExpressionStatement",
                        "src": "7021:13:6"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3695,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 3691,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3679,
                                "src": "7049:2:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3692,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "7049:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3693,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "7049:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3694,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7067:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7049:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3718,
                        "nodeType": "IfStatement",
                        "src": "7045:249:6",
                        "trueBody": {
                          "id": 3717,
                          "nodeType": "Block",
                          "src": "7070:224:6",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 3712,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 3700,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "7146:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 3701,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "src": "7146:10:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 3704,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "7166:1:6",
                                          "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": 3703,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7158:7:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 3702,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7158:7:6",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3705,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7158:10:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3706,
                                      "name": "id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3681,
                                      "src": "7170:2:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 3707,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3683,
                                      "src": "7174:4:6",
                                      "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_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3697,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3679,
                                          "src": "7125:2:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 3696,
                                        "name": "ERC721TokenReceiver",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3741,
                                        "src": "7105:19:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                          "typeString": "type(contract ERC721TokenReceiver)"
                                        }
                                      },
                                      "id": 3698,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7105:23:6",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ERC721TokenReceiver_$3741",
                                        "typeString": "contract ERC721TokenReceiver"
                                      }
                                    },
                                    "id": 3699,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "7105:40:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                    }
                                  },
                                  "id": 3708,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7105:74:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 3709,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3741,
                                      "src": "7199:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 3710,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "onERC721Received",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3740,
                                    "src": "7199:36:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                      "typeString": "function ERC721TokenReceiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                                    }
                                  },
                                  "id": 3711,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "7199:45:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "src": "7105:139:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3716,
                              "nodeType": "IfStatement",
                              "src": "7084:199:6",
                              "trueBody": {
                                "errorCall": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 3713,
                                    "name": "UnsafeRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3188,
                                    "src": "7266:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 3714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7266:17:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 3715,
                                "nodeType": "RevertStatement",
                                "src": "7259:24:6"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 3720,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "6941:9:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3684,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3679,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "6959:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3720,
                        "src": "6951:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3678,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6951:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3681,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "6971:2:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3720,
                        "src": "6963:10:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3680,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6963:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3683,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6988:4:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 3720,
                        "src": "6975:17:6",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3682,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6975:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6950:43:6"
                  },
                  "returnParameters": {
                    "id": 3685,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7011:0:6"
                  },
                  "scope": 3721,
                  "src": "6932:368:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 3742,
              "src": "329:6973:6",
              "usedErrors": [
                3178,
                3180,
                3182,
                3184,
                3186,
                3188,
                3190
              ]
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "ERC721TokenReceiver",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3722,
                "nodeType": "StructuredDocumentation",
                "src": "7304:284:6",
                "text": "@notice A generic interface for a contract which properly accepts ERC721 tokens.\n @author SolDAO (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC721.sol)\n @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)"
              },
              "fullyImplemented": true,
              "id": 3741,
              "linearizedBaseContracts": [
                3741
              ],
              "name": "ERC721TokenReceiver",
              "nameLocation": "7606:19:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3739,
                    "nodeType": "Block",
                    "src": "7735:69:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "expression": {
                              "id": 3735,
                              "name": "ERC721TokenReceiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3741,
                              "src": "7752:19:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$3741_$",
                                "typeString": "type(contract ERC721TokenReceiver)"
                              }
                            },
                            "id": 3736,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "onERC721Received",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3740,
                            "src": "7752:36:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                              "typeString": "function ERC721TokenReceiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"
                            }
                          },
                          "id": 3737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "selector",
                          "nodeType": "MemberAccess",
                          "src": "7752:45:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "functionReturnParameters": 3734,
                        "id": 3738,
                        "nodeType": "Return",
                        "src": "7745:52:6"
                      }
                    ]
                  },
                  "functionSelector": "150b7a02",
                  "id": 3740,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onERC721Received",
                  "nameLocation": "7641:16:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3731,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3724,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3740,
                        "src": "7658:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3723,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7658:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3726,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3740,
                        "src": "7667:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3725,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7667:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3728,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3740,
                        "src": "7676:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3727,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7676:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3730,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3740,
                        "src": "7685:14:6",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3729,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7685:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7657:43:6"
                  },
                  "returnParameters": {
                    "id": 3734,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3733,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3740,
                        "src": "7727:6:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 3732,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "7727:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7726:8:6"
                  },
                  "scope": 3741,
                  "src": "7632:172:6",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "external"
                }
              ],
              "scope": 3742,
              "src": "7588:218:6",
              "usedErrors": []
            }
          ],
          "src": "32:7775:6"
        },
        "id": 6
      },
      "contracts/interfaces/IERC721KImage.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IERC721KImage.sol",
          "exportedSymbols": {
            "IERC721KImage": [
              3751
            ]
          },
          "id": 3752,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3743,
              "literals": [
                "solidity",
                "0.8",
                ".15"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:7"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC721KImage",
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3751,
              "linearizedBaseContracts": [
                3751
              ],
              "name": "IERC721KImage",
              "nameLocation": "67:13:7",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "316df61e",
                  "id": 3750,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "render",
                  "nameLocation": "94:6:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3746,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3745,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "114:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 3750,
                        "src": "101:18:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3744,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "101:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "100:20:7"
                  },
                  "returnParameters": {
                    "id": 3749,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3748,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3750,
                        "src": "144:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3747,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "144:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "143:15:7"
                  },
                  "scope": 3751,
                  "src": "85:74:7",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3752,
              "src": "57:104:7",
              "usedErrors": []
            }
          ],
          "src": "32:130:7"
        },
        "id": 7
      },
      "contracts/interfaces/IERC721KTraits.sol": {
        "ast": {
          "absolutePath": "contracts/interfaces/IERC721KTraits.sol",
          "exportedSymbols": {
            "IERC721KTraits": [
              3768
            ]
          },
          "id": 3769,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3753,
              "literals": [
                "solidity",
                "0.8",
                ".15"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:23:8"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC721KTraits",
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 3768,
              "linearizedBaseContracts": [
                3768
              ],
              "name": "IERC721KTraits",
              "nameLocation": "67:14:8",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IERC721KTraits.DisplayType",
                  "id": 3760,
                  "members": [
                    {
                      "id": 3754,
                      "name": "Base",
                      "nameLocation": "109:4:8",
                      "nodeType": "EnumValue",
                      "src": "109:4:8"
                    },
                    {
                      "id": 3755,
                      "name": "Generic",
                      "nameLocation": "119:7:8",
                      "nodeType": "EnumValue",
                      "src": "119:7:8"
                    },
                    {
                      "id": 3756,
                      "name": "BoostNumber",
                      "nameLocation": "132:11:8",
                      "nodeType": "EnumValue",
                      "src": "132:11:8"
                    },
                    {
                      "id": 3757,
                      "name": "BoostPercent",
                      "nameLocation": "149:12:8",
                      "nodeType": "EnumValue",
                      "src": "149:12:8"
                    },
                    {
                      "id": 3758,
                      "name": "Number",
                      "nameLocation": "167:6:8",
                      "nodeType": "EnumValue",
                      "src": "167:6:8"
                    },
                    {
                      "id": 3759,
                      "name": "Date",
                      "nameLocation": "179:4:8",
                      "nodeType": "EnumValue",
                      "src": "179:4:8"
                    }
                  ],
                  "name": "DisplayType",
                  "nameLocation": "91:11:8",
                  "nodeType": "EnumDefinition",
                  "src": "86:101:8"
                },
                {
                  "functionSelector": "f6559a6b",
                  "id": 3767,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fetch",
                  "nameLocation": "200:5:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3763,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3762,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "219:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 3767,
                        "src": "206:18:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3761,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "206:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "205:20:8"
                  },
                  "returnParameters": {
                    "id": 3766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3765,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3767,
                        "src": "249:13:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3764,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "249:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "248:15:8"
                  },
                  "scope": 3768,
                  "src": "191:73:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3769,
              "src": "57:209:8",
              "usedErrors": []
            }
          ],
          "src": "32:235:8"
        },
        "id": 8
      },
      "contracts/mocks/MockERC721K.sol": {
        "ast": {
          "absolutePath": "contracts/mocks/MockERC721K.sol",
          "exportedSymbols": {
            "ERC721K": [
              2844
            ],
            "MockERC721K": [
              3811
            ]
          },
          "id": 3812,
          "license": "GPL-3.0",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3770,
              "literals": [
                "solidity",
                "0.8",
                ".15"
              ],
              "nodeType": "PragmaDirective",
              "src": "35:23:9"
            },
            {
              "absolutePath": "contracts/ERC721K.sol",
              "file": "../ERC721K.sol",
              "id": 3772,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3812,
              "sourceUnit": 2845,
              "src": "60:41:9",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3771,
                    "name": "ERC721K",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2844,
                    "src": "69:7:9",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3773,
                    "name": "ERC721K",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2844,
                    "src": "127:7:9"
                  },
                  "id": 3774,
                  "nodeType": "InheritanceSpecifier",
                  "src": "127:7:9"
                }
              ],
              "canonicalName": "MockERC721K",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 3811,
              "linearizedBaseContracts": [
                3811,
                2844,
                2638,
                3721
              ],
              "name": "MockERC721K",
              "nameLocation": "112:11:9",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3788,
                    "nodeType": "Block",
                    "src": "269:2:9",
                    "statements": []
                  },
                  "id": 3789,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 3783,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3776,
                          "src": "240:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "id": 3784,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3778,
                          "src": "246:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "id": 3785,
                          "name": "erc721Storage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3780,
                          "src": "254:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 3786,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 3782,
                        "name": "ERC721K",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2844,
                        "src": "232:7:9"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "232:36:9"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3781,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3776,
                        "mutability": "mutable",
                        "name": "name",
                        "nameLocation": "170:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 3789,
                        "src": "156:18:9",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3775,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "156:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3778,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nameLocation": "194:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 3789,
                        "src": "180:20:9",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3777,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "180:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3780,
                        "mutability": "mutable",
                        "name": "erc721Storage",
                        "nameLocation": "214:13:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 3789,
                        "src": "206:21:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3779,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "206:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "150:81:9"
                  },
                  "returnParameters": {
                    "id": 3787,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "269:0:9"
                  },
                  "scope": 3811,
                  "src": "139:132:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2773
                  ],
                  "body": {
                    "id": 3809,
                    "nodeType": "Block",
                    "src": "372:102:9",
                    "statements": [
                      {
                        "assignments": [
                          3800
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3800,
                            "mutability": "mutable",
                            "name": "imageBytes",
                            "nameLocation": "391:10:9",
                            "nodeType": "VariableDeclaration",
                            "scope": 3809,
                            "src": "378:23:9",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3799,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "378:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3801,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "378:23:9"
                      },
                      {
                        "assignments": [
                          3803
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3803,
                            "mutability": "mutable",
                            "name": "traitsBytes",
                            "nameLocation": "420:11:9",
                            "nodeType": "VariableDeclaration",
                            "scope": 3809,
                            "src": "407:24:9",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3802,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "407:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3804,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "407:24:9"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "id": 3805,
                              "name": "imageBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3800,
                              "src": "445:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 3806,
                              "name": "traitsBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3803,
                              "src": "457:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 3807,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "444:25:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bytes memory,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 3798,
                        "id": 3808,
                        "nodeType": "Return",
                        "src": "437:32:9"
                      }
                    ]
                  },
                  "id": 3810,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tokenData",
                  "nameLocation": "284:10:9",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3793,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "326:8:9"
                  },
                  "parameters": {
                    "id": 3792,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3791,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3810,
                        "src": "295:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3790,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "295:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "294:9:9"
                  },
                  "returnParameters": {
                    "id": 3798,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3795,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3810,
                        "src": "344:12:9",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3794,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "344:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3797,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3810,
                        "src": "358:12:9",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3796,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "358:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "343:28:9"
                  },
                  "scope": 3811,
                  "src": "275:199:9",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 3812,
              "src": "103:373:9",
              "usedErrors": [
                1085,
                1088,
                1091,
                3178,
                3180,
                3182,
                3184,
                3186,
                3188,
                3190
              ]
            }
          ],
          "src": "35:442:9"
        },
        "id": 9
      },
      "contracts/mocks/MockERC721Storage.sol": {
        "ast": {
          "absolutePath": "contracts/mocks/MockERC721Storage.sol",
          "exportedSymbols": {
            "ERC721Storage": [
              3147
            ],
            "MockERC721Storage": [
              3874
            ],
            "Strings": [
              174
            ]
          },
          "id": 3875,
          "license": "GPL-3.0",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3813,
              "literals": [
                "solidity",
                "0.8",
                ".15"
              ],
              "nodeType": "PragmaDirective",
              "src": "35:23:10"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
              "file": "@openzeppelin/contracts/utils/Strings.sol",
              "id": 3815,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3875,
              "sourceUnit": 175,
              "src": "60:68:10",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3814,
                    "name": "Strings",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 174,
                    "src": "69:7:10",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "contracts/ERC721Storage.sol",
              "file": "../ERC721Storage.sol",
              "id": 3817,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3875,
              "sourceUnit": 3148,
              "src": "129:53:10",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3816,
                    "name": "ERC721Storage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3147,
                    "src": "138:13:10",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3818,
                    "name": "ERC721Storage",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3147,
                    "src": "214:13:10"
                  },
                  "id": 3819,
                  "nodeType": "InheritanceSpecifier",
                  "src": "214:13:10"
                }
              ],
              "canonicalName": "MockERC721Storage",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 3874,
              "linearizedBaseContracts": [
                3874,
                3147,
                2638
              ],
              "name": "MockERC721Storage",
              "nameLocation": "193:17:10",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3834,
                    "nodeType": "Block",
                    "src": "395:2:10",
                    "statements": []
                  },
                  "id": 3835,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 3829,
                          "name": "_svgRender_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3821,
                          "src": "352:11:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 3830,
                          "name": "_traitsFetch_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3823,
                          "src": "365:13:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 3831,
                          "name": "_contractURI_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3826,
                          "src": "380:13:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                            "typeString": "struct ERC721Storage.ContractURI memory"
                          }
                        }
                      ],
                      "id": 3832,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 3828,
                        "name": "ERC721Storage",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 3147,
                        "src": "338:13:10"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "338:56:10"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3827,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3821,
                        "mutability": "mutable",
                        "name": "_svgRender_",
                        "nameLocation": "257:11:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 3835,
                        "src": "249:19:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3820,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "249:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3823,
                        "mutability": "mutable",
                        "name": "_traitsFetch_",
                        "nameLocation": "282:13:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 3835,
                        "src": "274:21:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3822,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "274:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3826,
                        "mutability": "mutable",
                        "name": "_contractURI_",
                        "nameLocation": "320:13:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 3835,
                        "src": "301:32:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ContractURI_$2877_memory_ptr",
                          "typeString": "struct ERC721Storage.ContractURI"
                        },
                        "typeName": {
                          "id": 3825,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 3824,
                            "name": "ContractURI",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2877,
                            "src": "301:11:10"
                          },
                          "referencedDeclaration": 2877,
                          "src": "301:11:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ContractURI_$2877_storage_ptr",
                            "typeString": "struct ERC721Storage.ContractURI"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "243:94:10"
                  },
                  "returnParameters": {
                    "id": 3833,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "395:0:10"
                  },
                  "scope": 3874,
                  "src": "232:165:10",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2927
                  ],
                  "body": {
                    "id": 3853,
                    "nodeType": "Block",
                    "src": "486:68:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "4e46542023",
                              "id": 3846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "513:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ced59f21625b6897a57b2eeb7821d625b97c7c05b34bbd66b713a22d6477d4c9",
                                "typeString": "literal_string \"NFT #\""
                              },
                              "value": "NFT #"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3849,
                                  "name": "_tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3837,
                                  "src": "539:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 3847,
                                  "name": "Strings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 174,
                                  "src": "522:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Strings_$174_$",
                                    "typeString": "type(library Strings)"
                                  }
                                },
                                "id": 3848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toString",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 57,
                                "src": "522:16:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                }
                              },
                              "id": 3850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "522:26:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_ced59f21625b6897a57b2eeb7821d625b97c7c05b34bbd66b713a22d6477d4c9",
                                "typeString": "literal_string \"NFT #\""
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 3844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "499:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 3843,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "499:6:10",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3845,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "concat",
                            "nodeType": "MemberAccess",
                            "src": "499:13:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () pure returns (string memory)"
                            }
                          },
                          "id": 3851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "499:50:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 3842,
                        "id": 3852,
                        "nodeType": "Return",
                        "src": "492:57:10"
                      }
                    ]
                  },
                  "id": 3854,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_parseName",
                  "nameLocation": "410:10:10",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3839,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "453:8:10"
                  },
                  "parameters": {
                    "id": 3838,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3837,
                        "mutability": "mutable",
                        "name": "_tokenId",
                        "nameLocation": "429:8:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 3854,
                        "src": "421:16:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3836,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "421:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "420:18:10"
                  },
                  "returnParameters": {
                    "id": 3842,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3841,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3854,
                        "src": "471:13:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3840,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "471:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "470:15:10"
                  },
                  "scope": 3874,
                  "src": "401:153:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2934
                  ],
                  "body": {
                    "id": 3872,
                    "nodeType": "Block",
                    "src": "650:75:10",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "4e4654204d656d6265722023",
                              "id": 3865,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "677:14:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_069451256e9c303da8ca9e1bc2b0169a5b7887e42aded86f386bd8602908e76a",
                                "typeString": "literal_string \"NFT Member #\""
                              },
                              "value": "NFT Member #"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3868,
                                  "name": "_tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3856,
                                  "src": "710:8:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 3866,
                                  "name": "Strings",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 174,
                                  "src": "693:7:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Strings_$174_$",
                                    "typeString": "type(library Strings)"
                                  }
                                },
                                "id": 3867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toString",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 57,
                                "src": "693:16:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                }
                              },
                              "id": 3869,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "693:26:10",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_069451256e9c303da8ca9e1bc2b0169a5b7887e42aded86f386bd8602908e76a",
                                "typeString": "literal_string \"NFT Member #\""
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 3863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "663:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 3862,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "663:6:10",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "concat",
                            "nodeType": "MemberAccess",
                            "src": "663:13:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () pure returns (string memory)"
                            }
                          },
                          "id": 3870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "663:57:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 3861,
                        "id": 3871,
                        "nodeType": "Return",
                        "src": "656:64:10"
                      }
                    ]
                  },
                  "id": 3873,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_parseDescription",
                  "nameLocation": "567:17:10",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3858,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "617:8:10"
                  },
                  "parameters": {
                    "id": 3857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3856,
                        "mutability": "mutable",
                        "name": "_tokenId",
                        "nameLocation": "593:8:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 3873,
                        "src": "585:16:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3855,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "585:7:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "584:18:10"
                  },
                  "returnParameters": {
                    "id": 3861,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3860,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3873,
                        "src": "635:13:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3859,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "635:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "634:15:10"
                  },
                  "scope": 3874,
                  "src": "558:167:10",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3875,
              "src": "184:543:10",
              "usedErrors": [
                1085,
                1088,
                1091
              ]
            }
          ],
          "src": "35:693:10"
        },
        "id": 10
      }
    }
  }
}
