{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_beacon",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6106908061007d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063715018a6146100515780638da5cb5b1461005b57806399a88ec41461008c578063f2fde38b146100c7575b600080fd5b6100596100fa565b005b610063610211565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610059600480360360408110156100a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661022d565b610059600480360360208110156100dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b2565b610102610653565b73ffffffffffffffffffffffffffffffffffffffff16610120610211565b73ffffffffffffffffffffffffffffffffffffffff16146101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610235610653565b73ffffffffffffffffffffffffffffffffffffffff16610253610211565b73ffffffffffffffffffffffffffffffffffffffff16146102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102de82610657565b61034957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f626561636f6e2021636f6e747261637400000000000000000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b505090508061045f573d6000803e3d6000fd5b6040805173ffffffffffffffffffffffffffffffffffffffff84811682529151918516917fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09181900360200190a2505050565b6104ba610653565b73ffffffffffffffffffffffffffffffffffffffff166104d8610211565b73ffffffffffffffffffffffffffffffffffffffff161461055a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a164736f6c6343000706000a",
    "sourceMap": "722:1264:77:-:0;;;;;;;;;;;;-1:-1:-1;884:17:22;904:12;:10;:12::i;:::-;926:6;:18;;-1:-1:-1;926:18:22;-1:-1:-1;926:18:22;;;;;;;959:43;;926:18;;-1:-1:-1;926:18:22;959:43;;926:6;;959:43;850:159;722:1264:77;;598:104:30;685:10;598:104;:::o;722:1264:77:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063715018a6146100515780638da5cb5b1461005b57806399a88ec41461008c578063f2fde38b146100c7575b600080fd5b6100596100fa565b005b610063610211565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610059600480360360408110156100a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661022d565b610059600480360360208110156100dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b2565b610102610653565b73ffffffffffffffffffffffffffffffffffffffff16610120610211565b73ffffffffffffffffffffffffffffffffffffffff16146101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610235610653565b73ffffffffffffffffffffffffffffffffffffffff16610253610211565b73ffffffffffffffffffffffffffffffffffffffff16146102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102de82610657565b61034957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f626561636f6e2021636f6e747261637400000000000000000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b505090508061045f573d6000803e3d6000fd5b6040805173ffffffffffffffffffffffffffffffffffffffff84811682529151918516917fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09181900360200190a2505050565b6104ba610653565b73ffffffffffffffffffffffffffffffffffffffff166104d8610211565b73ffffffffffffffffffffffffffffffffffffffff161461055a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a164736f6c6343000706000a",
    "sourceMap": "722:1264:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1717:145:22;;;:::i;:::-;;1085:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1299:685:77;;;;;;;;;;;;;;;;-1:-1:-1;1299:685:77;;;;;;;;;;;:::i;2011:240:22:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:22;;;;:::i;1717:145::-;1308:12;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;::::1;1807:6:::0;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;;::::1;::::0;;1717:145::o;1085:85::-;1131:7;1157:6;;;1085:85;:::o;1299:685:77:-;1308:12:22;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1464:27:77::1;1483:7;1464:18;:27::i;:::-;1456:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1606:13;1625:7;:12;;1649:15;1638:27;;;;;;;;;;;;;;;;;;;;;;;;;;;1625:41;;;;;;;;;;;;;;;;;;;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1605:61;;;1766:8;1761:162;;1838:16;1835:1;::::0;1817:38:::1;1882:16;1835:1;1872:27;1799:114;1937:40;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;1367:1:22;1299:685:77::0;;:::o;2011:240:22:-;1308:12;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2099:22:::1;::::0;::::1;2091:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;::::1;::::0;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2011:240::o;598:104:30:-;685:10;598:104;:::o;726:413:29:-;1086:20;1124:8;;;726:413::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "owner()": "8da5cb5b",
    "renounceOwnership()": "715018a6",
    "transferOwnership(address)": "f2fde38b",
    "upgrade(address,address)": "99a88ec4"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/upgrade/UpgradeBeaconController.sol",
    "id": 46485,
    "exportedSymbols": {
      "Address": [
        28026
      ],
      "Ownable": [
        26380
      ],
      "UpgradeBeacon": [
        46427
      ],
      "UpgradeBeaconController": [
        46484
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:1941:77",
    "nodes": [
      {
        "id": 46429,
        "nodeType": "PragmaDirective",
        "src": "46:22:77",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 46431,
        "nodeType": "ImportDirective",
        "src": "116:50:77",
        "absolutePath": "packages/contracts-core/contracts/upgrade/UpgradeBeacon.sol",
        "file": "./UpgradeBeacon.sol",
        "scope": 46485,
        "sourceUnit": 46428,
        "symbolAliases": [
          {
            "foreign": {
              "id": 46430,
              "name": "UpgradeBeacon",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:13:77",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 46433,
        "nodeType": "ImportDirective",
        "src": "213:67:77",
        "absolutePath": "node_modules/@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "scope": 46485,
        "sourceUnit": 26381,
        "symbolAliases": [
          {
            "foreign": {
              "id": 46432,
              "name": "Ownable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "221:7:77",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 46435,
        "nodeType": "ImportDirective",
        "src": "281:66:77",
        "absolutePath": "node_modules/@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "scope": 46485,
        "sourceUnit": 28027,
        "symbolAliases": [
          {
            "foreign": {
              "id": 46434,
              "name": "Address",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "289:7:77",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 46484,
        "nodeType": "ContractDefinition",
        "src": "722:1264:77",
        "nodes": [
          {
            "id": 46444,
            "nodeType": "EventDefinition",
            "src": "813:69:77",
            "anonymous": false,
            "name": "BeaconUpgraded",
            "parameters": {
              "id": 46443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46440,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "beacon",
                  "nodeType": "VariableDeclaration",
                  "scope": 46444,
                  "src": "834:22:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46439,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "834:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46442,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nodeType": "VariableDeclaration",
                  "scope": 46444,
                  "src": "858:22:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46441,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "858:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "833:48:77"
            }
          },
          {
            "id": 46483,
            "nodeType": "FunctionDefinition",
            "src": "1299:685:77",
            "body": {
              "id": 46482,
              "nodeType": "Block",
              "src": "1397:587:77",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 46457,
                            "name": "_beacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46447,
                            "src": "1483:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 46455,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28026,
                            "src": "1464:7:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$28026_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 46456,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27750,
                          "src": "1464:18:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 46458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1464:27:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "626561636f6e2021636f6e7472616374",
                        "id": 46459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1493:18:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c",
                          "typeString": "literal_string \"beacon !contract\""
                        },
                        "value": "beacon !contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c",
                          "typeString": "literal_string \"beacon !contract\""
                        }
                      ],
                      "id": 46454,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1456:7:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 46460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1456:56:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 46461,
                  "nodeType": "ExpressionStatement",
                  "src": "1456:56:77"
                },
                {
                  "assignments": [
                    46463,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 46463,
                      "mutability": "mutable",
                      "name": "_success",
                      "nodeType": "VariableDeclaration",
                      "scope": 46482,
                      "src": "1606:13:77",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 46462,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1606:4:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 46471,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 46468,
                            "name": "_implementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46449,
                            "src": "1649:15:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 46466,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "1638:3:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 46467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "1638:10:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 46469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1638:27:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 46464,
                        "name": "_beacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46447,
                        "src": "1625:7:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 46465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "1625:12:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 46470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1625:41:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1605:61:77"
                },
                {
                  "condition": {
                    "id": 46473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "1765:9:77",
                    "subExpression": {
                      "id": 46472,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46463,
                      "src": "1766:8:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 46476,
                  "nodeType": "IfStatement",
                  "src": "1761:162:77",
                  "trueBody": {
                    "id": 46475,
                    "nodeType": "Block",
                    "src": "1776:147:77",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1799:114:77",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1832:1:77",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1835:1:77",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1838:14:77"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1838:16:77"
                                  }
                                ],
                                "functionName": {
                                  "name": "returndatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "1817:14:77"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1817:38:77"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1817:38:77"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1879:1:77",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1882:14:77"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1882:16:77"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1872:6:77"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1872:27:77"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1872:27:77"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [],
                        "id": 46474,
                        "nodeType": "InlineAssembly",
                        "src": "1790:123:77"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 46478,
                        "name": "_beacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46447,
                        "src": "1952:7:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 46479,
                        "name": "_implementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46449,
                        "src": "1961:15:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 46477,
                      "name": "BeaconUpgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46444,
                      "src": "1937:14:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 46480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1937:40:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 46481,
                  "nodeType": "EmitStatement",
                  "src": "1932:45:77"
                }
              ]
            },
            "documentation": {
              "id": 46445,
              "nodeType": "StructuredDocumentation",
              "src": "941:353:77",
              "text": " @notice Modify the implementation stored in the UpgradeBeacon,\n which will upgrade the implementation used by all\n Proxy contracts using that UpgradeBeacon\n @param _beacon Address of the UpgradeBeacon which will be updated\n @param _implementation Address of the Implementation contract to upgrade the Beacon to"
            },
            "functionSelector": "99a88ec4",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 46452,
                "modifierName": {
                  "id": 46451,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26329,
                  "src": "1383:9:77",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1383:9:77"
              }
            ],
            "name": "upgrade",
            "parameters": {
              "id": 46450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46447,
                  "mutability": "mutable",
                  "name": "_beacon",
                  "nodeType": "VariableDeclaration",
                  "scope": 46483,
                  "src": "1316:15:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1316:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46449,
                  "mutability": "mutable",
                  "name": "_implementation",
                  "nodeType": "VariableDeclaration",
                  "scope": 46483,
                  "src": "1333:23:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1333:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1315:42:77"
            },
            "returnParameters": {
              "id": 46453,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1397:0:77"
            },
            "scope": 46484,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 46437,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26380,
              "src": "758:7:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$26380",
                "typeString": "contract Ownable"
              }
            },
            "id": 46438,
            "nodeType": "InheritanceSpecifier",
            "src": "758:7:77"
          }
        ],
        "contractDependencies": [
          26380,
          28049
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 46436,
          "nodeType": "StructuredDocumentation",
          "src": "349:372:77",
          "text": " @title UpgradeBeaconController\n @notice Set as the controller of UpgradeBeacon contract(s),\n capable of changing their stored implementation address.\n @dev This implementation is a minimal version inspired by 0age's implementation:\n https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.sol"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          46484,
          26380,
          28049
        ],
        "name": "UpgradeBeaconController",
        "scope": 46485
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 77
}