diff --git a/useful/stg312/.size.out b/useful/stg312/.size.out
index 3d41a09ddc7853b5b4f2ab12be78f9c413854252..0d99857458ce8761e81a73517efd8809e496582d 100644
--- a/useful/stg312/.size.out
+++ b/useful/stg312/.size.out
@@ -1 +1 @@
-1729544	testando-sem-o-move-zuado.r1.tar.gz
+1729704	teste-versao-comentada.r1.tar.gz
diff --git a/useful/stg312/.upid.out b/useful/stg312/.upid.out
index 3423dee6ad8b057e2362e01c654584f134554e82..bc0a8da65e34c6fd9d88ee9f973f659629268847 100644
--- a/useful/stg312/.upid.out
+++ b/useful/stg312/.upid.out
@@ -1 +1 @@
-{"uploadid":"yDeom6yODgayCGLSwnCqfvTyqWrg0p1PyUc","status":"ok","code":"003","msg":"New upload succesful"}
\ No newline at end of file
+{"uploadid":"SKwGngE2ZgVnuqkUUMZrASSGPktr5iWQQeb","status":"ok","code":"003","msg":"New upload succesful"}
\ No newline at end of file
diff --git a/useful/stg312/openslx_gui b/useful/stg312/openslx_gui
index 12e9e866b242509371b2841bace8d660e767ccde..a60e4435be36a17ef973b96338014689d38f500b 100755
Binary files a/useful/stg312/openslx_gui and b/useful/stg312/openslx_gui differ
diff --git a/useful/stg312/openslx_gui.c b/useful/stg312/openslx_gui.c
index d02d7163ad85a92ae57e103b660dced0ddd96690..d3520483fc4a8e17331c72bf46cd8052ad476b00 100644
--- a/useful/stg312/openslx_gui.c
+++ b/useful/stg312/openslx_gui.c
@@ -16,6 +16,7 @@
 #include <jansson.h>
 #include "upload-utils.h"
 
+//FUnção que mostra a tela de upload antigo, caso ele exista
 void tela_upload_antigo(GtkWidget *w,gpointer p){
     GtkWidget *window_upload_antigo, *janela_ant, *button_continua_upload, *button_nao_continua, *label_nome_imagem, *label_parte_upload;
 	GtkBuilder *builder;
@@ -24,7 +25,7 @@ void tela_upload_antigo(GtkWidget *w,gpointer p){
     old_upload = malloc(255*sizeof(char));
 
     dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-    janela_ant = (GtkWidget*) data_ant->dado1;
+    janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 
     builder = gtk_builder_new(); //Cria um novo Builder gtk
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); //Carrega as coisas do arquivo .glade para utilizar nos widgets
@@ -35,7 +36,7 @@ void tela_upload_antigo(GtkWidget *w,gpointer p){
 	label_nome_imagem = GTK_WIDGET(gtk_builder_get_object(builder, "label_nome_imagem"));
 	label_parte_upload = GTK_WIDGET(gtk_builder_get_object(builder, "label_parte_upload"));
 
-    upload_in_progress = fopen(".progress.out", "a+");
+    upload_in_progress = fopen(".progress.out", "a+"); //Abre o arquivo para ler os dados do upload antigo, abre com a+ para poder dar rewind
     printf("Linha %d\n", __LINE__);
     rewind(upload_in_progress);
     fscanf(upload_in_progress, "%s", old_upload);
@@ -49,21 +50,23 @@ void tela_upload_antigo(GtkWidget *w,gpointer p){
     data_ant->dado1 = window_upload_antigo;
 
     g_signal_connect(window_upload_antigo, "destroy", G_CALLBACK(sair), NULL);
-    g_signal_connect(button_continua_upload, "clicked", G_CALLBACK(faz_upload_teste), data_ant);
+    g_signal_connect(button_continua_upload, "clicked", G_CALLBACK(faz_upload_teste), data_ant); //Isso chama a teste pois o upload.c lida com os dados do arquivo a ser feito o upload.
 	g_signal_connect(button_nao_continua, "clicked", G_CALLBACK(tela_principal), data_ant);
 
-    gtk_widget_hide(janela_ant);
+    gtk_widget_hide(janela_ant); //Esconde a janela anterior
     gtk_widget_show_all(window_upload_antigo);
 }
 
+//tela principal do programa, chamada após o login
 void tela_principal(GtkWidget *w,gpointer p){
 	GtkWidget *janela_principal, *janela_ant, *button_stg4, *button_ajuda_tela_principal, *button_stg4_update, *label_greeting;
 	GtkBuilder *builder;
     int status;
 
+    //Se não encontrou o arquivo .speed.out, calcula a velocidade de upload do usuário.
     if((access(".speed.out", F_OK) == -1)){
         puts("Entrou no if");
-        g_spawn_command_line_sync("./squash.sh 1", NULL, NULL, &status, NULL); // Executa o script
+        g_spawn_command_line_sync("speedtest-cli --bytes --simple > .speed.out", NULL, NULL, &status, NULL); // Executa o script
     }
 
     builder = gtk_builder_new(); //Cria um novo Builder gtk
@@ -71,11 +74,11 @@ void tela_principal(GtkWidget *w,gpointer p){
 
     dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 
-    FILE *upload_antigo = fopen(".progress.out", "w");
+    FILE *upload_antigo = fopen(".progress.out", "w"); //Zera o arquivo de upload antigo, o programa só chega aqui se o usuario ja lidou com o upload antigo
     fclose(upload_antigo);
 
-	if(data_ant){
-		janela_ant = (GtkWidget*) data_ant->dado1;
+	//if(data_ant){ //ver se isso faz alguma coisa
+		janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 
         char *greeting_text;
         greeting_text =  malloc(255*sizeof(char));
@@ -83,23 +86,20 @@ void tela_principal(GtkWidget *w,gpointer p){
         user_info dados_do_user;
 
         if(janela_ant){
-            gtk_widget_hide(janela_ant);
+            gtk_widget_hide(janela_ant); //Esconde a janela anterior
         }
 
-		pega_dados_do_usuario(&dados_do_user);
+		pega_dados_do_usuario(&dados_do_user); //Pega os dados do usuário recebidos no login
 		puts(dados_do_user.name);
 		puts(dados_do_user.login);
 		puts(dados_do_user.email);
 		puts(dados_do_user.city);
-        gera_arquivo_dados_usuario();
+        gera_arquivo_dados_usuario(); //Cria o user_data.info
 		strcpy(greeting_text, dados_do_user.name);
 		strcat(greeting_text, "!");
 		label_greeting = GTK_WIDGET(gtk_builder_get_object(builder, "label_greeting"));
 		gtk_label_set_text(GTK_LABEL(label_greeting), greeting_text);
-		/*
-		 * FAZ LOGIN
-		*/
-	}
+	//}
 
 
 
@@ -112,7 +112,6 @@ void tela_principal(GtkWidget *w,gpointer p){
 	data->dado1 = janela_principal;
 	data->builder = builder;
 	data->dado2 = button_stg4;
-	data->control = 0;
 
 	g_signal_connect(janela_principal, "destroy", G_CALLBACK(sair), NULL);
 	g_signal_connect (G_OBJECT (janela_principal), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
@@ -124,6 +123,7 @@ void tela_principal(GtkWidget *w,gpointer p){
 	gtk_widget_show_all(janela_principal);
 }
 
+//Função que mostra a tela de login para o usuario
 void tela_login(){
 
 	GtkWidget *window_login, *button_login, *entry_login, *entry_passwd, *label_login_erro;
@@ -150,20 +150,18 @@ void tela_login(){
 	data->dado3 = entry_login;
 	data->dado4 = entry_passwd;
 	data->dado5 = label_login_erro;
-	data->control = 0;
 
     printf("Linha %d\n", __LINE__);
     g_signal_connect (G_OBJECT (window_login), "key_press_event", G_CALLBACK (on_key_press), data);
     printf("Linha %d\n", __LINE__);
     g_signal_connect(entry_passwd, "activate", G_CALLBACK(faz_login), data);
-	g_signal_connect(button_login, "clicked", G_CALLBACK(faz_login), data);
-	//g_signal_connect(button_login, "clicked", G_CALLBACK(faz_login_dummy), data);
-	//g_signal_connect(entry_passwd, "activate", G_CALLBACK(faz_login_dummy), data);
+	g_signal_connect(button_login, "clicked", G_CALLBACK(faz_login), data); //Caso ele aperte enter com o foco no password
     printf("Linha %d\n", __LINE__);
 
 	gtk_widget_show_all(window_login);
 }
 
+// Main
 int main(int argc, char *argv[]){
 	XInitThreads();
 	gtk_init(&argc, &argv); //Inicia o GTK
@@ -175,7 +173,7 @@ int main(int argc, char *argv[]){
 	pid_t pid;
 	int status;
 
-	if (argc == 1){
+	if (argc == 1){ //Caso seja chamado para mostrar a GUI
 
 		GtkCssProvider *provider;
 		GdkDisplay *display;
@@ -194,7 +192,7 @@ int main(int argc, char *argv[]){
 		gtk_main();
 
 	}else{
-		if (argc == 6){
+		if (argc == 6){ //Se for a opção com parametros
 
 
 
@@ -207,7 +205,6 @@ int main(int argc, char *argv[]){
             gtk_entry_set_text(GTK_ENTRY(login), argv[4]);
             gtk_entry_set_text(GTK_ENTRY(senha), argv[5]);
 
-            data->control = 2;
             data->dado3 = login;
             data->dado4 = senha;
 
diff --git a/useful/stg312/openslx_gui.h b/useful/stg312/openslx_gui.h
index c506f53bf5ba906bc6df5d626b104cc42277829f..ddadd400eb04bbc720889c0ad10f57ca7c5d41d7 100644
--- a/useful/stg312/openslx_gui.h
+++ b/useful/stg312/openslx_gui.h
@@ -24,7 +24,6 @@ typedef struct dados{
 	GtkWidget *dado6;
 	GtkBuilder *builder;
 	GPid pid;
-	int control;
 	user_info informacoes;
 }dados;
 
diff --git a/useful/stg312/openslx_gui_v01.glade b/useful/stg312/openslx_gui_v01.glade
index 1072e67e9db2b280734335381542d3442e716f5c..9dab03a942c86a66323431d83a560392ad9b2a39 100644
--- a/useful/stg312/openslx_gui_v01.glade
+++ b/useful/stg312/openslx_gui_v01.glade
@@ -94,7 +94,7 @@ O programa irá sair agora.</property>
                 <property name="can_focus">False</property>
                 <property name="halign">start</property>
                 <property name="valign">center</property>
-                <property name="label" translatable="yes">Destino da Imagem:</property>
+                <property name="label" translatable="yes">Destino do sistema:</property>
               </object>
             </child>
           </object>
@@ -122,7 +122,7 @@ O programa irá sair agora.</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="tooltip_text" translatable="yes">Nome da imagem desejada. Pode um nome qualquer permitido pelo Linux. Ex: ubuntu, meu_ubuntu, meu_linux, escola_xxxxx</property>
-                    <property name="text" translatable="yes">nome-imagem</property>
+                    <property name="text" translatable="yes">nome-sistema</property>
                   </object>
                 </child>
               </object>
@@ -131,7 +131,7 @@ O programa irá sair agora.</property>
               <object class="GtkLabel" id="label3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Nome da Imagem:</property>
+                <property name="label" translatable="yes">Nome do seu sistema:</property>
               </object>
             </child>
           </object>
@@ -162,8 +162,8 @@ O programa irá sair agora.</property>
         </child>
         <child>
           <object class="GtkCheckButton" id="check_button_remove">
-            <property name="label" translatable="yes">Remover imagem
-não compactada?</property>
+            <property name="label" translatable="yes">Remover sistema
+não compactado?</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
@@ -252,11 +252,11 @@ não compactada?</property>
                   <object class="GtkLabel" id="label_info">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Bem vindo ao Gerador de novas Imagens
+                    <property name="label" translatable="yes">Bem vindo ao Gerador de novos sistemas
 do Openslx!
 
-Por essa interface você poderá gerar sua 
-própria imagem Linux com os pacotes
+Por essa interface você poderá gerar seu 
+próprio sistema Linux com os pacotes
 de seu interesse!
 
 Para iniciar o processo clique em algum
@@ -298,7 +298,7 @@ Se precisar de ajuda, ative
                 <property name="can_focus">False</property>
                 <child>
                   <object class="GtkButton" id="button_stg4">
-                    <property name="label" translatable="yes">Gerar sua imagem!</property>
+                    <property name="label" translatable="yes">Gerar seu sistema!</property>
                     <property name="name">gerar</property>
                     <property name="width_request">300</property>
                     <property name="height_request">50</property>
@@ -386,7 +386,7 @@ Se precisar de ajuda, ative
                 <property name="can_focus">False</property>
                 <child>
                   <object class="GtkButton" id="button_stg4_update">
-                    <property name="label" translatable="yes">Atualizar sua imagem!</property>
+                    <property name="label" translatable="yes">Atualizar seus sistemas!</property>
                     <property name="name">atualizar</property>
                     <property name="width_request">300</property>
                     <property name="height_request">50</property>
@@ -468,6 +468,7 @@ Se precisar de ajuda, ative
     <property name="pixbuf">pic.png</property>
   </object>
   <object class="GtkWindow" id="window_stg4_inic">
+    <property name="name">instal_window</property>
     <property name="can_focus">False</property>
     <property name="title" translatable="yes">OpenSLX - Stateless extensions</property>
     <property name="resizable">False</property>
@@ -628,12 +629,12 @@ instalar softwares</property>
                     <property name="halign">start</property>
                     <property name="valign">center</property>
                     <property name="label" translatable="yes">Upload completo!
-Aguarde alguns minutos e sua imagem estará
+Aguarde alguns minutos e seu sistema estará
 disponível no nosso site para configuração.
 Clique no botão abaixo para ser levado ao site.
 Nele faça login com o mesmo login e senha que usou para logar aqui
-e clique em Gerenciamento de Imagens. Edite as configurações da
-imagem que fez upload e ela estará pronta para uso!
+e clique em Gerenciamento de Imagens. Edite as configurações do sistema 
+que fez upload e ele estará pronta para uso!
 
 Caso o navegador não abra, entre no site:
 http://slxbox.dev.c3sl.br
@@ -764,8 +765,8 @@ http://slxbox.dev.c3sl.br
                     <property name="can_focus">False</property>
                     <property name="halign">start</property>
                     <property name="valign">center</property>
-                    <property name="label" translatable="yes">A sua imagem foi gerada com sucesso!
-Agora faça upload da imagem para nosso servidor!</property>
+                    <property name="label" translatable="yes">O seu sistema foi gerado com sucesso!
+Agora faça upload dele para nosso servidor!</property>
                   </object>
                 </child>
               </object>
@@ -1095,7 +1096,7 @@ Agora faça upload da imagem para nosso servidor!</property>
     <property name="message_type">warning</property>
     <property name="buttons">ok</property>
     <property name="text" translatable="yes">Atenção!</property>
-    <property name="secondary_text" translatable="yes">Não é possível criar imagens com espaços no nome.</property>
+    <property name="secondary_text" translatable="yes">Não é possível criar sistemas com espaços no nome.</property>
     <child internal-child="vbox">
       <object class="GtkBox" id="messagedialog-vbox3">
         <property name="can_focus">False</property>
diff --git a/useful/stg312/stg4.c b/useful/stg312/stg4.c
index 97eb07ea1d9ad0763ee8994750bfbff9401509a9..da1ab36e787464ac53885c6f2c1cc12839610420 100644
--- a/useful/stg312/stg4.c
+++ b/useful/stg312/stg4.c
@@ -12,77 +12,66 @@
 #include <gdk/gdk.h>
 #include <glib.h>
 
-//void stg4_tela_confirmacao_upload(GtkWidget *w,gpointer p){
+//Ultima tela do sistema, mostra ao usuario o que ele deve fazer para ter a imagem habilitada
 void stg4_tela_confirmacao_upload(GPid pid, gint status,gpointer p){
-	//pid_t pid; // Para quando for implementado
-	GtkWidget *window_stg4_upload_confirm, *janela_ant, *button_return_upload_confirm, *button_site; //*loading_screen; // Para quando for implementado
+
+	GtkWidget *window_stg4_upload_confirm, *janela_ant, *button_return_upload_confirm, *button_site;
 	GtkBuilder *builder;
 
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 
-	/////////
 	GtkWidget *loading;
 	loading = data_ant->dado6;
 	pid = data_ant->pid;
-	//gtk_widget_show(window);
-	checa_sucesso();
-	g_spawn_close_pid(pid);
-    /////////////
-
-    puts("Aqui");
+	checa_sucesso(); //Checa sucesso do upload
+	g_spawn_close_pid(pid); //Fecha o processo de upload que estava rodando
 
+	janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 
-	puts("Aqui8");
-	janela_ant = (GtkWidget*) data_ant->dado1;
-	puts("Aqui7");
     builder = gtk_builder_new(); //Cria um novo Builder gtk
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); //Carrega as coisas do arquivo .glade para utilizar nos widgets
 
-    puts("Aqui6");
+
 
 	window_stg4_upload_confirm = GTK_WIDGET(gtk_builder_get_object(builder, "window_stg4_upload_confirm"));
-	puts("Aqui9");
-	g_signal_connect(window_stg4_upload_confirm, "destroy", G_CALLBACK(chama_tela_principal), NULL);
-	puts("Aqui10");
+
+	g_signal_connect(window_stg4_upload_confirm, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
+
 	button_return_upload_confirm = GTK_WIDGET(gtk_builder_get_object(builder, "button_return_upload_confirm"));
 	button_site = GTK_WIDGET(gtk_builder_get_object(builder, "button_site"));
-	puts("Aqui11");
-	//loading_screen = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
 
-    puts("Aqui2");
 
 	struct dados *data = malloc(sizeof(*data));
 	data->dado1 = window_stg4_upload_confirm;
-	data->dado6 = window_stg4_upload_confirm;
 	data->builder = builder;
 	data->dado2 = button_return_upload_confirm;
-	data->control = 0;
 
 	g_signal_connect (G_OBJECT (window_stg4_upload_confirm), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
     g_signal_connect(button_return_upload_confirm, "clicked", G_CALLBACK(mata_janela_e_chama_tela_principal), data);
     g_signal_connect(button_site, "clicked", G_CALLBACK(abre_site), data);
 
-    puts("Aqui3");
 
-	gtk_widget_hide(janela_ant);
-	puts("Aqui4");
+
+	gtk_widget_hide(janela_ant); //Esconde a janela anterior
+
 	gtk_widget_hide(loading);
 	gtk_widget_show_all(window_stg4_upload_confirm);
-	puts("Aqui5");
+
 }
 
+//Isso não est implementado ainda, só ignore
 void stg4_tela_img_select(GtkWidget *w,gpointer p){
-	//pid_t pid; // Para quando for implementado
-	GtkWidget *window_escolha_imagem, *janela_ant, *button_update_img; //*loading_screen; // Para quando for implementado
+
+	GtkWidget *window_escolha_imagem, *janela_ant, *button_update_img;
 	GtkBuilder *builder;
 
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-	janela_ant = (GtkWidget*) data_ant->dado1;
+	janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 	builder = data_ant->builder;
 	int status;
 
 	window_escolha_imagem = GTK_WIDGET(gtk_builder_get_object(builder, "window_escolha_imagem"));
-	g_signal_connect(window_escolha_imagem, "destroy", G_CALLBACK(chama_tela_principal), NULL);
+	g_signal_connect(window_escolha_imagem, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
 	button_update_img = GTK_WIDGET(gtk_builder_get_object(builder, "button_update_img"));
 	//loading_screen = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
 
@@ -92,14 +81,13 @@ void stg4_tela_img_select(GtkWidget *w,gpointer p){
 	data->dado1 = window_escolha_imagem;
 	data->builder = builder;
 	data->dado2 = button_update_img;
-	data->control = 0;
 
 	g_signal_connect (G_OBJECT (window_escolha_imagem), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
-	gtk_widget_hide(janela_ant);
+	gtk_widget_hide(janela_ant); //Esconde a janela anterior
 	gtk_widget_show_all(window_escolha_imagem);
 }
 
-// // A função que exibe a 3a tela do programa, a tela final
+// // A função que exibe a 2a tela do programa, a tela de upload
 void stg4_2a_tela(GPid pid, gint status,gpointer p){
 
 	GtkWidget *window_stg4_final, *button_stg4_final_sair, *janela_ant, *button_help_4at, *button_stg4_upload, *label_tempo_upload;
@@ -110,7 +98,7 @@ void stg4_2a_tela(GPid pid, gint status,gpointer p){
 
 
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-	janela_ant = (GtkWidget*) data_ant->dado1;
+	janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 	builder = gtk_builder_new(); //Cria um novo Builder gtk
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); //Carrega as coisas do arquivo .glade para utilizar nos widgets
 
@@ -118,58 +106,47 @@ void stg4_2a_tela(GPid pid, gint status,gpointer p){
     GtkWidget *loading;
 	loading = data_ant->dado6;
 	pid = data_ant->pid;
+	checa_sucesso(); //Checa sucesso da criação da imagem
+	g_spawn_close_pid(pid); //Fecha o processo de criação de imagem que estava rodando
 
-	//gtk_widget_show(window);
-	checa_sucesso();
-	g_spawn_close_pid(pid);
 
 	window_stg4_final = GTK_WIDGET(gtk_builder_get_object(builder, "window_stg4_final"));
-	g_signal_connect(window_stg4_final, "destroy", G_CALLBACK(chama_tela_principal), NULL);
+	g_signal_connect(window_stg4_final, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
 
 	struct dados *data = malloc(sizeof(*data));
 
-
-    data->dado2 = window_stg4_final;
-    data->control = 0;
-
     button_help_4at = GTK_WIDGET(gtk_builder_get_object(builder, "button_help_4at"));
     button_stg4_final_sair = GTK_WIDGET(gtk_builder_get_object(builder, "button_stg4_final_sair"));
     button_stg4_upload = GTK_WIDGET(gtk_builder_get_object(builder, "button_stg4_upload"));
     label_tempo_upload = GTK_WIDGET(gtk_builder_get_object(builder, "label_tempo_upload"));
-    printf("Linha %d\n", __LINE__);
+
     strcpy(texto_tempo_upload, "Tempo estimado de upload: ");
-    sprintf(temp, "%d",calcula_tempo_upload() );
-    printf("Linha %d\n", __LINE__);
+    sprintf(temp, "%d",calcula_tempo_upload() ); //Estima o tempo de upload de imagem
     strcat(texto_tempo_upload, temp);
-    printf("Linha %d\n", __LINE__);
     strcat(texto_tempo_upload, " segundos");
-    printf("Linha %d\n", __LINE__);
-    gtk_label_set_text(GTK_LABEL(label_tempo_upload), texto_tempo_upload);
-    printf("Linha %d\n", __LINE__);
+    gtk_label_set_text(GTK_LABEL(label_tempo_upload), texto_tempo_upload); //Modifica o texto para o tempo calculado
+
     data->dado2 = button_stg4_final_sair;
-    data->dado3 = data_ant->dado4;
-    data->dado4 = data_ant->dado3;
-    data->dado5 = data_ant->dado5;
+    data->dado3 = data_ant->dado4; //Nome da imagem
+    data->dado4 = data_ant->dado3; //Pasta da imagem
     data->dado1 = window_stg4_final;
     data->builder = builder;
-    printf("Linha %d\n", __LINE__);
+
     g_signal_connect (G_OBJECT (window_stg4_final), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
     g_signal_connect(button_help_4at, "clicked", G_CALLBACK(help_screen), NULL);
-    printf("Linha %d\n", __LINE__);
+
     g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload), data);
     //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_teste), data);
-    //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_dummy), data);
-    printf("Linha %d\n", __LINE__);
-    g_signal_connect(button_stg4_final_sair, "clicked", G_CALLBACK(mata_janela_e_chama_tela_principal), data);
-    printf("Linha %d\n", __LINE__);
-    gtk_widget_hide(janela_ant);
-    printf("Linha %d\n", __LINE__);
+
+
+    g_signal_connect(button_stg4_final_sair, "clicked", G_CALLBACK(mata_janela_e_chama_tela_principal), data); //Caso o usuario não queira fazer upload por algum motivo, volta para a janela principal
+    gtk_widget_hide(janela_ant); //Esconde a janela anterior
     gtk_widget_hide(loading);
     gtk_widget_show_all(window_stg4_final);
-    printf("Linha %d\n", __LINE__);
 
 }
 
+//Função que chama o script que gera a imagem do usuario.
 void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 
 	GPid pid;
@@ -179,7 +156,7 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 	int i;
 	char *version, *home, *tmscripts, *pasta_do_stg4, *number_of_parts_str, **argv;
 
-	argv = malloc(10*sizeof(char*));
+	argv = malloc(10*sizeof(char*)); //Vetor de argumentos para a g_spawn
 	for (i=0; i < 10; i++){
 		argv[i] = malloc(255*sizeof(char));
 	}
@@ -194,108 +171,52 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 
 
 	window_stg4_final = GTK_WIDGET(gtk_builder_get_object(builder, "window_stg4_final"));
-	g_signal_connect(window_stg4_final, "destroy", G_CALLBACK(chama_tela_principal), NULL);
+	g_signal_connect(window_stg4_final, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
 	loading_screen = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
 	gtk_widget_show(loading_screen);
 
 	struct dados *data = malloc(sizeof(*data));
 
-    acha_tm_scripts(tmscripts);
-
-    strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4)));
-
-    strcat(version, ".r1");
-
-    strcpy(home, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado3)));
-
+    acha_tm_scripts(tmscripts); //Acha a pasta tm_scripts no sistema
+    strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); //Pega o nome da imagem que o usuario informou
+    strcat(version, ".r1"); //versão será lidada pela api depois, por isso é a versão .r1
+    strcpy(home, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado3))); //Pega a pasta que o usuário decidiu que a imagem será gerada
     strcpy(pasta_do_stg4, home);
-    strcat(home, "/pasta-");
-    strcat(home, version);
-    strcat(tmscripts, "/scripts");
-
-    //gboolean g_spawn_async_with_pipes (const gchar *working_directory, gchar **argv, gchar **envp, GSpawnFlags flags,
-    // GSpawnChildSetupFunc child_setup, gpointer user_data, GPid *child_pid, GError **error);
+    strcat(home, "/pasta-"); //Adiciona o nome da pasta gerada para comportar a imagem não compactada
+    strcat(home, version); //adiciona o nome da imagem
+    strcat(tmscripts, "/scripts"); //Adiciona /scripts para apontar para aonde está o script de clonagem do stage4
 
-    //strcpy(argv[0], CLONE_STG4_SCRIPT_DUMMY);
+    //strcpy(argv[0], CLONE_STG4_SCRIPT_DUMMY); //Se quiser testar a GUI e não gerar uma nova imagem, descomente essa linha e comente a debaixo
     strcpy(argv[0], CLONE_STG4_SCRIPT);
-
     strcpy(argv[1], tmscripts);
-
     strcpy(argv[2], pasta_do_stg4);
-
     strcpy(argv[3], "local");
-
     strcpy(argv[4], home	);
-
     strcpy(argv[5], version);
-
-    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data_ant->dado6)))
+    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data_ant->dado6))) //Caso o usuário tenha selecioando que quer remover a imagem não compactada
         strcpy(argv[6], "1");
     else
         strcpy(argv[6], "0");
 
-    sprintf(number_of_parts_str, "%d", NUMBER_OF_PARTS);
+    sprintf(number_of_parts_str, "%d", NUMBER_OF_PARTS); //Passa como argumento o número de partes que foi dividida a imagem
     strcpy(argv[7], number_of_parts_str);
 
-    argv[8] =  NULL;
-
-    if(g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL)){
-        puts("Deu certo o spawn");
-    }
+    argv[8] =  NULL;//ESSE ULTIMO PARAMETRO DEVE SER NULO, ele é o sentinela e informa o g_spawn onde acabam os parametros de invocação
 
+    g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);//NAO USE FORK PARA SPAWNAR SCRIPTS, use essa função. Documentação em: https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync
 
     data->dado6 = loading_screen;
     data->dado2 = window_stg4_final;
-    data->dado4 = data_ant->dado4;
-    data->dado3 = data_ant->dado3;
-    data->dado5 = data_ant->dado5;
-    data->control = 0;
+    data->dado4 = data_ant->dado4; //Nome da imagem
+    data->dado3 = data_ant->dado3; //Pasta da imagem
     data->dado1 = data_ant->dado1;
 
     data->pid = pid;
 
-    handler = stg4_2a_tela;
-    //handler = sai_do_script_teste;
+    handler = stg4_2a_tela; //Função que será chamada quando o g_spawn sair
 
-    g_child_watch_add(pid, handler, data);
-   /* printf("Linha %d\n", __LINE__);
+    g_child_watch_add(pid, handler, data); //Chama o handler quando o spawn acabar
 
-    printf("Linha %d\n", __LINE__);
-    button_help_4at = GTK_WIDGET(gtk_builder_get_object(builder, "button_help_4at"));
-    button_stg4_final_sair = GTK_WIDGET(gtk_builder_get_object(builder, "button_stg4_final_sair"));
-    button_stg4_upload = GTK_WIDGET(gtk_builder_get_object(builder, "button_stg4_upload"));
-    label_tempo_upload = GTK_WIDGET(gtk_builder_get_object(builder, "label_tempo_upload"));
-    printf("Linha %d\n", __LINE__);
-    strcpy(texto_tempo_upload, "Tempo estimado de upload: ");
-    sprintf(temp, "%d",calcula_tempo_upload() );
-    printf("Linha %d\n", __LINE__);
-    strcat(texto_tempo_upload, temp);
-    printf("Linha %d\n", __LINE__);
-    strcat(texto_tempo_upload, " segundos");
-    printf("Linha %d\n", __LINE__);
-    gtk_label_set_text(GTK_LABEL(label_tempo_upload), texto_tempo_upload);
-    printf("Linha %d\n", __LINE__);
-    data->dado2 = button_stg4_final_sair;
-    data->dado3 = data_ant->dado4;
-    data->dado4 = data_ant->dado3;
-    data->dado5 = data_ant->dado5;
-    data->dado1 = window_stg4_final;
-    data->builder = builder;
-    printf("Linha %d\n", __LINE__);
-    g_signal_connect (G_OBJECT (window_stg4_final), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
-    g_signal_connect(button_help_4at, "clicked", G_CALLBACK(help_screen), NULL);
-    printf("Linha %d\n", __LINE__);
-    //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload), data);
-    g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_teste), data);
-    //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_dummy), data);
-    printf("Linha %d\n", __LINE__);
-    g_signal_connect(button_stg4_final_sair, "clicked", G_CALLBACK(mata_janela_e_chama_tela_principal), data);
-    printf("Linha %d\n", __LINE__);
-    gtk_widget_hide(janela_ant);
-    printf("Linha %d\n", __LINE__);
-    gtk_widget_show_all(window_stg4_final);
-    printf("Linha %d\n", __LINE__);
-*/
 
 }
 
@@ -306,50 +227,46 @@ void stg4_clique_1a_tela(GtkWidget *w,gpointer p){
 	GtkBuilder *builder;
 
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-	janela_ant = (GtkWidget*) data_ant->dado1;
+	janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 	builder = data_ant->builder;
 
 	window_stg4_escolha = GTK_WIDGET(gtk_builder_get_object(builder, "window_stg4_escolha"));
-	g_signal_connect(window_stg4_escolha, "destroy", G_CALLBACK(chama_tela_principal), NULL);
+	g_signal_connect(window_stg4_escolha, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
 
 	check_button_remove = GTK_WIDGET(gtk_builder_get_object(builder, "check_button_remove"));
 	button_help_2at = GTK_WIDGET(gtk_builder_get_object(builder, "button_help_2at"));
 	file_chooser_local = GTK_WIDGET(gtk_builder_get_object(builder, "file_chooser_local"));
 	button_clonar  = GTK_WIDGET(gtk_builder_get_object(builder, "button_clonar"));
 	entry_imagem = GTK_WIDGET(gtk_builder_get_object(builder, "entry_imagem"));
-	//entry_versao  = GTK_WIDGET(gtk_builder_get_object(builder, "entry_versao"));
 
-	gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(file_chooser_local), TRUE);
+	gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER(file_chooser_local), TRUE); //Ativa a opção de criar diretórios do gtk_filechooser
 	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(file_chooser_local), "/home");
 	struct dados *data = malloc(sizeof(*data));
 	data->dado1 = window_stg4_escolha;
 	data->builder = builder;
-	data->dado2 = button_clonar;
-	data->dado3 = file_chooser_local;
-	data->dado4 = entry_imagem;
-	//data->dado5 = entry_versao;
-	data->dado6 = check_button_remove;
-	data->control = 0;
+	data->dado2 = button_clonar; //Para se o page-up for pressionado, ele avança pro próximo passo
+	data->dado3 = file_chooser_local; //Guarda a pasta selecionada por ele
+	data->dado4 = entry_imagem; //Guarda o nome da imagem
+	data->dado6 = check_button_remove; //Guarda se o usuario selecionou que quer deletar a imagem não compactada
 
     g_signal_connect(entry_imagem, "activate", G_CALLBACK(stg4_clique_2a_tela), data);
-    //g_signal_connect(entry_versao, "activate", G_CALLBACK(stg4_clique_2a_tela), data);
 	g_signal_connect (G_OBJECT (window_stg4_escolha), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
 	g_signal_connect(button_help_2at, "clicked", G_CALLBACK(help_screen), data);
 	g_signal_connect(button_clonar, "clicked", G_CALLBACK(stg4_clique_2a_tela_caller), data);
 
-	gtk_widget_hide(janela_ant);
+	gtk_widget_hide(janela_ant); //Esconde a janela anterior
 	gtk_widget_show_all(window_stg4_escolha);
 
 }
 
-//função que exibe a primeira tela do stg 4, informando o usuário que ele iniciou o programa
+//função que exibe a primeira tela do processo de clonagem, informando o usuário que ele deve instalar os pacotes desejados
 void stg4_inicio(GtkWidget *w,gpointer p){
 
 	GtkWidget *window_stg4_inic, *janela_ant, *button_geren, *button_stg4_proximo, *button_help_1at;
 	GtkBuilder *builder;
 
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-	janela_ant = (GtkWidget*) data_ant->dado1;
+	janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 	builder = data_ant->builder;
 
 	button_help_1at = GTK_WIDGET(gtk_builder_get_object(builder, "button_help_1at"));
@@ -359,25 +276,23 @@ void stg4_inicio(GtkWidget *w,gpointer p){
 	//button_shell = GTK_WIDGET(gtk_builder_get_object(builder, "button_shell"));
 
 
-	g_signal_connect(window_stg4_inic, "destroy", G_CALLBACK(chama_tela_principal), NULL);
+	g_signal_connect(window_stg4_inic, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
 
 	struct dados *data = malloc(sizeof(*data));
 	data->dado1 = window_stg4_inic;
 	data->builder = builder;
 	data->dado2 = button_stg4_proximo;
-	data->control = 1;
 
 	g_signal_connect (G_OBJECT (window_stg4_inic), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
 	g_signal_connect(button_help_1at, "clicked", G_CALLBACK(help_screen), data);
-	if(!(strcmp(gtk_widget_get_name(w), "atualizar"))){
+	if(!(strcmp(gtk_widget_get_name(w), "atualizar"))){ //Caso ele tenha clicado no botão de atualizar uma imagem
 		g_signal_connect(button_stg4_proximo, "clicked", G_CALLBACK(stg4_tela_img_select), data);
 	}else{
-		g_signal_connect(button_stg4_proximo, "clicked", G_CALLBACK(stg4_clique_1a_tela), data);
+		g_signal_connect(button_stg4_proximo, "clicked", G_CALLBACK(stg4_clique_1a_tela), data); //Caso ele tenha clicado em gerar imagem
 	}
 	g_signal_connect(button_geren, "clicked", G_CALLBACK(abre_software_center), data);
-	//g_signal_connect(button_shell, "clicked", G_CALLBACK(abre_shell), data);
 
-	gtk_widget_hide(janela_ant);
+	gtk_widget_hide(janela_ant); //Esconde a janela anterior
 	gtk_widget_show_all(window_stg4_inic);
 
 
diff --git a/useful/stg312/upload-utils.c b/useful/stg312/upload-utils.c
index e3521a05b7320f6742f88fd70f1d8ceb5199b4e4..b6abb937412914c402930c931bf81d093e938a6f 100644
--- a/useful/stg312/upload-utils.c
+++ b/useful/stg312/upload-utils.c
@@ -39,7 +39,7 @@ void logout(){
         curl_easy_setopt(curl, CURLOPT_URL, API_URL);
         curl_easy_setopt(curl, CURLOPT_POST, 1);
         curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "request=logout");
-        curl_easy_perform(curl);
+        curl_easy_perform(curl); //faz logout
     }
 
 }
@@ -59,9 +59,9 @@ int checa_upload_antigo(){
 
     puts(old_upload);
     if(!(strcmp(old_upload, "Upload"))){
-        return 1;
+        return 1; //Tem um upload antigo
     }
-    return 0;
+    return 0; //Não tem um upload antigo, continua normalmente
 }
 
 //Estima o tempo de upload, não faz a estimativa correta, mas só deus sabe como fazer essa joça realmente. O curl faz muita coisa que demora mais que só o upload, eu assumo
@@ -74,37 +74,37 @@ int calcula_tempo_upload(){
     velocidade =  malloc(255*sizeof(char));
     int velocidade_f;
 
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
     puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
+    fscanf(velocidade_upload, "%s", velocidade); //Le a velocidade de upload
     puts(velocidade);
     puts("vai calcular");
-    velocidade_f = atoi(velocidade);
+    velocidade_f = atoi(velocidade); //Transforma em float
     puts("calculou");
     puts("chegou aqui");
-    return(10*(1953)/velocidade_f*3); // *3 para levar em conta problemas de rede. *10 pois o curl demora muito mais que só fazer o upload
+    return((1953)/velocidade_f*3); // *3 para levar em conta problemas de rede.
 }
 
 //Função que gera o arquivo de dados do usuario, tanto os que foram recebidos do banco quanto informaçõs de sistema. Esse arquivo
 // sera submetido junto à imagem quando o upload for feito.
 void gera_arquivo_dados_usuario(){
 
-    user_info dados_do_user;
-    pega_dados_do_usuario(&dados_do_user);
+    user_info dados_do_user; //Estrutura definida em openslx_gui.h para guardar os dados do usuario
+    pega_dados_do_usuario(&dados_do_user); //Abre o arquivo gerado no Login e coloca os dados do usuario na estrutura dados_do_user
     FILE *user_data_file;
-    user_data_file = fopen("user_data.info", "wr");
+    user_data_file = fopen("user_data.info", "wr"); //Arquivo com os dados do usuario que será feito o upload
 
     fputs("Nome do criador da imagem: ", user_data_file);
     fputs(dados_do_user.name, user_data_file);
@@ -116,13 +116,13 @@ void gera_arquivo_dados_usuario(){
     fputs(dados_do_user.city, user_data_file);
 
     time_t timer;
-    time(&timer);
+    time(&timer); //pega o tempo de criação da imagem
     fputs("\nData da criação da imagem: ", user_data_file);
-    fputs(ctime(&timer), user_data_file);
+    fputs(ctime(&timer), user_data_file); //Coloca o tempo de criação da imagem no arquivo
 
     fclose(user_data_file);
-    system("uname -a >> user_data.info");
-    system("lsb_release -a >> user_data.info");
+    system("uname -a >> user_data.info"); //Coloca informações sobre o usuario no arquivo
+    system("lsb_release -a >> user_data.info"); //Coloca informações sobre o sistema no arquivo
 
 
 
@@ -314,7 +314,7 @@ int checa_sucesso_get_info(){
 
 }
 //Função que faz o Login do usuario no sistema. Utiliza a biblioteca Libcurlc para realizar as requisições http.
-// Guarda as saidas em arquivos para uso posterios. Guarda o cookie para uso posterios tbm
+// Guarda as saidas em arquivos para uso posterior. Guarda o cookie para uso posterior tbm
 int faz_login_dummy(GtkWidget *w, gpointer p){
     dados *data_ant = p; //Pega os dados recebidos pela chamada da função
     tela_principal(NULL, data_ant);
@@ -332,9 +332,9 @@ int faz_login(GtkWidget *w, gpointer p){
     resp = malloc(255*sizeof(char));
     puts("teste");
     puts(gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
-    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
+    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); //Login do usuario
     strcat(data, "&passwd=");
-    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4)));
+    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); //Senha do usuario
     strcat(data, "&request=login");
     puts(data);
 
@@ -367,7 +367,7 @@ int faz_login(GtkWidget *w, gpointer p){
         if(checa_sucesso_do_login()){ //Se o login foi bem sucedido, pega as informações do usuário
 
             printf("Linha %d\n", __LINE__);
-            char *data2="request=getinfo";
+            char *data2="request=getinfo"; //Muda a requisição para getinfo, recebendo os dados do usuario
             curl_easy_setopt(curl, CURLOPT_WRITEDATA, dados_do_user);
             curl_easy_setopt(curl, CURLOPT_POST, 1);
             curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
@@ -392,26 +392,21 @@ int faz_login(GtkWidget *w, gpointer p){
             curl_easy_cleanup(curl);
 
             if(checa_upload_antigo()){ //Verifica se existe um upload antigo nessa máquina
-                tela_upload_antigo(NULL, data_ant);
+                tela_upload_antigo(NULL, data_ant); //Se tiver, chama a tela de uplaod antigo
             }else{
-                if(data_ant->control == 0){
-                    tela_principal(NULL, data_ant);
-                }
+                tela_principal(NULL, data_ant); //Se não, chama a tela principal
             }
             return 1;
         }
         printf("Linha %d\n", __LINE__);
     }
     printf("Linha %d\n", __LINE__);
-    gtk_label_set_text(GTK_LABEL(data_ant->dado5), "Login nao encontrado!");
+    gtk_label_set_text(GTK_LABEL(data_ant->dado5), "Login nao encontrado!"); //O login não foi bem sucedido
     printf("Linha %d\n", __LINE__);
     return 0;
 }
 
 //Função que faz o upload da imagem + dados para a api do site. Atualmente faz upload só de UM arquivo
-void faz_upload_dummy(GtkWidget *w, gpointer p){
-   // stg4_tela_confirmacao_upload(NULL, p);
-}//Função de teste dummy
 
 //função de teste que faz upload da imagem teste.r1
 void faz_upload_teste(GtkWidget *w, gpointer p){
@@ -423,7 +418,7 @@ void faz_upload_teste(GtkWidget *w, gpointer p){
     struct dados *data = malloc(sizeof(*data));
     GPid pid;
 	GChildWatchFunc handler;
-	char **argv;
+	char **argv; //Vetor de argumentos para a g_spawn
 	argv = malloc(10*sizeof(char*));
 	for (i=0; i < 10; i++){
 		argv[i] = malloc(255*sizeof(char));
@@ -434,19 +429,17 @@ void faz_upload_teste(GtkWidget *w, gpointer p){
     loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
 
     gtk_widget_show_all(loading);
-    strcpy(argv[0], "./upload");
-    strcpy(argv[1], "/home/ent13/Desktop/pasta-teste");
-    strcpy(argv[2], "teste");
-    strcpy(argv[3], ".r1");
-    argv[4] = NULL;
+    strcpy(argv[0], "./upload"); //Comando a ser invocado pelo shell
+    strcpy(argv[1], "/home/ent13/Desktop/pasta-teste"); //Local do arquivo de uplaod teste
+    strcpy(argv[2], "teste"); //nome da imagem
+    strcpy(argv[3], ".r1"); //versão da imagem
+    argv[4] = NULL; //ESSE ULTIMO PARAMETRO DEVE SER NULO, ele é o sentinela e informa o g_spawn onde acabam os parametros de invocação
     g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL); //NAO USE FORK PARA SPAWNAR SCRIPTS, use essa função. Documentação em: https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync
-    handler = stg4_tela_confirmacao_upload;
+    handler = stg4_tela_confirmacao_upload; //Função a ser chamada quando o g_spawn sair
     data->dado6 = loading;
     data->dado1 = data_ant->dado1;
     data->pid = pid;
-    g_child_watch_add(pid, handler, data);
-   // stg4_tela_confirmacao_upload(NULL, p);
-
+    g_child_watch_add(pid, handler, data); //Chamará a função apontada por handler ao sair do processo criado pelo g_spawn
 }
 
 void faz_upload(GtkWidget *w, gpointer p){
@@ -459,7 +452,7 @@ void faz_upload(GtkWidget *w, gpointer p){
     int i;
     GPid pid;
 	GChildWatchFunc handler;
-    char **argv;
+    char **argv; //Vetor de argumentos do G_spawn
 	argv = malloc(10*sizeof(char*));
 	for (i=0; i < 10; i++){
 		argv[i] = malloc(255*sizeof(char));
@@ -475,22 +468,20 @@ void faz_upload(GtkWidget *w, gpointer p){
 
     gtk_widget_show_all(loading);
     printf("Linha %d\n", __LINE__);
-    strcpy(argv[0], "./upload");
-    strcpy(argv[1], gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado4)));
-    strcpy(argv[2], gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
-    strcpy(argv[3], ".r1");
-    argv[4] = NULL;
+    strcpy(argv[0], "./upload"); //Comando a ser invocado pelo shell
+    strcpy(argv[1], gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado4))); //Caminho para a imagem criada pelo usuario
+    strcpy(argv[2], gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); //Nome da imagem
+    strcpy(argv[3], ".r1"); //versão, isso será depois lidado pela api, por isso o .r1
+    argv[4] = NULL; //ESSE ULTIMO PARAMETRO DEVE SER NULO, ele é o sentinela e informa o g_spawn onde acabam os parametros de invocação
     printf("Linha %d\n", __LINE__);
     g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL); //NAO USE FORK PARA SPAWNAR SCRIPTS, use essa função. Documentação em: https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync
 
     printf("Linha %d\n", __LINE__);
 
-    handler = stg4_tela_confirmacao_upload;
+    handler = stg4_tela_confirmacao_upload; //Função a ser chamada quando o g_spawn sair
     data->dado6 = loading;
     data->dado1 = data_ant->dado1;
     data->pid = pid;
     printf("Linha %d\n", __LINE__);
-    g_child_watch_add(pid, handler, data);
-    //stg4_tela_confirmacao_upload(NULL, p);
-
+    g_child_watch_add(pid, handler, data); //Chamará a função apontada por handler ao sair do processo criado pelo g_spawn
 }
diff --git a/useful/stg312/upload-utils.h b/useful/stg312/upload-utils.h
index 82e030c17d0e9de5b9bfa4f3c09fda7992864d37..1dd972c482b3952ab93b9d82c96dc238bffabc49 100644
--- a/useful/stg312/upload-utils.h
+++ b/useful/stg312/upload-utils.h
@@ -17,7 +17,6 @@ void gera_arquivo_dados_usuario();
 int checa_sucesso_do_login();
 void pega_dados_do_usuario(user_info *dados);
 int checa_sucesso_get_info();
-int faz_login_dummy(GtkWidget *w, gpointer p);
 int faz_login(GtkWidget *w, gpointer p);
 void faz_upload_dummy(GtkWidget *w, gpointer p);
 void faz_upload_teste(GtkWidget *w, gpointer p);
diff --git a/useful/stg312/utils.c b/useful/stg312/utils.c
index 90ff9b13c8cc6a9c147b67c9ec5694dec100811f..9c2798426ae18e9d1ee7a011e479589ec8384c16 100644
--- a/useful/stg312/utils.c
+++ b/useful/stg312/utils.c
@@ -42,15 +42,16 @@ gboolean on_key_press (GtkWidget *w, GdkEventKey *event, gpointer p){
 	window = w;
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 	button = data_ant->dado2; //Botão que da continuidade ao software, dado->2 por comodidade.
+    puts(gtk_widget_get_name(w));
 
 	switch (event->keyval){
 
-		case GDK_KEY_F10: //Apertoyu f10
+		case GDK_KEY_F10: //Apertou f10
 			help_screen(NULL, NULL);
 		break;
 
-		case GDK_KEY_F6: //Apertoyu f6
-            if(data_ant->control == 1)
+		case GDK_KEY_F6: //Apertou f6
+            if(!strcmp(gtk_widget_get_name(w), "instal_window"))
                 abre_shell(NULL, NULL);
 		break;
 
@@ -269,7 +270,7 @@ void mata_janela_e_chama_tela_principal(GtkWidget *w, gpointer p){
 	puts("teste2");
 	janela_ant = data_ant->dado1;
 	puts("teste");
-	gtk_widget_hide(janela_ant);//Nao achou isso, nao cuspiu teste 4
+	gtk_widget_hide(janela_ant); //Esconde a janela anterior//Nao achou isso, nao cuspiu teste 4
 	puts("teste4");
     g_signal_emit_by_name(janela_ant, "destroy");
     puts("teste5");