add NSCoding and NSCopying protocol