{
  "id": "7ea30bf19efee42e9a8cc9c92403dac0",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/collateral-locker/v1/interfaces/ICollateralLockerFactory.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/collateral-locker/v1/interfaces/ICollateralLockerFactory.sol\npragma solidity =0.6.11;\n\n////// contracts/core/subfactory/v1/interfaces/ISubFactory.sol\n/* pragma solidity 0.6.11; */\n\n/// @title SubFactory creates instances downstream of another factory.\ninterface ISubFactory {\n\n    /**\n        @dev The type of the factory\n     */\n    function factoryType() external pure returns (uint8);\n\n}\n\n////// contracts/core/collateral-locker/v1/interfaces/ICollateralLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title CollateralLockerFactory instantiates CollateralLockers.\ninterface ICollateralLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a CollateralLocker was created.\n        @param owner            The owner of the CollateralLocker.\n        @param collateralLocker The address of the CollateralLocker.\n        @param collateralAsset  The Collateral Asset of the CollateralLocker.\n     */\n    event CollateralLockerCreated(address indexed owner, address collateralLocker, address collateralAsset);\n\n    /**\n        @param  collateralLocker The address of a CollateralLocker.\n        @return The address of the owner of CollateralLocker at `collateralLocker`.\n     */\n    function owner(address collateralLocker) external view returns (address);\n\n    /**\n        @param  collateralLocker Some address.\n        @return Whether `collateralLocker` is a CollateralLocker.\n     */\n    function isLocker(address collateralLocker) external view returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::COLLATERAL_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiates a CollateralLocker. \n        @dev    It emits a `CollateralLockerCreated` event. \n        @param  collateralAsset  The Collateral Asset this CollateralLocker will escrow.\n        @return collateralLocker The address of the instantiated CollateralLocker.\n     */\n    function newLocker(address collateralAsset) external returns (address collateralLocker);\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/collateral-locker/v1/interfaces/ICollateralLockerFactory.sol": {
        "ICollateralLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "collateralLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                }
              ],
              "name": "CollateralLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "collateralLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "collateralLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "collateralLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address)": "19eb783a",
              "owner(address)": "666e1b39"
            }
          }
        },
        "ISubFactory": {
          "abi": [
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/core/collateral-locker/v1/interfaces/ICollateralLockerFactory.sol": {
        "ast": {
          "absolutePath": "contracts/core/collateral-locker/v1/interfaces/ICollateralLockerFactory.sol",
          "exportedSymbols": {
            "ICollateralLockerFactory": [
              53
            ],
            "ISubFactory": [
              9
            ]
          },
          "id": 54,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11"
              ],
              "nodeType": "PragmaDirective",
              "src": "152:24:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "272:71:0",
                "text": "@title SubFactory creates instances downstream of another factory."
              },
              "fullyImplemented": false,
              "id": 9,
              "linearizedBaseContracts": [
                9
              ],
              "name": "ISubFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3,
                    "nodeType": "StructuredDocumentation",
                    "src": "372:48:0",
                    "text": "@dev The type of the factory"
                  },
                  "functionSelector": "64e1fd55",
                  "id": 8,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "445:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "471:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "471:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "470:7:0"
                  },
                  "scope": 9,
                  "src": "425:53:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 54,
              "src": "343:138:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 11,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9,
                    "src": "790:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$9",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 12,
                  "nodeType": "InheritanceSpecifier",
                  "src": "790:11:0"
                }
              ],
              "contractDependencies": [
                9
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 10,
                "nodeType": "StructuredDocumentation",
                "src": "685:67:0",
                "text": "@title CollateralLockerFactory instantiates CollateralLockers."
              },
              "fullyImplemented": false,
              "id": 53,
              "linearizedBaseContracts": [
                53,
                9
              ],
              "name": "ICollateralLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13,
                    "nodeType": "StructuredDocumentation",
                    "src": "809:298:0",
                    "text": "@dev   Emits an event indicating a CollateralLocker was created.\n@param owner            The owner of the CollateralLocker.\n@param collateralLocker The address of the CollateralLocker.\n@param collateralAsset  The Collateral Asset of the CollateralLocker."
                  },
                  "id": 21,
                  "name": "CollateralLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 20,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 15,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 21,
                        "src": "1142:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 14,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1142:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 17,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 21,
                        "src": "1165:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 16,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1165:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 19,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 21,
                        "src": "1191:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1191:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1141:74:0"
                  },
                  "src": "1112:104:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 22,
                    "nodeType": "StructuredDocumentation",
                    "src": "1222:163:0",
                    "text": "@param  collateralLocker The address of a CollateralLocker.\n@return The address of the owner of CollateralLocker at `collateralLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 29,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 24,
                        "mutability": "mutable",
                        "name": "collateralLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 29,
                        "src": "1405:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 23,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1405:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1404:26:0"
                  },
                  "returnParameters": {
                    "id": 28,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 27,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 29,
                        "src": "1454:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 26,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1454:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1453:9:0"
                  },
                  "scope": 53,
                  "src": "1390:73:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 30,
                    "nodeType": "StructuredDocumentation",
                    "src": "1469:124:0",
                    "text": "@param  collateralLocker Some address.\n@return Whether `collateralLocker` is a CollateralLocker."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 37,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 33,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 32,
                        "mutability": "mutable",
                        "name": "collateralLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 37,
                        "src": "1616:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 31,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1616:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1615:26:0"
                  },
                  "returnParameters": {
                    "id": 36,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 35,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 37,
                        "src": "1665:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 34,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1665:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1664:6:0"
                  },
                  "scope": 53,
                  "src": "1598:73:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    8
                  ],
                  "body": null,
                  "documentation": {
                    "id": 38,
                    "nodeType": "StructuredDocumentation",
                    "src": "1677:94:0",
                    "text": "@dev The type of the factory (i.e FactoryType::COLLATERAL_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 44,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 40,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1808:8:0"
                  },
                  "parameters": {
                    "id": 39,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1796:2:0"
                  },
                  "returnParameters": {
                    "id": 43,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 42,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 44,
                        "src": "1831:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 41,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1831:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1830:7:0"
                  },
                  "scope": 53,
                  "src": "1776:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 45,
                    "nodeType": "StructuredDocumentation",
                    "src": "1844:294:0",
                    "text": "@dev    Instantiates a CollateralLocker. \n@dev    It emits a `CollateralLockerCreated` event. \n@param  collateralAsset  The Collateral Asset this CollateralLocker will escrow.\n@return collateralLocker The address of the instantiated CollateralLocker."
                  },
                  "functionSelector": "19eb783a",
                  "id": 52,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 48,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 47,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 52,
                        "src": "2162:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 46,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2162:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2161:25:0"
                  },
                  "returnParameters": {
                    "id": 51,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 50,
                        "mutability": "mutable",
                        "name": "collateralLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 52,
                        "src": "2205:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 49,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2205:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2204:26:0"
                  },
                  "scope": 53,
                  "src": "2143:88:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 54,
              "src": "752:1482:0"
            }
          ],
          "src": "152:2083:0"
        },
        "id": 0
      }
    }
  }
}
