interface IPairManagerFactory is IGovernable {
  // Variables

  /// @notice Maps the address of a Uniswap pool, to the address of the corresponding PairManager
  ///         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address
  /// @param _pool The address of the Uniswap pool
  /// @return _pairManager The address of the corresponding pair manager
  function pairManagers(address _pool) external view returns (address _pairManager);

  // Events

  /// @notice Emitted when a new pair manager is created
  /// @param _pool The address of the corresponding Uniswap pool
  /// @param _pairManager The address of the just-created pair manager
  event PairCreated(address _pool, address _pairManager);

  // Errors

  /// @notice Throws an error if the pair manager is already initialized
  error AlreadyInitialized();

  /// @notice Throws an error if the caller is not the owner
  error OnlyOwner();

  // Methods

  /// @notice Creates a new pair manager based on the address of a Uniswap pool
  ///         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool
  /// @param _pool The address of the Uniswap pool the pair manager will be based of
  /// @return _pairManager The address of the just-created pair manager
  function createPairManager(address _pool) external returns (address _pairManager);
}
/// @title Factory of Pair Managers
/// @notice This contract creates new pair managers
function createPairManager(address _pool) external returns (address _pairManager);

/// @notice Creates a new pair manager based on the address of a Uniswap pool
///         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool
/// @param _pool The address of the Uniswap pool the pair manager will be based of
/// @return _pairManager The address of the just-created pair manager