docs: @Override
      public synchronized void start(final StartContext context) throws StartException {
          final ModelController modelController = modelControllerSupplier.get();
          final ControlledProcessStateService controlledProcessStateService = controlledProcessStateServiceSupplier.get();
          socketBindingManager = socketBindingManagerSupplier != null ? socketBindingManagerSupplier.get() : null;
  
          final SecurityRealm securityRealm = securityRealmSupplier != null ? securityRealmSupplier.get() : null;
          final HttpAuthenticationFactory httpAuthenticationFactory = httpAuthFactorySupplier != null ? httpAuthFactorySupplier.get() : null;
          SSLContext sslContext = sslContextSupplier != null ? sslContextSupplier.get() : null;
          final SslClientAuthMode sslClientAuthMode;
          if (sslContext == null && securityRealm != null) {
              sslContext = securityRealm.getSSLContext();
              sslClientAuthMode = getSslClientAuthMode(securityRealm);
          } else {
              sslClientAuthMode = null;
          }
  
          InetSocketAddress bindAddress = null;
          InetSocketAddress secureBindAddress = null;
  
          final SocketBinding basicBinding = socketBindingSupplier != null ? socketBindingSupplier.get() : null;
          final SocketBinding secureBinding = secureSocketBindingSupplier != null ? secureSocketBindingSupplier.get() : null;
          final NetworkInterfaceBinding interfaceBinding = interfaceBindingSupplier != null ? interfaceBindingSupplier.get() : null;
          final NetworkInterfaceBinding secureInterfaceBinding = secureInterfaceBindingSupplier != null ? secureInterfaceBindingSupplier.get() : null;
          if (interfaceBinding != null) {
              useUnmanagedBindings = true;
              assert this.port != null;
              final int port = this.port;
              if (port > 0) {
                  bindAddress = new InetSocketAddress(interfaceBinding.getAddress(), port);
              }
              assert this.securePort != null;
              final int securePort = this.securePort;
              if (securePort > 0) {
                  InetAddress secureAddress = secureInterfaceBinding == null ? interfaceBinding.getAddress() : secureInterfaceBinding.getAddress();
                  secureBindAddress = new InetSocketAddress(secureAddress, securePort);
              }
          } else {
              if (basicBinding != null) {
                  bindAddress = basicBinding.getSocketAddress();
              }
              if (secureBinding != null) {
                  secureBindAddress = secureBinding.getSocketAddress();
              }
          }
          List<ListenerRegistry.Listener> listeners = new ArrayList<>();
          //TODO: rethink this whole ListenerRegistry business
          if(bindAddress != null) {
              ListenerRegistry.Listener http = new ListenerRegistry.Listener("http", HTTP_MANAGEMENT, SERVER_NAME, bindAddress);
              http.setContextInformation("socket-binding", basicBinding);
              listeners.add(http);
          }
          if(secureBindAddress != null) {
              ListenerRegistry.Listener https = new ListenerRegistry.Listener("https", HTTPS_MANAGEMENT, SERVER_NAME, bindAddress);
              https.setContextInformation("socket-binding", secureBinding);
              listeners.add(https);
          }
  
          final ChannelUpgradeHandler upgradeHandler = new ChannelUpgradeHandler();
          final ServiceBuilder<?> builder = context.getChildTarget().addService(HTTP_UPGRADE_SERVICE_NAME);
          final Consumer<Object> upgradeHandlerConsumer = builder.provides(HTTP_UPGRADE_SERVICE_NAME, HTTPS_UPGRADE_SERVICE_NAME);
          builder.setInstance(org.jboss.msc.Service.newInstance(upgradeHandlerConsumer, upgradeHandler));
          builder.install();
          for (ListenerRegistry.Listener listener : listeners) {
              listener.addHttpUpgradeMetadata(new ListenerRegistry.HttpUpgradeMetadata(JBOSS_REMOTING, MANAGEMENT_ENDPOINT));
          }
  
          if (listenerRegistrySupplier.get() != null) {
              for(ListenerRegistry.Listener listener : listeners) {
                  listenerRegistrySupplier.get().addListener(listener);
              }
          }
  
          try {
              serverManagement = ManagementHttpServer.builder()
                      .setBindAddress(bindAddress)
                      .setSecureBindAddress(secureBindAddress)
                      .setModelController(modelController)
                      .setSecurityRealm(securityRealm)
                      .setSSLContext(sslContext)
                      .setSSLClientAuthMode(sslClientAuthMode)
                      .setHttpAuthenticationFactory(httpAuthenticationFactory)
                      .setControlledProcessStateService(controlledProcessStateService)
                      .setConsoleMode(consoleMode)
                      .setConsoleSlot(consoleSlot)
                      .setChannelUpgradeHandler(upgradeHandler)
                      .setManagementHttpRequestProcessor(requestProcessorSupplier.get())
                      .setAllowedOrigins(allowedOrigins)
                      .setWorker(workerSupplier.get())
                      .setExecutor(executorSupplier.get())
                      .build();
  
              serverManagement.start();
  
              // Register the now-created sockets with the SBM
              if (socketBindingManager != null) {
                  if (useUnmanagedBindings) {
                      SocketBindingManager.UnnamedBindingRegistry registry = socketBindingManager.getUnnamedRegistry();
                      if (bindAddress != null) {
                          final InetSocketAddress boundAddress = serverManagement.getLocalAddress(InetSocketAddress.class);
                          basicManagedBinding = ManagedBinding.Factory.createSimpleManagedBinding("management-http", boundAddress, null);
                          registry.registerBinding(basicManagedBinding);
                      }
                      if (secureBindAddress != null) {
                          final InetSocketAddress boundAddress = serverManagement.getSecureLocalAddress(InetSocketAddress.class);
                          secureManagedBinding = ManagedBinding.Factory.createSimpleManagedBinding("management-https", boundAddress, null);
                          registry.registerBinding(secureManagedBinding);
                      }
                  } else {
                      SocketBindingManager.NamedManagedBindingRegistry registry = socketBindingManager.getNamedRegistry();
                      if (basicBinding != null) {
                          final InetSocketAddress boundAddress = serverManagement.getLocalAddress(InetSocketAddress.class);
                          basicManagedBinding = ManagedBinding.Factory.createSimpleManagedBinding(basicBinding.getName(), boundAddress, null);
                          registry.registerBinding(basicManagedBinding);
                      }
                      if (secureBinding != null) {
                          final InetSocketAddress boundAddress = serverManagement.getSecureLocalAddress(InetSocketAddress.class);
                          secureManagedBinding = ManagedBinding.Factory.createSimpleManagedBinding(secureBinding.getName(), boundAddress, null);
                          registry.registerBinding(secureManagedBinding);
                      }
                  }
              }
          } catch (Exception e) {
              Throwable cause = e.getCause();
              if (e instanceof BindException || cause instanceof BindException) {
                  final StringBuilder sb = new StringBuilder().append(e.getLocalizedMessage());
                  if (bindAddress != null)
                      sb.append(" ").append(bindAddress);
                  if (secureBindAddress != null)
                      sb.append(" ").append(secureBindAddress);
                  throw new StartException(sb.toString());
              } else {
                  throw ServerLogger.ROOT_LOGGER.failedToStartHttpManagementService(e);
              }
          }
          httpManagementConsumer.accept(httpManagement);
      }