code: func New(cfg Config) (*Mux, error) {
  	if err := cfg.CheckAndSetDefaults(); err != nil {
  		return nil, trace.Wrap(err)
  	}
  
  	ctx, cancel := context.WithCancel(cfg.Context)
  	waitContext, waitCancel := context.WithCancel(context.TODO())
  	return &Mux{
  		Entry: log.WithFields(log.Fields{
  			trace.Component: teleport.Component("mx", cfg.ID),
  		}),
  		Config:      cfg,
  		context:     ctx,
  		cancel:      cancel,
  		sshListener: newListener(ctx, cfg.Listener.Addr()),
  		tlsListener: newListener(ctx, cfg.Listener.Addr()),
  		waitContext: waitContext,
  		waitCancel:  waitCancel,
  	}, nil
  }
docs: // New returns a new instance of multiplexer