{
  "states": [
    "Connection_Established_Server_Greeting",
    "Not_Authenticated",
    "Authenticated",
    "Selected",
    "Logout"
  ],
  "initial_state": "Connection_Established_Server_Greeting",
  "final_states": [
    "Logout"
  ],
  "transitions": [
    {
      "from": "Connection_Established_Server_Greeting",
      "event": "connect without pre-authentication",
      "action": "Send OK greeting",
      "to": "Not_Authenticated"
    },
    {
      "from": "Connection_Established_Server_Greeting",
      "event": "Connects with pre-authentication",
      "action": "Send PREAUTH greeting",
      "to": "Authenticated"
    },
    {
      "from": "Connection_Established_Server_Greeting",
      "event": "Connection reject",
      "action": "Send BYE greeting",
      "to": "Logout"
    },
    {
      "from": "Not_Authenticated",
      "event": "Sends LOGIN or AUTHENTICATE command",
      "action": "Sends LOGIN or AUTHENTICATE command",
      "to": "Authenticated"
    },
    {
      "from": "Not_Authenticated",
      "event": "Sends LOGOUT or server shutdown",
      "action": "Close connection",
      "to": "Logout"
    },
    {
      "from": "Authenticated",
      "event": "Sends SELECT or EXAMINE command",
      "action": "Sends SELECT or EXAMINE command",
      "to": "Selected"
    },
    {
      "from": "Authenticated",
      "event": "Sends LOGOUT or server shutdown",
      "action": "Close connection",
      "to": "Logout"
    },
    {
      "from": "Authenticated",
      "event": "Send requests mailbox listing",
      "action": "List mailbox",
      "to": "Authenticated"
    },
    {
      "from": "Selected",
      "event": "Sends CLOSE, UNSELECT, or SELECT/EXAMINE fails",
      "action": "Sends CLOSE, UNSELECT, or SELECT/EXAMINE fails",
      "to": "Authenticated"
    },
    {
      "from": "Selected",
      "event": "Client manages messages",
      "action": "Read/write/delete messages",
      "to": "Selected"
    },
    {
      "from": "Selected",
      "event": "Sends LOGOUT or server shutdown",
      "action": "Close connection",
      "to": "Logout"
    }
  ]
}