code: func (s *Server) loadConfiguration(configMsg config.Message) {
  	currentConfigurations := s.currentConfigurations.Get().(config.Configurations)
  
  	// Copy configurations to new map so we don't change current if LoadConfig fails
  	newConfigurations := make(config.Configurations)
  	for k, v := range currentConfigurations {
  		newConfigurations[k] = v
  	}
  	newConfigurations[configMsg.ProviderName] = configMsg.Configuration
  
  	s.metricsRegistry.ConfigReloadsCounter().Add(1)
  
  	handlersTCP := s.loadConfigurationTCP(newConfigurations)
  	for entryPointName, router := range handlersTCP {
  		s.entryPointsTCP[entryPointName].switchRouter(router)
  	}
  
  	s.metricsRegistry.LastConfigReloadSuccessGauge().Set(float64(time.Now().Unix()))
  
  	s.currentConfigurations.Set(newConfigurations)
  
  	for _, listener := range s.configurationListeners {
  		listener(*configMsg.Configuration)
  	}
  
  	s.postLoadConfiguration()
  }
docs: // loadConfiguration manages dynamically routers, middlewares, servers and TLS configurations