{
  "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"
    }
  ],
  "allSourcePaths": {
    "104": "node_modules/@openzeppelin/contracts/utils/Address.sol",
    "106": "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol",
    "91": "node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol",
    "93": "node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
    "95": "node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol"
  },
  "ast": {
    "absolutePath": "node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
    "exportedSymbols": {
      "Address": [
        24344
      ],
      "ERC1967Upgrade": [
        27109
      ],
      "IBeacon": [
        27659
      ],
      "IERC1822Proxiable": [
        27649
      ],
      "StorageSlot": [
        27719
      ]
    },
    "id": 27110,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 26793,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "116:23:93"
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol",
        "file": "../beacon/IBeacon.sol",
        "id": 26794,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27110,
        "sourceUnit": 27660,
        "src": "141:31:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol",
        "file": "../../interfaces/draft-IERC1822.sol",
        "id": 26795,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27110,
        "sourceUnit": 27650,
        "src": "173:45:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/utils/Address.sol",
        "file": "../../utils/Address.sol",
        "id": 26796,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27110,
        "sourceUnit": 24345,
        "src": "219:33:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/utils/StorageSlot.sol",
        "file": "../../utils/StorageSlot.sol",
        "id": 26797,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27110,
        "sourceUnit": 27720,
        "src": "253:37:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 26798,
          "nodeType": "StructuredDocumentation",
          "src": "292:236:93",
          "text": " @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"
        },
        "fullyImplemented": true,
        "id": 27109,
        "linearizedBaseContracts": [
          27109
        ],
        "name": "ERC1967Upgrade",
        "nameLocation": "547:14:93",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 26801,
            "mutability": "constant",
            "name": "_ROLLBACK_SLOT",
            "nameLocation": "672:14:93",
            "nodeType": "VariableDeclaration",
            "scope": 27109,
            "src": "647:108:93",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26799,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "647:7:93",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433",
              "id": 26800,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "689:66:93",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1",
                "typeString": "int_const 3304...(69 digits omitted)...9347"
              },
              "value": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 26802,
              "nodeType": "StructuredDocumentation",
              "src": "762:214:93",
              "text": " @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."
            },
            "id": 26805,
            "mutability": "constant",
            "name": "_IMPLEMENTATION_SLOT",
            "nameLocation": "1007:20:93",
            "nodeType": "VariableDeclaration",
            "scope": 27109,
            "src": "981:115:93",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26803,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "981:7:93",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263",
              "id": 26804,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1030:66:93",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1",
                "typeString": "int_const 2444...(69 digits omitted)...5612"
              },
              "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 26806,
              "nodeType": "StructuredDocumentation",
              "src": "1103:68:93",
              "text": " @dev Emitted when the implementation is upgraded."
            },
            "id": 26810,
            "name": "Upgraded",
            "nameLocation": "1182:8:93",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 26809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26808,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "1207:14:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26810,
                  "src": "1191:30:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26807,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1191:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1190:32:93"
            },
            "src": "1176:47:93"
          },
          {
            "body": {
              "id": 26822,
              "nodeType": "Block",
              "src": "1363:78:93",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 26818,
                          "name": "_IMPLEMENTATION_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26805,
                          "src": "1407:20:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 26816,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27719,
                          "src": "1380:11:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 26817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27685,
                        "src": "1380:26:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27665_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                        }
                      },
                      "id": 26819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1380:48:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                        "typeString": "struct StorageSlot.AddressSlot storage pointer"
                      }
                    },
                    "id": 26820,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27664,
                    "src": "1380:54:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 26815,
                  "id": 26821,
                  "nodeType": "Return",
                  "src": "1373:61:93"
                }
              ]
            },
            "documentation": {
              "id": 26811,
              "nodeType": "StructuredDocumentation",
              "src": "1229:67:93",
              "text": " @dev Returns the current implementation address."
            },
            "id": 26823,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getImplementation",
            "nameLocation": "1310:18:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26812,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1328:2:93"
            },
            "returnParameters": {
              "id": 26815,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26814,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 26823,
                  "src": "1354:7:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26813,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1353:9:93"
            },
            "scope": 27109,
            "src": "1301:140:93",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 26846,
              "nodeType": "Block",
              "src": "1595:196:93",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 26832,
                            "name": "newImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26826,
                            "src": "1632:17:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 26830,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24344,
                            "src": "1613:7:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$24344_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 26831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24067,
                          "src": "1613:18:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 26833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1613:37:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374",
                        "id": 26834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1652:47:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65",
                          "typeString": "literal_string \"ERC1967: new implementation is not a contract\""
                        },
                        "value": "ERC1967: new implementation is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65",
                          "typeString": "literal_string \"ERC1967: new implementation is not a contract\""
                        }
                      ],
                      "id": 26829,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1605:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1605:95:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26836,
                  "nodeType": "ExpressionStatement",
                  "src": "1605:95:93"
                },
                {
                  "expression": {
                    "id": 26844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 26840,
                            "name": "_IMPLEMENTATION_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26805,
                            "src": "1737:20:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 26837,
                            "name": "StorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27719,
                            "src": "1710:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                              "typeString": "type(library StorageSlot)"
                            }
                          },
                          "id": 26839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27685,
                          "src": "1710:26:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27665_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                          }
                        },
                        "id": 26841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1710:48:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot storage pointer"
                        }
                      },
                      "id": 26842,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27664,
                      "src": "1710:54:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26843,
                      "name": "newImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26826,
                      "src": "1767:17:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1710:74:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 26845,
                  "nodeType": "ExpressionStatement",
                  "src": "1710:74:93"
                }
              ]
            },
            "documentation": {
              "id": 26824,
              "nodeType": "StructuredDocumentation",
              "src": "1447:80:93",
              "text": " @dev Stores a new address in the EIP1967 implementation slot."
            },
            "id": 26847,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setImplementation",
            "nameLocation": "1541:18:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26826,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "1568:17:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26847,
                  "src": "1560:25:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26825,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1560:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1559:27:93"
            },
            "returnParameters": {
              "id": 26828,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1595:0:93"
            },
            "scope": 27109,
            "src": "1532:259:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 26861,
              "nodeType": "Block",
              "src": "1953:96:93",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26854,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26850,
                        "src": "1982:17:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26853,
                      "name": "_setImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26847,
                      "src": "1963:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1963:37:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26856,
                  "nodeType": "ExpressionStatement",
                  "src": "1963:37:93"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26858,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26850,
                        "src": "2024:17:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26857,
                      "name": "Upgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26810,
                      "src": "2015:8:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2015:27:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26860,
                  "nodeType": "EmitStatement",
                  "src": "2010:32:93"
                }
              ]
            },
            "documentation": {
              "id": 26848,
              "nodeType": "StructuredDocumentation",
              "src": "1797:95:93",
              "text": " @dev Perform implementation upgrade\n Emits an {Upgraded} event."
            },
            "id": 26862,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeTo",
            "nameLocation": "1906:10:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26850,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "1925:17:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26862,
                  "src": "1917:25:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26849,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1916:27:93"
            },
            "returnParameters": {
              "id": 26852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1953:0:93"
            },
            "scope": 27109,
            "src": "1897:152:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 26891,
              "nodeType": "Block",
              "src": "2311:167:93",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26873,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26865,
                        "src": "2332:17:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26872,
                      "name": "_upgradeTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26862,
                      "src": "2321:10:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2321:29:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26875,
                  "nodeType": "ExpressionStatement",
                  "src": "2321:29:93"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 26881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 26879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 26876,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26867,
                          "src": "2364:4:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 26877,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2364:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 26878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2378:1:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2364:15:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "id": 26880,
                      "name": "forceCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26869,
                      "src": "2383:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2364:28:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26890,
                  "nodeType": "IfStatement",
                  "src": "2360:112:93",
                  "trueBody": {
                    "id": 26889,
                    "nodeType": "Block",
                    "src": "2394:78:93",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 26885,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26865,
                              "src": "2437:17:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 26886,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26867,
                              "src": "2456:4:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 26882,
                              "name": "Address",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24344,
                              "src": "2408:7:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Address_$24344_$",
                                "typeString": "type(library Address)"
                              }
                            },
                            "id": 26884,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionDelegateCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24277,
                            "src": "2408:28:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 26887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2408:53:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 26888,
                        "nodeType": "ExpressionStatement",
                        "src": "2408:53:93"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 26863,
              "nodeType": "StructuredDocumentation",
              "src": "2055:123:93",
              "text": " @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."
            },
            "id": 26892,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeToAndCall",
            "nameLocation": "2192:17:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26865,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2227:17:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26892,
                  "src": "2219:25:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26864,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2219:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26867,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2267:4:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26892,
                  "src": "2254:17:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26866,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2254:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26869,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "2286:9:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26892,
                  "src": "2281:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26868,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2281:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2209:92:93"
            },
            "returnParameters": {
              "id": 26871,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2311:0:93"
            },
            "scope": 27109,
            "src": "2183:295:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 26944,
              "nodeType": "Block",
              "src": "2782:820:93",
              "statements": [
                {
                  "condition": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 26904,
                          "name": "_ROLLBACK_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26801,
                          "src": "3123:14:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 26902,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27719,
                          "src": "3096:11:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 26903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getBooleanSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27696,
                        "src": "3096:26:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$27668_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"
                        }
                      },
                      "id": 26905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3096:42:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BooleanSlot_$27668_storage_ptr",
                        "typeString": "struct StorageSlot.BooleanSlot storage pointer"
                      }
                    },
                    "id": 26906,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27667,
                    "src": "3096:48:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 26942,
                    "nodeType": "Block",
                    "src": "3214:382:93",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 26927,
                              "nodeType": "Block",
                              "src": "3308:115:93",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 26923,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 26921,
                                          "name": "slot",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 26918,
                                          "src": "3334:4:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "id": 26922,
                                          "name": "_IMPLEMENTATION_SLOT",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 26805,
                                          "src": "3342:20:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "3334:28:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      {
                                        "hexValue": "45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944",
                                        "id": 26924,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3364:43:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c",
                                          "typeString": "literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""
                                        },
                                        "value": "ERC1967Upgrade: unsupported proxiableUUID"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c",
                                          "typeString": "literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""
                                        }
                                      ],
                                      "id": 26920,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "src": "3326:7:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (bool,string memory) pure"
                                      }
                                    },
                                    "id": 26925,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3326:82:93",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 26926,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3326:82:93"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 26928,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 26919,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 26918,
                                  "mutability": "mutable",
                                  "name": "slot",
                                  "nameLocation": "3302:4:93",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 26928,
                                  "src": "3294:12:93",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 26917,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3294:7:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3293:14:93"
                            },
                            "src": "3285:138:93"
                          },
                          {
                            "block": {
                              "id": 26933,
                              "nodeType": "Block",
                              "src": "3430:89:93",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "hexValue": "45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053",
                                        "id": 26930,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3455:48:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24",
                                          "typeString": "literal_string \"ERC1967Upgrade: new implementation is not UUPS\""
                                        },
                                        "value": "ERC1967Upgrade: new implementation is not UUPS"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24",
                                          "typeString": "literal_string \"ERC1967Upgrade: new implementation is not UUPS\""
                                        }
                                      ],
                                      "id": 26929,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "3448:6:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 26931,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3448:56:93",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 26932,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3448:56:93"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 26934,
                            "nodeType": "TryCatchClause",
                            "src": "3424:95:93"
                          }
                        ],
                        "externalCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 26913,
                                  "name": "newImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 26895,
                                  "src": "3250:17:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 26912,
                                "name": "IERC1822Proxiable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27649,
                                "src": "3232:17:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1822Proxiable_$27649_$",
                                  "typeString": "type(contract IERC1822Proxiable)"
                                }
                              },
                              "id": 26914,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3232:36:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1822Proxiable_$27649",
                                "typeString": "contract IERC1822Proxiable"
                              }
                            },
                            "id": 26915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "proxiableUUID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27648,
                            "src": "3232:50:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                              "typeString": "function () view external returns (bytes32)"
                            }
                          },
                          "id": 26916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3232:52:93",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 26935,
                        "nodeType": "TryStatement",
                        "src": "3228:291:93"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 26937,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26895,
                              "src": "3550:17:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 26938,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26897,
                              "src": "3569:4:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 26939,
                              "name": "forceCall",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26899,
                              "src": "3575:9:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 26936,
                            "name": "_upgradeToAndCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26892,
                            "src": "3532:17:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                              "typeString": "function (address,bytes memory,bool)"
                            }
                          },
                          "id": 26940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3532:53:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 26941,
                        "nodeType": "ExpressionStatement",
                        "src": "3532:53:93"
                      }
                    ]
                  },
                  "id": 26943,
                  "nodeType": "IfStatement",
                  "src": "3092:504:93",
                  "trueBody": {
                    "id": 26911,
                    "nodeType": "Block",
                    "src": "3146:62:93",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 26908,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26895,
                              "src": "3179:17:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 26907,
                            "name": "_setImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26847,
                            "src": "3160:18:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 26909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3160:37:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 26910,
                        "nodeType": "ExpressionStatement",
                        "src": "3160:37:93"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 26893,
              "nodeType": "StructuredDocumentation",
              "src": "2484:161:93",
              "text": " @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."
            },
            "id": 26945,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeToAndCallUUPS",
            "nameLocation": "2659:21:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26895,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2698:17:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26945,
                  "src": "2690:25:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26894,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2690:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26897,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2738:4:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26945,
                  "src": "2725:17:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26896,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2725:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26899,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "2757:9:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26945,
                  "src": "2752:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26898,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2752:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2680:92:93"
            },
            "returnParameters": {
              "id": 26901,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2782:0:93"
            },
            "scope": 27109,
            "src": "2650:952:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 26946,
              "nodeType": "StructuredDocumentation",
              "src": "3608:189:93",
              "text": " @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."
            },
            "id": 26949,
            "mutability": "constant",
            "name": "_ADMIN_SLOT",
            "nameLocation": "3828:11:93",
            "nodeType": "VariableDeclaration",
            "scope": 27109,
            "src": "3802:106:93",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 26947,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "3802:7:93",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033",
              "id": 26948,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3842:66:93",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1",
                "typeString": "int_const 8195...(69 digits omitted)...7091"
              },
              "value": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 26950,
              "nodeType": "StructuredDocumentation",
              "src": "3915:67:93",
              "text": " @dev Emitted when the admin account has changed."
            },
            "id": 26956,
            "name": "AdminChanged",
            "nameLocation": "3993:12:93",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 26955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26952,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousAdmin",
                  "nameLocation": "4014:13:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26956,
                  "src": "4006:21:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26951,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4006:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26954,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4037:8:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26956,
                  "src": "4029:16:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4029:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4005:41:93"
            },
            "src": "3987:60:93"
          },
          {
            "body": {
              "id": 26968,
              "nodeType": "Block",
              "src": "4161:69:93",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 26964,
                          "name": "_ADMIN_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26949,
                          "src": "4205:11:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 26962,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27719,
                          "src": "4178:11:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 26963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27685,
                        "src": "4178:26:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27665_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                        }
                      },
                      "id": 26965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4178:39:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                        "typeString": "struct StorageSlot.AddressSlot storage pointer"
                      }
                    },
                    "id": 26966,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27664,
                    "src": "4178:45:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 26961,
                  "id": 26967,
                  "nodeType": "Return",
                  "src": "4171:52:93"
                }
              ]
            },
            "documentation": {
              "id": 26957,
              "nodeType": "StructuredDocumentation",
              "src": "4053:50:93",
              "text": " @dev Returns the current admin."
            },
            "id": 26969,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getAdmin",
            "nameLocation": "4117:9:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4126:2:93"
            },
            "returnParameters": {
              "id": 26961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26960,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 26969,
                  "src": "4152:7:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26959,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4152:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4151:9:93"
            },
            "scope": 27109,
            "src": "4108:122:93",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 26994,
              "nodeType": "Block",
              "src": "4357:156:93",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 26981,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 26976,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26972,
                          "src": "4375:8:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 26979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4395:1:93",
                              "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": 26978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4387:7:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 26977,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4387:7:93",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 26980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4387:10:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4375:22:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373",
                        "id": 26982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4399:40:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5",
                          "typeString": "literal_string \"ERC1967: new admin is the zero address\""
                        },
                        "value": "ERC1967: new admin is the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5",
                          "typeString": "literal_string \"ERC1967: new admin is the zero address\""
                        }
                      ],
                      "id": 26975,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4367:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26983,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4367:73:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26984,
                  "nodeType": "ExpressionStatement",
                  "src": "4367:73:93"
                },
                {
                  "expression": {
                    "id": 26992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 26988,
                            "name": "_ADMIN_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26949,
                            "src": "4477:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 26985,
                            "name": "StorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27719,
                            "src": "4450:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                              "typeString": "type(library StorageSlot)"
                            }
                          },
                          "id": 26987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27685,
                          "src": "4450:26:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27665_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                          }
                        },
                        "id": 26989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4450:39:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot storage pointer"
                        }
                      },
                      "id": 26990,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27664,
                      "src": "4450:45:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 26991,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26972,
                      "src": "4498:8:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4450:56:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 26993,
                  "nodeType": "ExpressionStatement",
                  "src": "4450:56:93"
                }
              ]
            },
            "documentation": {
              "id": 26970,
              "nodeType": "StructuredDocumentation",
              "src": "4236:71:93",
              "text": " @dev Stores a new address in the EIP1967 admin slot."
            },
            "id": 26995,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setAdmin",
            "nameLocation": "4321:9:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26972,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4339:8:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 26995,
                  "src": "4331:16:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4331:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4330:18:93"
            },
            "returnParameters": {
              "id": 26974,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4357:0:93"
            },
            "scope": 27109,
            "src": "4312:201:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27011,
              "nodeType": "Block",
              "src": "4673:86:93",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 27002,
                          "name": "_getAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26969,
                          "src": "4701:9:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 27003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4701:11:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 27004,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26998,
                        "src": "4714:8:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27001,
                      "name": "AdminChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26956,
                      "src": "4688:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 27005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4688:35:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27006,
                  "nodeType": "EmitStatement",
                  "src": "4683:40:93"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27008,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26998,
                        "src": "4743:8:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27007,
                      "name": "_setAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26995,
                      "src": "4733:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4733:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27010,
                  "nodeType": "ExpressionStatement",
                  "src": "4733:19:93"
                }
              ]
            },
            "documentation": {
              "id": 26996,
              "nodeType": "StructuredDocumentation",
              "src": "4519:100:93",
              "text": " @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."
            },
            "id": 27012,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_changeAdmin",
            "nameLocation": "4633:12:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 26999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26998,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4654:8:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 27012,
                  "src": "4646:16:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 26997,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4646:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4645:18:93"
            },
            "returnParameters": {
              "id": 27000,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4673:0:93"
            },
            "scope": 27109,
            "src": "4624:135:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 27013,
              "nodeType": "StructuredDocumentation",
              "src": "4765:232:93",
              "text": " @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."
            },
            "id": 27016,
            "mutability": "constant",
            "name": "_BEACON_SLOT",
            "nameLocation": "5028:12:93",
            "nodeType": "VariableDeclaration",
            "scope": 27109,
            "src": "5002:107:93",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27014,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "5002:7:93",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530",
              "id": 27015,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "5043:66:93",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1",
                "typeString": "int_const 7415...(69 digits omitted)...4704"
              },
              "value": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 27017,
              "nodeType": "StructuredDocumentation",
              "src": "5116:60:93",
              "text": " @dev Emitted when the beacon is upgraded."
            },
            "id": 27021,
            "name": "BeaconUpgraded",
            "nameLocation": "5187:14:93",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 27020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27019,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "beacon",
                  "nameLocation": "5218:6:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 27021,
                  "src": "5202:22:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27018,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5202:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5201:24:93"
            },
            "src": "5181:45:93"
          },
          {
            "body": {
              "id": 27033,
              "nodeType": "Block",
              "src": "5342:70:93",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 27029,
                          "name": "_BEACON_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27016,
                          "src": "5386:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 27027,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27719,
                          "src": "5359:11:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 27028,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27685,
                        "src": "5359:26:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27665_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                        }
                      },
                      "id": 27030,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5359:40:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                        "typeString": "struct StorageSlot.AddressSlot storage pointer"
                      }
                    },
                    "id": 27031,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27664,
                    "src": "5359:46:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 27026,
                  "id": 27032,
                  "nodeType": "Return",
                  "src": "5352:53:93"
                }
              ]
            },
            "documentation": {
              "id": 27022,
              "nodeType": "StructuredDocumentation",
              "src": "5232:51:93",
              "text": " @dev Returns the current beacon."
            },
            "id": 27034,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getBeacon",
            "nameLocation": "5297:10:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27023,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5307:2:93"
            },
            "returnParameters": {
              "id": 27026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27025,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27034,
                  "src": "5333:7:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27024,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5333:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5332:9:93"
            },
            "scope": 27109,
            "src": "5288:124:93",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27069,
              "nodeType": "Block",
              "src": "5541:324:93",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 27043,
                            "name": "newBeacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27037,
                            "src": "5578:9:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 27041,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24344,
                            "src": "5559:7:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$24344_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 27042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24067,
                          "src": "5559:18:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 27044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5559:29:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374",
                        "id": 27045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5590:39:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470",
                          "typeString": "literal_string \"ERC1967: new beacon is not a contract\""
                        },
                        "value": "ERC1967: new beacon is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470",
                          "typeString": "literal_string \"ERC1967: new beacon is not a contract\""
                        }
                      ],
                      "id": 27040,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5551:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5551:79:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27047,
                  "nodeType": "ExpressionStatement",
                  "src": "5551:79:93"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 27052,
                                    "name": "newBeacon",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 27037,
                                    "src": "5688:9:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 27051,
                                  "name": "IBeacon",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 27659,
                                  "src": "5680:7:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IBeacon_$27659_$",
                                    "typeString": "type(contract IBeacon)"
                                  }
                                },
                                "id": 27053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5680:18:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBeacon_$27659",
                                  "typeString": "contract IBeacon"
                                }
                              },
                              "id": 27054,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "implementation",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 27658,
                              "src": "5680:33:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 27055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5680:35:93",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 27049,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24344,
                            "src": "5661:7:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$24344_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 27050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24067,
                          "src": "5661:18:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 27056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5661:55:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374",
                        "id": 27057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5730:50:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8",
                          "typeString": "literal_string \"ERC1967: beacon implementation is not a contract\""
                        },
                        "value": "ERC1967: beacon implementation is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8",
                          "typeString": "literal_string \"ERC1967: beacon implementation is not a contract\""
                        }
                      ],
                      "id": 27048,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5640:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5640:150:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27059,
                  "nodeType": "ExpressionStatement",
                  "src": "5640:150:93"
                },
                {
                  "expression": {
                    "id": 27067,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 27063,
                            "name": "_BEACON_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27016,
                            "src": "5827:12:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 27060,
                            "name": "StorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27719,
                            "src": "5800:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlot_$27719_$",
                              "typeString": "type(library StorageSlot)"
                            }
                          },
                          "id": 27062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27685,
                          "src": "5800:26:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27665_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                          }
                        },
                        "id": 27064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5800:40:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$27665_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot storage pointer"
                        }
                      },
                      "id": 27065,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27664,
                      "src": "5800:46:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27066,
                      "name": "newBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27037,
                      "src": "5849:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5800:58:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 27068,
                  "nodeType": "ExpressionStatement",
                  "src": "5800:58:93"
                }
              ]
            },
            "documentation": {
              "id": 27035,
              "nodeType": "StructuredDocumentation",
              "src": "5418:71:93",
              "text": " @dev Stores a new beacon in the EIP1967 beacon slot."
            },
            "id": 27070,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBeacon",
            "nameLocation": "5503:10:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27037,
                  "mutability": "mutable",
                  "name": "newBeacon",
                  "nameLocation": "5522:9:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 27070,
                  "src": "5514:17:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27036,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5514:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5513:19:93"
            },
            "returnParameters": {
              "id": 27039,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5541:0:93"
            },
            "scope": 27109,
            "src": "5494:371:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27107,
              "nodeType": "Block",
              "src": "6294:217:93",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27081,
                        "name": "newBeacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27073,
                        "src": "6315:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27080,
                      "name": "_setBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27070,
                      "src": "6304:10:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6304:21:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27083,
                  "nodeType": "ExpressionStatement",
                  "src": "6304:21:93"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 27085,
                        "name": "newBeacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27073,
                        "src": "6355:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27084,
                      "name": "BeaconUpgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27021,
                      "src": "6340:14:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6340:25:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27087,
                  "nodeType": "EmitStatement",
                  "src": "6335:30:93"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 27093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 27091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 27088,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27075,
                          "src": "6379:4:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6379:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 27090,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6393:1:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6379:15:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "id": 27092,
                      "name": "forceCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27077,
                      "src": "6398:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6379:28:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27106,
                  "nodeType": "IfStatement",
                  "src": "6375:130:93",
                  "trueBody": {
                    "id": 27105,
                    "nodeType": "Block",
                    "src": "6409:96:93",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 27098,
                                      "name": "newBeacon",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27073,
                                      "src": "6460:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 27097,
                                    "name": "IBeacon",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 27659,
                                    "src": "6452:7:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IBeacon_$27659_$",
                                      "typeString": "type(contract IBeacon)"
                                    }
                                  },
                                  "id": 27099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6452:18:93",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBeacon_$27659",
                                    "typeString": "contract IBeacon"
                                  }
                                },
                                "id": 27100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "implementation",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 27658,
                                "src": "6452:33:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 27101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6452:35:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 27102,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27075,
                              "src": "6489:4:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 27094,
                              "name": "Address",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24344,
                              "src": "6423:7:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Address_$24344_$",
                                "typeString": "type(library Address)"
                              }
                            },
                            "id": 27096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionDelegateCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24277,
                            "src": "6423:28:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 27103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6423:71:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27104,
                        "nodeType": "ExpressionStatement",
                        "src": "6423:71:93"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 27071,
              "nodeType": "StructuredDocumentation",
              "src": "5871:292:93",
              "text": " @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."
            },
            "id": 27108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeBeaconToAndCall",
            "nameLocation": "6177:23:93",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27073,
                  "mutability": "mutable",
                  "name": "newBeacon",
                  "nameLocation": "6218:9:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 27108,
                  "src": "6210:17:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27072,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6210:7:93",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27075,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6250:4:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 27108,
                  "src": "6237:17:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27074,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6237:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27077,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "6269:9:93",
                  "nodeType": "VariableDeclaration",
                  "scope": 27108,
                  "src": "6264:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27076,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6264:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6200:84:93"
            },
            "returnParameters": {
              "id": 27079,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6294:0:93"
            },
            "scope": 27109,
            "src": "6168:343:93",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 27110,
        "src": "529:5984:93",
        "usedErrors": []
      }
    ],
    "src": "116:6398:93"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "ERC1967Upgrade",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "Address",
    "IBeacon",
    "IERC1822Proxiable",
    "StorageSlot"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "custom:oz-upgrades-unsafe-allow": "delegatecall",
    "details": "This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._",
    "events": {
      "AdminChanged(address,address)": {
        "details": "Emitted when the admin account has changed."
      },
      "BeaconUpgraded(address)": {
        "details": "Emitted when the beacon is upgraded."
      },
      "Upgraded(address)": {
        "details": "Emitted when the implementation is upgraded."
      }
    },
    "kind": "dev",
    "methods": {},
    "stateVariables": {
      "_ADMIN_SLOT": {
        "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."
      },
      "_BEACON_SLOT": {
        "details": "The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."
      },
      "_IMPLEMENTATION_SLOT": {
        "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."
      }
    },
    "version": 1
  },
  "offset": [
    529,
    6513
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "7134c7dc6d62c58f424d4fe3bf4c3c98bdf180ba",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n    // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Perform implementation upgrade\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Perform implementation upgrade with additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCall(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _upgradeTo(newImplementation);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(newImplementation, data);\n        }\n    }\n\n    /**\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n            _setImplementation(newImplementation);\n        } else {\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n                require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n            } catch {\n                revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n            }\n            _upgradeToAndCall(newImplementation, data, forceCall);\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     */\n    function _changeAdmin(address newAdmin) internal {\n        emit AdminChanged(_getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n     */\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Emitted when the beacon is upgraded.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function _getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n        require(\n            Address.isContract(IBeacon(newBeacon).implementation()),\n            \"ERC1967: beacon implementation is not a contract\"\n        );\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n    }\n\n    /**\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n     *\n     * Emits a {BeaconUpgraded} event.\n     */\n    function _upgradeBeaconToAndCall(\n        address newBeacon,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        }\n    }\n}\n",
  "sourceMap": "",
  "sourcePath": "node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
  "type": "contract"
}