code: func (agent *ecsAgent) newStateManager(
  	taskEngine engine.TaskEngine,
  	cluster *string,
  	containerInstanceArn *string,
  	savedInstanceID *string,
  	availabilityZone *string) (statemanager.StateManager, error) {
  
  	if !agent.cfg.Checkpoint {
  		return statemanager.NewNoopStateManager(), nil
  	}
  
  	return agent.stateManagerFactory.NewStateManager(agent.cfg,
  		statemanager.AddSaveable("TaskEngine", taskEngine),
  		// This is for making testing easier as we can mock this
  		agent.saveableOptionFactory.AddSaveable("ContainerInstanceArn",
  			containerInstanceArn),
  		agent.saveableOptionFactory.AddSaveable("Cluster", cluster),
  		// This is for making testing easier as we can mock this
  		agent.saveableOptionFactory.AddSaveable("EC2InstanceID", savedInstanceID),
  		agent.saveableOptionFactory.AddSaveable("availabilityZone", availabilityZone),
  	)
  }
docs: // newStateManager creates a new state manager object for the task engine.
  // Rest of the parameters are pointers and it's expected that all of these
  // will be backfilled when state manager's Load() method is invoked