add equals and hashcode