Algumas partes do código foram comentadas para facilitar a compreensão