code: def consume(self, event):
          
          future_states = self.can(event)
  
          new_state = future_states[0]
          if len(future_states) > 1:
              new_state = self.choose(event)
          event.execute()
          self.process(event)
          new_state.setup(event, self)
          self.teardown(event)
          return new_state
docs: process the current event, setup new state and teardown current state