abstract rewrite

stuffs