hypermedia state machine