{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "69": "node_modules/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol",
    "70": "node_modules/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol",
    "72": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
    "73": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"
  },
  "ast": {
    "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        16246
      ],
      "ERC1967UpgradeUpgradeable": [
        25978
      ],
      "IBeaconUpgradeable": [
        27579
      ],
      "IERC1822ProxiableUpgradeable": [
        25609
      ],
      "Initializable": [
        19544
      ],
      "StorageSlotUpgradeable": [
        27639
      ],
      "UUPSUpgradeable": [
        18011
      ]
    },
    "id": 18012,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17877,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "115:23:73"
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol",
        "file": "../../interfaces/draft-IERC1822Upgradeable.sol",
        "id": 17878,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18012,
        "sourceUnit": 25610,
        "src": "140:56:73",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol",
        "file": "../ERC1967/ERC1967UpgradeUpgradeable.sol",
        "id": 17879,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18012,
        "sourceUnit": 25979,
        "src": "197:50:73",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "file": "./Initializable.sol",
        "id": 17880,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 18012,
        "sourceUnit": 19545,
        "src": "248:29:73",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 17882,
              "name": "Initializable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19544,
              "src": "965:13:73"
            },
            "id": 17883,
            "nodeType": "InheritanceSpecifier",
            "src": "965:13:73"
          },
          {
            "baseName": {
              "id": 17884,
              "name": "IERC1822ProxiableUpgradeable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 25609,
              "src": "980:28:73"
            },
            "id": 17885,
            "nodeType": "InheritanceSpecifier",
            "src": "980:28:73"
          },
          {
            "baseName": {
              "id": 17886,
              "name": "ERC1967UpgradeUpgradeable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 25978,
              "src": "1010:25:73"
            },
            "id": 17887,
            "nodeType": "InheritanceSpecifier",
            "src": "1010:25:73"
          }
        ],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 17881,
          "nodeType": "StructuredDocumentation",
          "src": "279:648:73",
          "text": " @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n `UUPSUpgradeable` with a custom implementation of upgrades.\n The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n _Available since v4.1._"
        },
        "fullyImplemented": false,
        "id": 18011,
        "linearizedBaseContracts": [
          18011,
          25978,
          25609,
          19544
        ],
        "name": "UUPSUpgradeable",
        "nameLocation": "946:15:73",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17892,
              "nodeType": "Block",
              "src": "1102:7:73",
              "statements": []
            },
            "id": 17893,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 17890,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 17889,
                  "name": "onlyInitializing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19528,
                  "src": "1085:16:73"
                },
                "nodeType": "ModifierInvocation",
                "src": "1085:16:73"
              }
            ],
            "name": "__UUPSUpgradeable_init",
            "nameLocation": "1051:22:73",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1073:2:73"
            },
            "returnParameters": {
              "id": 17891,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1102:0:73"
            },
            "scope": 18011,
            "src": "1042:67:73",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 17898,
              "nodeType": "Block",
              "src": "1185:7:73",
              "statements": []
            },
            "id": 17899,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 17896,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 17895,
                  "name": "onlyInitializing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19528,
                  "src": "1168:16:73"
                },
                "nodeType": "ModifierInvocation",
                "src": "1168:16:73"
              }
            ],
            "name": "__UUPSUpgradeable_init_unchained",
            "nameLocation": "1124:32:73",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17894,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1156:2:73"
            },
            "returnParameters": {
              "id": 17897,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1185:0:73"
            },
            "scope": 18011,
            "src": "1115:77:73",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 17900,
              "nodeType": "StructuredDocumentation",
              "src": "1197:87:73",
              "text": "@custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment"
            },
            "id": 17906,
            "mutability": "immutable",
            "name": "__self",
            "nameLocation": "1315:6:73",
            "nodeType": "VariableDeclaration",
            "scope": 18011,
            "src": "1289:48:73",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 17901,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1289:7:73",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "id": 17904,
                  "name": "this",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": -28,
                  "src": "1332:4:73",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_UUPSUpgradeable_$18011",
                    "typeString": "contract UUPSUpgradeable"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_contract$_UUPSUpgradeable_$18011",
                    "typeString": "contract UUPSUpgradeable"
                  }
                ],
                "id": 17903,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1324:7:73",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 17902,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1324:7:73",
                  "typeDescriptions": {}
                }
              },
              "id": 17905,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1324:13:73",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 17928,
              "nodeType": "Block",
              "src": "1863:205:73",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 17912,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "1889:4:73",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_UUPSUpgradeable_$18011",
                                "typeString": "contract UUPSUpgradeable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_UUPSUpgradeable_$18011",
                                "typeString": "contract UUPSUpgradeable"
                              }
                            ],
                            "id": 17911,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1881:7:73",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17910,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1881:7:73",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 17913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1881:13:73",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 17914,
                          "name": "__self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17906,
                          "src": "1898:6:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1881:23:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682064656c656761746563616c6c",
                        "id": 17916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1906:46:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36e108fa7a809b52ab1951dd91c117a7bc9ac5250bdf1aa162d4e104f7edf9eb",
                          "typeString": "literal_string \"Function must be called through delegatecall\""
                        },
                        "value": "Function must be called through delegatecall"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36e108fa7a809b52ab1951dd91c117a7bc9ac5250bdf1aa162d4e104f7edf9eb",
                          "typeString": "literal_string \"Function must be called through delegatecall\""
                        }
                      ],
                      "id": 17909,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1873:7:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1873:80:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17918,
                  "nodeType": "ExpressionStatement",
                  "src": "1873:80:73"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17920,
                            "name": "_getImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25656,
                            "src": "1971:18:73",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 17921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1971:20:73",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 17922,
                          "name": "__self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17906,
                          "src": "1995:6:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1971:30:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "46756e6374696f6e206d7573742062652063616c6c6564207468726f756768206163746976652070726f7879",
                        "id": 17924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2003:46:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_52f1ead4d9653e13afbd2e90ef2587c30187cd50b2e97d784e3f7a7541247434",
                          "typeString": "literal_string \"Function must be called through active proxy\""
                        },
                        "value": "Function must be called through active proxy"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_52f1ead4d9653e13afbd2e90ef2587c30187cd50b2e97d784e3f7a7541247434",
                          "typeString": "literal_string \"Function must be called through active proxy\""
                        }
                      ],
                      "id": 17919,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1963:7:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1963:87:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17926,
                  "nodeType": "ExpressionStatement",
                  "src": "1963:87:73"
                },
                {
                  "id": 17927,
                  "nodeType": "PlaceholderStatement",
                  "src": "2060:1:73"
                }
              ]
            },
            "documentation": {
              "id": 17907,
              "nodeType": "StructuredDocumentation",
              "src": "1344:493:73",
              "text": " @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n fail."
            },
            "id": 17929,
            "name": "onlyProxy",
            "nameLocation": "1851:9:73",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 17908,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1860:2:73"
            },
            "src": "1842:226:73",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 17943,
              "nodeType": "Block",
              "src": "2298:120:73",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17938,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 17935,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "2324:4:73",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_UUPSUpgradeable_$18011",
                                "typeString": "contract UUPSUpgradeable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_UUPSUpgradeable_$18011",
                                "typeString": "contract UUPSUpgradeable"
                              }
                            ],
                            "id": 17934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2316:7:73",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17933,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2316:7:73",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 17936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2316:13:73",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 17937,
                          "name": "__self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17906,
                          "src": "2333:6:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2316:23:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "555550535570677261646561626c653a206d757374206e6f742062652063616c6c6564207468726f7567682064656c656761746563616c6c",
                        "id": 17939,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2341:58:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_67f0151b4ad1dcfa0e3302a0cd6019f51582ef1807b37dceb00bd852a514f7f4",
                          "typeString": "literal_string \"UUPSUpgradeable: must not be called through delegatecall\""
                        },
                        "value": "UUPSUpgradeable: must not be called through delegatecall"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_67f0151b4ad1dcfa0e3302a0cd6019f51582ef1807b37dceb00bd852a514f7f4",
                          "typeString": "literal_string \"UUPSUpgradeable: must not be called through delegatecall\""
                        }
                      ],
                      "id": 17932,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2308:7:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2308:92:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17941,
                  "nodeType": "ExpressionStatement",
                  "src": "2308:92:73"
                },
                {
                  "id": 17942,
                  "nodeType": "PlaceholderStatement",
                  "src": "2410:1:73"
                }
              ]
            },
            "documentation": {
              "id": 17930,
              "nodeType": "StructuredDocumentation",
              "src": "2074:195:73",
              "text": " @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n callable on the implementing contract but not through proxies."
            },
            "id": 17944,
            "name": "notDelegated",
            "nameLocation": "2283:12:73",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 17931,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2295:2:73"
            },
            "src": "2274:144:73",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              25608
            ],
            "body": {
              "id": 17955,
              "nodeType": "Block",
              "src": "3091:44:73",
              "statements": [
                {
                  "expression": {
                    "id": 17953,
                    "name": "_IMPLEMENTATION_SLOT",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 25638,
                    "src": "3108:20:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 17952,
                  "id": 17954,
                  "nodeType": "Return",
                  "src": "3101:27:73"
                }
              ]
            },
            "documentation": {
              "id": 17945,
              "nodeType": "StructuredDocumentation",
              "src": "2424:575:73",
              "text": " @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n implementation. It is used to validate that the this implementation remains valid after an upgrade.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
            },
            "functionSelector": "52d1902d",
            "id": 17956,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 17949,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 17948,
                  "name": "notDelegated",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17944,
                  "src": "3060:12:73"
                },
                "nodeType": "ModifierInvocation",
                "src": "3060:12:73"
              }
            ],
            "name": "proxiableUUID",
            "nameLocation": "3013:13:73",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17947,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3051:8:73"
            },
            "parameters": {
              "id": 17946,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3026:2:73"
            },
            "returnParameters": {
              "id": 17952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17951,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 17956,
                  "src": "3082:7:73",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17950,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3082:7:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3081:9:73"
            },
            "scope": 18011,
            "src": "3004:131:73",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17977,
              "nodeType": "Block",
              "src": "3388:124:73",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 17965,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17959,
                        "src": "3416:17:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17964,
                      "name": "_authorizeUpgrade",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18005,
                      "src": "3398:17:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 17966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3398:36:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17967,
                  "nodeType": "ExpressionStatement",
                  "src": "3398:36:73"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 17969,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17959,
                        "src": "3466:17:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 17972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3495:1:73",
                            "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": 17971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "3485:9:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (uint256) pure returns (bytes memory)"
                          },
                          "typeName": {
                            "id": 17970,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "3489:5:73",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          }
                        },
                        "id": 17973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3485:12:73",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 17974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3499:5:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 17968,
                      "name": "_upgradeToAndCallUUPS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25776,
                      "src": "3444:21:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,bytes memory,bool)"
                      }
                    },
                    "id": 17975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3444:61:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17976,
                  "nodeType": "ExpressionStatement",
                  "src": "3444:61:73"
                }
              ]
            },
            "documentation": {
              "id": 17957,
              "nodeType": "StructuredDocumentation",
              "src": "3141:169:73",
              "text": " @dev Upgrade the implementation of the proxy to `newImplementation`.\n Calls {_authorizeUpgrade}.\n Emits an {Upgraded} event."
            },
            "functionSelector": "3659cfe6",
            "id": 17978,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 17962,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 17961,
                  "name": "onlyProxy",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17929,
                  "src": "3378:9:73"
                },
                "nodeType": "ModifierInvocation",
                "src": "3378:9:73"
              }
            ],
            "name": "upgradeTo",
            "nameLocation": "3324:9:73",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17959,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "3342:17:73",
                  "nodeType": "VariableDeclaration",
                  "scope": 17978,
                  "src": "3334:25:73",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17958,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3334:7:73",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3333:27:73"
            },
            "returnParameters": {
              "id": 17963,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3388:0:73"
            },
            "scope": 18011,
            "src": "3315:197:73",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17998,
              "nodeType": "Block",
              "src": "3868:115:73",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 17989,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17981,
                        "src": "3896:17:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17988,
                      "name": "_authorizeUpgrade",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18005,
                      "src": "3878:17:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 17990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3878:36:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17991,
                  "nodeType": "ExpressionStatement",
                  "src": "3878:36:73"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 17993,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17981,
                        "src": "3946:17:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 17994,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17983,
                        "src": "3965:4:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 17995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3971:4:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 17992,
                      "name": "_upgradeToAndCallUUPS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25776,
                      "src": "3924:21:73",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,bytes memory,bool)"
                      }
                    },
                    "id": 17996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3924:52:73",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17997,
                  "nodeType": "ExpressionStatement",
                  "src": "3924:52:73"
                }
              ]
            },
            "documentation": {
              "id": 17979,
              "nodeType": "StructuredDocumentation",
              "src": "3518:238:73",
              "text": " @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n encoded in `data`.\n Calls {_authorizeUpgrade}.\n Emits an {Upgraded} event."
            },
            "functionSelector": "4f1ef286",
            "id": 17999,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 17986,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 17985,
                  "name": "onlyProxy",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 17929,
                  "src": "3858:9:73"
                },
                "nodeType": "ModifierInvocation",
                "src": "3858:9:73"
              }
            ],
            "name": "upgradeToAndCall",
            "nameLocation": "3770:16:73",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17984,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17981,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "3795:17:73",
                  "nodeType": "VariableDeclaration",
                  "scope": 17999,
                  "src": "3787:25:73",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3787:7:73",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17983,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "3827:4:73",
                  "nodeType": "VariableDeclaration",
                  "scope": 17999,
                  "src": "3814:17:73",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 17982,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3814:5:73",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3786:46:73"
            },
            "returnParameters": {
              "id": 17987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3868:0:73"
            },
            "scope": 18011,
            "src": "3761:222:73",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 18000,
              "nodeType": "StructuredDocumentation",
              "src": "3989:397:73",
              "text": " @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n {upgradeTo} and {upgradeToAndCall}.\n Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n ```solidity\n function _authorizeUpgrade(address) internal override onlyOwner {}\n ```"
            },
            "id": 18005,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "_authorizeUpgrade",
            "nameLocation": "4400:17:73",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18002,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "4426:17:73",
                  "nodeType": "VariableDeclaration",
                  "scope": 18005,
                  "src": "4418:25:73",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4418:7:73",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4417:27:73"
            },
            "returnParameters": {
              "id": 18004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4461:0:73"
            },
            "scope": 18011,
            "src": "4391:71:73",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 18006,
              "nodeType": "StructuredDocumentation",
              "src": "4468:254:73",
              "text": " @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"
            },
            "id": 18010,
            "mutability": "mutable",
            "name": "__gap",
            "nameLocation": "4747:5:73",
            "nodeType": "VariableDeclaration",
            "scope": 18011,
            "src": "4727:25:73",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$50_storage",
              "typeString": "uint256[50]"
            },
            "typeName": {
              "baseType": {
                "id": 18007,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4727:7:73",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 18009,
              "length": {
                "hexValue": "3530",
                "id": 18008,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4735:2:73",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_50_by_1",
                  "typeString": "int_const 50"
                },
                "value": "50"
              },
              "nodeType": "ArrayTypeName",
              "src": "4727:11:73",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr",
                "typeString": "uint256[50]"
              }
            },
            "visibility": "private"
          }
        ],
        "scope": 18012,
        "src": "928:3827:73",
        "usedErrors": []
      }
    ],
    "src": "115:4641:73"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "UUPSUpgradeable",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "ERC1967UpgradeUpgradeable",
    "IERC1822ProxiableUpgradeable",
    "Initializable"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "details": "An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. _Available since v4.1._",
    "kind": "dev",
    "methods": {
      "proxiableUUID()": {
        "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
      },
      "upgradeTo(address)": {
        "details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
      },
      "upgradeToAndCall(address,bytes)": {
        "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
      }
    },
    "stateVariables": {
      "__gap": {
        "details": "This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"
      },
      "__self": {
        "custom:oz-upgrades-unsafe-allow": "state-variable-immutable state-variable-assignment"
      }
    },
    "version": 1
  },
  "offset": [
    928,
    4755
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "575356462b9b43ea60030ce6d6c4037c9bcb2feb",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822Upgradeable.sol\";\nimport \"../ERC1967/ERC1967UpgradeUpgradeable.sol\";\nimport \"./Initializable.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable {\n    function __UUPSUpgradeable_init() internal onlyInitializing {\n    }\n\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\n    }\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n    address private immutable __self = address(this);\n\n    /**\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n     * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n     * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n     * fail.\n     */\n    modifier onlyProxy() {\n        require(address(this) != __self, \"Function must be called through delegatecall\");\n        require(_getImplementation() == __self, \"Function must be called through active proxy\");\n        _;\n    }\n\n    /**\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n     * callable on the implementing contract but not through proxies.\n     */\n    modifier notDelegated() {\n        require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n        _;\n    }\n\n    /**\n     * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n     * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n     */\n    function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n        return _IMPLEMENTATION_SLOT;\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy to `newImplementation`.\n     *\n     * Calls {_authorizeUpgrade}.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function upgradeTo(address newImplementation) external virtual onlyProxy {\n        _authorizeUpgrade(newImplementation);\n        _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n     * encoded in `data`.\n     *\n     * Calls {_authorizeUpgrade}.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n        _authorizeUpgrade(newImplementation);\n        _upgradeToAndCallUUPS(newImplementation, data, true);\n    }\n\n    /**\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n     * {upgradeTo} and {upgradeToAndCall}.\n     *\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n     *\n     * ```solidity\n     * function _authorizeUpgrade(address) internal override onlyOwner {}\n     * ```\n     */\n    function _authorizeUpgrade(address newImplementation) internal virtual;\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[50] private __gap;\n}\n",
  "sourceMap": "",
  "sourcePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
  "type": "contract"
}