create downloader and decoder

- create components as separate things