Question: Rework the modem bank simulation so that Event is an abstract base class and DialInEvent and HangUpEvent are derived classes. The Event class should store a pointer to a ModemSim object as an additional data member, which is initialized on construction. It should also provide an abstract method named doEvent that is implemented in the derived classes and that can be called from runsim to process the event.