first runable version,TODO: test