Maximum-rank array codes and their application to crisscross error correction | Synapse