{
  "abi": [],
  "allSourcePaths": {
    "106": "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol"
  },
  "ast": {
    "absolutePath": "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol",
    "exportedSymbols": {
      "StorageSlot": [
        27719
      ]
    },
    "id": 27720,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 27661,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "90:23:106"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 27662,
          "nodeType": "StructuredDocumentation",
          "src": "115:1148:106",
          "text": " @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```\n contract ERC1967 {\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._"
        },
        "fullyImplemented": true,
        "id": 27719,
        "linearizedBaseContracts": [
          27719
        ],
        "name": "StorageSlot",
        "nameLocation": "1272:11:106",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "StorageSlot.AddressSlot",
            "id": 27665,
            "members": [
              {
                "constant": false,
                "id": 27664,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1327:5:106",
                "nodeType": "VariableDeclaration",
                "scope": 27665,
                "src": "1319:13:106",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 27663,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1319:7:106",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "AddressSlot",
            "nameLocation": "1297:11:106",
            "nodeType": "StructDefinition",
            "scope": 27719,
            "src": "1290:49:106",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageSlot.BooleanSlot",
            "id": 27668,
            "members": [
              {
                "constant": false,
                "id": 27667,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1379:5:106",
                "nodeType": "VariableDeclaration",
                "scope": 27668,
                "src": "1374:10:106",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 27666,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1374:4:106",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "BooleanSlot",
            "nameLocation": "1352:11:106",
            "nodeType": "StructDefinition",
            "scope": 27719,
            "src": "1345:46:106",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageSlot.Bytes32Slot",
            "id": 27671,
            "members": [
              {
                "constant": false,
                "id": 27670,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1434:5:106",
                "nodeType": "VariableDeclaration",
                "scope": 27671,
                "src": "1426:13:106",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 27669,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1426:7:106",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Bytes32Slot",
            "nameLocation": "1404:11:106",
            "nodeType": "StructDefinition",
            "scope": 27719,
            "src": "1397:49:106",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageSlot.Uint256Slot",
            "id": 27674,
            "members": [
              {
                "constant": false,
                "id": 27673,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1489:5:106",
                "nodeType": "VariableDeclaration",
                "scope": 27674,
                "src": "1481:13:106",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 27672,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1481:7:106",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Uint256Slot",
            "nameLocation": "1459:11:106",
            "nodeType": "StructDefinition",
            "scope": 27719,
            "src": "1452:49:106",
            "visibility": "public"
          },
          {
            "body": {
              "id": 27684,
              "nodeType": "Block",
              "src": "1683:63:106",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1702:38:106",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1716:14:106",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "1726:4:106"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "1716:6:106"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27681,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "1716:6:106",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27677,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1726:4:106",
                      "valueSize": 1
                    }
                  ],
                  "id": 27683,
                  "nodeType": "InlineAssembly",
                  "src": "1693:47:106"
                }
              ]
            },
            "documentation": {
              "id": 27675,
              "nodeType": "StructuredDocumentation",
              "src": "1507:87:106",
              "text": " @dev Returns an `AddressSlot` with member `value` located at `slot`."
            },
            "id": 27685,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddressSlot",
            "nameLocation": "1608:14:106",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27678,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27677,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "1631:4:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27685,
                  "src": "1623:12:106",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27676,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1623:7:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1622:14:106"
            },
            "returnParameters": {
              "id": 27682,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27681,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1680:1:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27685,
                  "src": "1660:21:106",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                    "typeString": "struct StorageSlot.AddressSlot"
                  },
                  "typeName": {
                    "id": 27680,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27679,
                      "name": "AddressSlot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27665,
                      "src": "1660:11:106"
                    },
                    "referencedDeclaration": 27665,
                    "src": "1660:11:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                      "typeString": "struct StorageSlot.AddressSlot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1659:23:106"
            },
            "scope": 27719,
            "src": "1599:147:106",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27695,
              "nodeType": "Block",
              "src": "1928:63:106",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1947:38:106",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1961:14:106",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "1971:4:106"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "1961:6:106"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27692,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "1961:6:106",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27688,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1971:4:106",
                      "valueSize": 1
                    }
                  ],
                  "id": 27694,
                  "nodeType": "InlineAssembly",
                  "src": "1938:47:106"
                }
              ]
            },
            "documentation": {
              "id": 27686,
              "nodeType": "StructuredDocumentation",
              "src": "1752:87:106",
              "text": " @dev Returns an `BooleanSlot` with member `value` located at `slot`."
            },
            "id": 27696,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBooleanSlot",
            "nameLocation": "1853:14:106",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27688,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "1876:4:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27696,
                  "src": "1868:12:106",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27687,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1868:7:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1867:14:106"
            },
            "returnParameters": {
              "id": 27693,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27692,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1925:1:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27696,
                  "src": "1905:21:106",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_BooleanSlot_$27668_storage_ptr",
                    "typeString": "struct StorageSlot.BooleanSlot"
                  },
                  "typeName": {
                    "id": 27691,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27690,
                      "name": "BooleanSlot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27668,
                      "src": "1905:11:106"
                    },
                    "referencedDeclaration": 27668,
                    "src": "1905:11:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BooleanSlot_$27668_storage_ptr",
                      "typeString": "struct StorageSlot.BooleanSlot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1904:23:106"
            },
            "scope": 27719,
            "src": "1844:147:106",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27706,
              "nodeType": "Block",
              "src": "2173:63:106",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2192:38:106",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2206:14:106",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "2216:4:106"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "2206:6:106"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27703,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "2206:6:106",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27699,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2216:4:106",
                      "valueSize": 1
                    }
                  ],
                  "id": 27705,
                  "nodeType": "InlineAssembly",
                  "src": "2183:47:106"
                }
              ]
            },
            "documentation": {
              "id": 27697,
              "nodeType": "StructuredDocumentation",
              "src": "1997:87:106",
              "text": " @dev Returns an `Bytes32Slot` with member `value` located at `slot`."
            },
            "id": 27707,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBytes32Slot",
            "nameLocation": "2098:14:106",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27699,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "2121:4:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27707,
                  "src": "2113:12:106",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27698,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2113:7:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2112:14:106"
            },
            "returnParameters": {
              "id": 27704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27703,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "2170:1:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27707,
                  "src": "2150:21:106",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Bytes32Slot_$27671_storage_ptr",
                    "typeString": "struct StorageSlot.Bytes32Slot"
                  },
                  "typeName": {
                    "id": 27702,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27701,
                      "name": "Bytes32Slot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27671,
                      "src": "2150:11:106"
                    },
                    "referencedDeclaration": 27671,
                    "src": "2150:11:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bytes32Slot_$27671_storage_ptr",
                      "typeString": "struct StorageSlot.Bytes32Slot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2149:23:106"
            },
            "scope": 27719,
            "src": "2089:147:106",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27717,
              "nodeType": "Block",
              "src": "2418:63:106",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2437:38:106",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2451:14:106",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "2461:4:106"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "2451:6:106"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 27714,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "2451:6:106",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 27710,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2461:4:106",
                      "valueSize": 1
                    }
                  ],
                  "id": 27716,
                  "nodeType": "InlineAssembly",
                  "src": "2428:47:106"
                }
              ]
            },
            "documentation": {
              "id": 27708,
              "nodeType": "StructuredDocumentation",
              "src": "2242:87:106",
              "text": " @dev Returns an `Uint256Slot` with member `value` located at `slot`."
            },
            "id": 27718,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getUint256Slot",
            "nameLocation": "2343:14:106",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27710,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "2366:4:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27718,
                  "src": "2358:12:106",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 27709,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2358:7:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2357:14:106"
            },
            "returnParameters": {
              "id": 27715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27714,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "2415:1:106",
                  "nodeType": "VariableDeclaration",
                  "scope": 27718,
                  "src": "2395:21:106",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Uint256Slot_$27674_storage_ptr",
                    "typeString": "struct StorageSlot.Uint256Slot"
                  },
                  "typeName": {
                    "id": 27713,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 27712,
                      "name": "Uint256Slot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 27674,
                      "src": "2395:11:106"
                    },
                    "referencedDeclaration": 27674,
                    "src": "2395:11:106",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Uint256Slot_$27674_storage_ptr",
                      "typeString": "struct StorageSlot.Uint256Slot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2394:23:106"
            },
            "scope": 27719,
            "src": "2334:147:106",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 27720,
        "src": "1264:1219:106",
        "usedErrors": []
      }
    ],
    "src": "90:2394:106"
  },
  "bytecode": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208d2f752c01a5142332de933c4d8fb8e9f4d30d92f2e9c8b6f6e69d6f2af0b3cc64736f6c63430008060033",
  "bytecodeSha1": "1ce946f6a4eaa185320328620ccf999b9e86db7c",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "StorageSlot",
  "coverageMap": {
    "branches": {
      "106": {}
    },
    "statements": {
      "106": {}
    }
  },
  "dependencies": [],
  "deployedBytecode": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208d2f752c01a5142332de933c4d8fb8e9f4d30d92f2e9c8b6f6e69d6f2af0b3cc64736f6c63430008060033",
  "deployedSourceMap": "1264:1219:106:-:0;;;;;;;;",
  "language": "Solidity",
  "natspec": {
    "details": "Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._",
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "offset": [
    1264,
    2483
  ],
  "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0x2F PUSH22 0x2C01A5142332DE933C4D8FB8E9F4D30D92F2E9C8B6F6 0xE6 SWAP14 PUSH16 0x2AF0B3CC64736F6C6343000806003300 ",
  "pcMap": {
    "0": {
      "offset": [
        1264,
        2483
      ],
      "op": "PUSH20",
      "path": "106",
      "value": "0x0"
    },
    "21": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "ADDRESS",
      "path": "106"
    },
    "22": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "EQ",
      "path": "106"
    },
    "23": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "PUSH1",
      "path": "106",
      "value": "0x80"
    },
    "25": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "PUSH1",
      "path": "106",
      "value": "0x40"
    },
    "27": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "MSTORE",
      "path": "106"
    },
    "28": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "PUSH1",
      "path": "106",
      "value": "0x0"
    },
    "30": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "DUP1",
      "path": "106"
    },
    "31": {
      "fn": null,
      "offset": [
        1264,
        2483
      ],
      "op": "REVERT",
      "path": "106"
    }
  },
  "sha1": "e511ab0fd7f7fed0a2397b769fea436270a99db2",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        assembly {\n            r.slot := slot\n        }\n    }\n}\n",
  "sourceMap": "1264:1219:106:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1264:1219:106;;;;;;;;;;;;;;;;;",
  "sourcePath": "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol",
  "type": "library"
}