 FormData();
    form.append("name", userForm?.name);
    form.append("email", userForm?.email);
    form.append("cpf", userForm?.cpf.match(/\d+/g).join(""));
    form.append(
      "birthday",
      moment(userForm?.birthday, "DD/MM/YYYY").format("YYYY-MM-DD")
    );
    form.append("phone", userForm?.phone.match(/\d+/g).join(""));
    form.append("password", <PASSWORD>);

    form.append("photo", {
      name: new Date().getTime() + "." + util.getMimeType(userForm?.photo?.uri),
      type: `image/${util.getMimeType(userForm?.photo?.uri)}`,
      uri: userForm?.photo?.uri,
    });

    const { data: res } = yield call(api.post, `/user/`, form, {
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });

    if (res.error) {
      Alert.alert("Ops!", res.message, [
        {
          text: "Tentar novamente",
          onPress: () => {},
        },
      ]);
      return false;
    }

    yield put(reset("userForm"));
    yield call(modalInviteRef?.current?.close);

    Alert.alert(
      "Solicitação enviada!",
      "Seu convite foi recebido com sucesso! Fique atento em seu e-mail ou pelo app, iremos enviar uma notificação caso você seja aprovado.",
      [
        {
          text: "Voltar para Home",
          onPress: async () => {},
        },
      ]
    );
  } catch (err) {
    Alert.alert("Erro interno!", err.message);
  } finally {
    yield put(setForm({ saving: false }));
  }
}

export function* getHome() {
  const { user } = yield select((state) => state.app);

  yield put(setForm({ loading: true }));

  try {
    const { data: res } = yield call(api.get, `/user/${user?._id}/challenge`);

    if (res.error) {
      Alert.alert("Ops!", res.message, [
        {
          text: "Tentar novamente",
          onPress: () => {},
        },
      ]);
      return false;
    }

    /* yield put(setReducer('isParticipant', res.isParticipant));
    yield put(setReducer('challenge', res.challenge));
    yield put(setReducer('dailyAmount', res.dailyAmount));
    yield put(setReducer('challengePeriod', res.challengePeriod));
    yield put(setReducer('participatedTimes', res.participatedTimes));
    yield put(setReducer('discipline', res.discipline));
    yield put(setReducer('balance', res.balance));
    yield put(setReducer('challengeFinishedToday', res.challengeFinishedToday));
    yield put(setReducer('dailyResults', res.dailyResults)); */

    for (let key of Object.keys(res)) {
      yield put(setReducer(res[key], key));
    }
  } catch (err) {
    Alert.alert("Erro interno!", err.message);
  } finally {
    yield put(setForm({ loading: false }));
  }
}

export function* joinChallenge() {
  const { user, challenge, payment } = yield select((state) => state.app);

  yield put(setForm({ saving: true }));

  try {
    const { data: res } = yield call(api.post, `/challenge/join`, {
      userId: user?._id,
      challengeId: challenge?._id,
      creditCard: payment,
    });

    if (res.error) {
      Alert.alert("Ops!", res.message, [
        {
          text: "Tentar novamente",
          onPress: () => {},
        },
      ]);
      return false;
    }

    yield put(getHomeAction());
    yield navigate("Home");
  } catch (err) {
    Alert.alert("Erro interno!", err.message);
  } finally {
    yield put(setForm({ saving: false }));
  }
}

export function* saveTracking({ operation }) {
  const { user, challenge, dailyAmount } = yield select((state) => state.app);

  yield put(setForm({ loading: true }));

  try {
    const { data: res } = yield call(api.post, `/challenge/tracking`, {
      userId: user?._id,
      challengeId: challenge?._id,
      operation,
      amount: dailyAmount?.toFixed(2),
    });

    if (res.error) {
      Alert.alert("Ops!", res.message, [
        {
          text: "Tentar novamente",
          onPress: () => {},
        },
      ]);
      return false;
    }

    yield put(getHomeAction());
  } catch (err) {
    Alert.alert("Erro interno!", err.message);
  } finally {
    yield put(setForm({ loading: false }));
  }
}

export function* getHanking() {
  const { challenge } = yield select((state) => state.app);

  yield put(setForm({ loading: true }));

  try {
    const { data: res } = yield call(
      api.get,
      `/challenge/${challenge?._id}/ranking`
    );

    if (res.error) {
      Alert.alert("Ops!", res.message, [
        {
          text: "Tentar novamente",
          onPress: () => {},
        },
      ]);
      return false;
    }

    yield put(setReducer("ranking", res));
  } catch (err) {
    Alert.alert("Erro interno!", err.message);
  } finally {
    yield put(setForm({ loading: false }));
  }
}

export function* getBalance() {
  const { user } = yield select((state) => state.app);

  yield put(setForm({ loading: true }));

  try {
    const { data: res } = yield call(api.get, `/user/${user?._id}/balance`);

    console.log('data',res)

    if (res.error) {
      Alert.alert("Ops!", res.message, [
        {
          text: "Tentar novamente",
          onPress: () => {},
        },
      ]);
      return false;
    }

    yield put(setReducer("trackings", res));
  } catch (err) {
    Alert.alert("Erro interno!", err.message);
  } finally {
    yield put(setForm({ loading: false }));
  }
}

export default all([
  takeLatest(types.SAVE_USERS, saveUser),
  takeLatest(types.LOGIN_USERS, loginUser),
  takeLatest(types.GET_HOME, getHome),
  takeLatest(types.JOIN_CHALLENGE, joinChallenge),
  takeLatest(types.GET_RANKING, getHanking),
  takeLatest(types.GET_BALANCE, getBalance),
]);
<issue_start><issue_comment>Title: Reduce the environment load time
username_0: The current environment load time is about 20 mins. Would like to see if we can run in less time. If we can run two environment at the same time, this becomes a lower priority. 

Priority for demo: Medium or Low if ability to run dual environments.
<issue_comment>username_1: this probably takes a while unnecessarily
```
$ nl ../../nando_automation_demo/cloudformation.json |grep "yum -y update"
   573	                "command": "yum -y update"
```
<issue_comment>username_1: depends on: https://github.com/stelligent/nando_automation_demo/issues/2<issue_closed>
<issue_comment>username_2: This is good to go. A full stack is 30 minutes. Consecutive stacks will re use vpc/sg/rds and will take 15 minutes to build.ClCS