Primeira versão, precisa ainda otimizar e resolver uns detalhes.