In general, the exit status of any process is defined by POSIX to be an 8-bit (unsigned) integer value, so the possible values are between 0 and 255 inclusive.
WEXITSTATUS(stat_val)[This] macro evaluates to the low-order 8 bits of the status argument that the child process passed to_exit()orexit(), or the value the child process returned frommain(). wait(3p)
The C standard specifies two constants,
EXIT_SUCCESSandEXIT_FAILURE, that may be passed to exit() to indicate successful or unsuccessful termination, respectively. exit(3)
Conventionally, EXIT_SUCCESS is equal to zero and all non-zero values are treated as a sign of an error.
However, POSIX-like shells including Bash reserve a range of high exit statuses for internal use, to signal that something went wrong in the called command without that command having a chance to return an explicit exit status (Bash manual):
For the shell's purposes, a command which exits with a zero exit status has succeeded. An exit status of zero indicates success. A non-zero exit status indicates failure. When a command terminates on a fatal signal N, bash uses the value of 128+N as the exit status. If a command is not found, the child process created to execute it returns a status of 127. If a command is found but is not executable, the return status is 126.
In practice, any value between 1 and 125 can thus be used to indicate an error in a program-specific manner. As @mosvy hinted in a comment, there was an effort by BSD to standardize some meaningful exit codes, but it never became universal. These unified exit codes started from 64, leaving anything below that value for program-specific use. The highest "standardized" value was 78, so it is clear that the values mentioned in your example are purely arbitrary program-specific codes.