introduce CodeReader