Se realizó una encuesta a los estudiantes del curso de seminario de estadística, la cual consta de 12 variables. Esta encuesta se realizo con el fin de realizar algunas operaciones estadisticas y para el uso del programa R-studio en su anÔlisis.

DATOS<-read.csv("ESTADISTICA-MATRIZ.csv", stringsAsFactors = F, header= TRUE)

Las variables de la encuesta realizada son las que se enumeran enseguida:

names(DATOS)
 [1] "NOMBRE"       "EDAD"         "ESTATURA"     "PESO"         "CARRERA"     
 [6] "HIJOS"        "HERMANOS"     "ESTRATO"      "REGION"       "ESTADO.CIVIL"
[11] "MATRICULADO"  "SEXO"        

La cantidad de personas a las cuales se le hizo la encuenta fueron:

length(DATOS[,4])
[1] 22

A continuación se mostraran los respectivos histogramas de las variables estudiadas.

ggplot(DATOS,aes(x=DATOS[,2]))+geom_histogram(breaks=seq(20,50, by=7),binwidth =8,color="black", fill = "blue")+scale_x_continuous(name = "Rango de edad [AƱos]",breaks = seq(20,50, by=7),limits=c(20,50)) +
        scale_y_continuous(name = "Cantidad de personas encuestadas",limits=c(0,17),breaks = seq(0,16, by=1)) +
        ggtitle("Histograma de edades") +annotate("text", x=c(23.5,30.5,37.5,44.5),y=c(16.5,3.5,1.5,2.5),label=c("72.72%","16.64%","4.54%","9.1%"))

del anterior grafico se puede observar que 3 de las 22 personas encuestadas se encuentran en un rango de edad de 27-34 AƱos

ggplot(DATOS,aes(x=DATOS[,3]))+geom_histogram(breaks=seq(1.52,1.88, by=0.09),binwidth =8,color="black", fill = "red")+scale_x_continuous(name = "Rango de estatura",breaks = seq(1.52,1.88, by=0.09),limits=c(1.52,1.88)) +
        scale_y_continuous(name = "Cantidad de personas encuestadas",limits=c(0,10),breaks = seq(0,9, by=1)) +
        ggtitle("Histograma de estaturas")+annotate("text", x=c(1.565,1.655,1.745,1.835),y=c(9.5,6.5,3.5,4.5),label=c("40.9%","27.27%","13.64%","18.18%"))

del grafico anterior se puede observar que de las 22 personas encuestadas la mayor parte tienen una estatura de 1.52m a 1.61m.

ggplot(DATOS,aes(x=DATOS[,4]))+geom_histogram(breaks=seq(50,98, by=9.6),binwidth =8,color="black", fill = "green")+scale_x_continuous(name = "Rango de pesos en [Kg]",breaks = seq(50,98, by=9.6),limits=c(50,98)) +
        scale_y_continuous(name = "Cantidad de personas encuestadas",limits=c(0,11),breaks = seq(0,10, by=1)) +
        ggtitle("Histograma de peso")+annotate("text", x=c(54.8,64.4,74,83.6,93.2),y=c(10.5,3.5,6.5,1.5,2.5),label=c("45.45%","13.64%","27.27%","4.54%","9.1%"))

En el anterior grafico se puede observar que la mayor parte de los encuestados tienen un peso de 50Kg a 59,6Kg y representa el 45.45% de los encuestados, y solo una persona pesa entre 78,8Kg y 88.4Kg que representan el 4.54%

C<-as.data.frame(prop.table(table(DATOS[,5]))*100)
colnames(C)<-c("NUMERO", "PORCENTAJE")
ggplot(C, aes(x= NUMERO, y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 0.8) +scale_fill_brewer(palette = "Set1", labels=c("Ing. Civl","Arquitectura","Matematicas"))+ labs(title = "Histograma de profesión", x = NULL, y = "porcentaje personas encuestadas", fill = NULL)+scale_x_discrete(labels=NULL)+scale_y_discrete(labels=NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=3, vjust=-0.5, hjust=0.5 ,col="black")+ylim(0, 90)+coord_flip()
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

el 81,82% de los encuestados estudian o tienen como profesion la Ingenieria civil.

H<-as.data.frame(prop.table(table(DATOS[,6]))*100)
colnames(H)<-c("NUMERO", "PORCENTAJE")
ggplot(H, aes(x= NUMERO, y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 0.8) +scale_fill_brewer(palette = "Set1", labels=c("0 HIJOS","1 HIJO","2 HIJOS","3 HIJOS"))+ labs(title = "Histograma de cantidad de hijos", x = NULL, y = "porcentaje personas encuestadas", fill = NULL)+scale_x_discrete(labels=NULL)+scale_y_discrete(labels=NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=3, vjust=-0.5, hjust=0.5 ,col="black")+ylim(0, 90)+coord_flip()
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

el 81,82% de los encuestados no tienen hijos aĆŗn.

HE<-as.data.frame(prop.table(table(DATOS[,7]))*100)
colnames(HE)<-c("NUMERO", "PORCENTAJE")
ggplot(HE, aes(x= NUMERO, y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 0.8) +scale_fill_brewer(palette = "Set1", labels=c("0","1","2","3","4","5","6"))+ labs(title = "Histograma de cantidad de hermanos", x = NULL, y = "porcentaje de personas encuestadas", fill = "Cantidad de hermanos")+scale_x_discrete(labels=NULL)+scale_y_discrete(labels=NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=3, vjust=-0.5, hjust=0.5 ,col="black")+ylim(0, 30)+coord_flip()
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

la mayor parte de los encuestados tienen 1 hermano y corresponden al 27,27% del total

ES<-as.data.frame(prop.table(table(DATOS[,8]))*100)
colnames(ES)<-c("NUMERO", "PORCENTAJE")
ggplot(ES, aes(x= NUMERO, y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 0.8) +scale_fill_brewer(palette = "Set1", labels=c("2","3","4","5"))+ labs(title = "Histograma de Estratos", x = NULL, y = "porcentaje de personas encuestadas", fill = "Estrato")+scale_x_discrete(labels=NULL)+scale_y_discrete(labels=NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=3, vjust=-0.5, hjust=0.5 ,col="black")+ylim(0,55)+coord_flip()
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

el 50% de los encuestados son de estrato 3 y solo el 9,09% son de estrato 5

NAC<-as.data.frame(prop.table(table(DATOS[,9]))*100)
colnames(NAC)<-c("NUMERO", "PORCENTAJE")
ggplot(NAC, aes(x= NUMERO, y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 0.8) +scale_fill_brewer(palette = "Set1", labels=c("Valle","Cauca","Quindio","NariƱo","Cundinamarca"))+ labs(title = "Histograma", x = "Lugar de nacimiento", y = "Porcentaje de personas encuestadas", fill = "Departamento")+scale_x_discrete(labels=NULL)+scale_y_discrete(labels=NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=3, vjust=-0.5, hjust=0.5 ,col="black")+ylim(0, 75)+coord_flip()
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

CIVIL<-as.data.frame(prop.table(table(DATOS[,10]))*100)
colnames(CIVIL)<-c("NUMERO", "PORCENTAJE")
ggplot(CIVIL, aes(x= "", y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start=0)+scale_fill_brewer(palette = "Set1", labels=c("Soltero","Casado"))+ labs(title = "Histograma de estado civil", x = NULL, y = NULL, fill = "Estado civil")+scale_x_discrete(labels=NULL)+scale_y_discrete(labels=NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 1.5), size=4, vjust=c(-0.3,1), hjust=c(1.2,1.3) ,col="black")+ylim(0, 100)+ coord_polar("y", start=0)
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

el 86,36% de los encuestados son solteros.

MA<-as.data.frame(prop.table(table(DATOS[,11]))*100)
colnames(MA)<-c("NUMERO", "PORCENTAJE")
ggplot(MA, aes(x= "", y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start=0)+scale_fill_brewer(palette = "Set1", labels=c("Si","No"))+ labs(title = "Histograma", x = NULL, y = NULL, fill = "Matriculado")+scale_x_discrete(labels=NULL,breaks = NULL)+scale_y_discrete(labels=NULL,breaks = NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=c(-10,-3), hjust=c(0.1,1) ,col="black")+ylim(0, 100)+ coord_polar("y", start=0)
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

SEX<-as.data.frame(prop.table(table(DATOS[,12]))*100)
colnames(SEX)<-c("NUMERO", "PORCENTAJE")
ggplot(SEX, aes(x= "", y = PORCENTAJE, fill = NUMERO)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start=0)+scale_fill_brewer(palette = "Set1", labels=c("Maculino","Femenino"))+ labs(title = "Histograma", x = NULL, y = NULL, fill = "Sexo")+scale_x_discrete(labels=NULL,breaks = NULL)+scale_y_discrete(labels=NULL,breaks = NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=c(-10,-3), hjust=c(0.1,0.3) ,col="black")+ylim(0, 100)+ coord_polar("y", start=0)
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

la mayor parte de los encuestados son de genero masculino y corresponden al 63,64% del total de encuestados.

Las medidas de tendencia central(Moda, media y mediana), para algunas de las variables son las siguientes:

para la variable estatura

summary(DATOS[,3])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.520   1.585   1.660   1.671   1.750   1.880 

Para la variable edad

summary(DATOS[,2])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  21.00   23.00   24.50   27.41   27.75   48.00 

Para la variable Peso

summary(DATOS[,4])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  50.00   57.00   62.50   65.91   74.75   98.00 
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpTZSByZWFsaXrzIHVuYSBlbmN1ZXN0YSBhIGxvcyBlc3R1ZGlhbnRlcyBkZWwgY3Vyc28gZGUgc2VtaW5hcmlvIGRlIGVzdGFk7XN0aWNhLCBsYSBjdWFsIGNvbnN0YSBkZSAxMiB2YXJpYWJsZXMuDQpFc3RhIGVuY3Vlc3RhIHNlIHJlYWxpem8gY29uIGVsIGZpbiBkZSByZWFsaXphciBhbGd1bmFzIG9wZXJhY2lvbmVzIGVzdGFkaXN0aWNhcyB5IHBhcmEgZWwgdXNvIGRlbCBwcm9ncmFtYSBSLXN0dWRpbyBlbiBzdSBhbuFsaXNpcy4NCg0KYGBge3J9DQpEQVRPUzwtcmVhZC5jc3YoIkVTVEFESVNUSUNBLU1BVFJJWi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gRiwgaGVhZGVyPSBUUlVFKQ0KYGBgDQoNCkxhcyB2YXJpYWJsZXMgZGUgbGEgZW5jdWVzdGEgcmVhbGl6YWRhIHNvbiBsYXMgcXVlIHNlIGVudW1lcmFuIGVuc2VndWlkYToNCmBgYHtyfQ0KbmFtZXMoREFUT1MpDQpgYGANCkxhIGNhbnRpZGFkIGRlIHBlcnNvbmFzIGEgbGFzIGN1YWxlcyBzZSBsZSBoaXpvIGxhIGVuY3VlbnRhIGZ1ZXJvbjoNCmBgYHtyfQ0KbGVuZ3RoKERBVE9TWyw0XSkNCmBgYA0KDQpBIGNvbnRpbnVhY2nzbiBzZSBtb3N0cmFyYW4gbG9zIHJlc3BlY3Rpdm9zIGhpc3RvZ3JhbWFzIGRlIGxhcyB2YXJpYWJsZXMgIGVzdHVkaWFkYXMuDQoNCmBgYHtyfQ0KDQpnZ3Bsb3QoREFUT1MsYWVzKHg9REFUT1NbLDJdKSkrZ2VvbV9oaXN0b2dyYW0oYnJlYWtzPXNlcSgyMCw1MCwgYnk9NyksYmlud2lkdGggPTgsY29sb3I9ImJsYWNrIiwgZmlsbCA9ICJibHVlIikrc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiUmFuZ28gZGUgZWRhZCBbQfFvc10iLGJyZWFrcyA9IHNlcSgyMCw1MCwgYnk9NyksbGltaXRzPWMoMjAsNTApKSArDQogICAgICAgIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkNhbnRpZGFkIGRlIHBlcnNvbmFzIGVuY3Vlc3RhZGFzIixsaW1pdHM9YygwLDE3KSxicmVha3MgPSBzZXEoMCwxNiwgYnk9MSkpICsNCiAgICAgICAgZ2d0aXRsZSgiSGlzdG9ncmFtYSBkZSBlZGFkZXMiKSArYW5ub3RhdGUoInRleHQiLCB4PWMoMjMuNSwzMC41LDM3LjUsNDQuNSkseT1jKDE2LjUsMy41LDEuNSwyLjUpLGxhYmVsPWMoIjcyLjcyJSIsIjE2LjY0JSIsIjQuNTQlIiwiOS4xJSIpKQ0KDQoNCmBgYA0KZGVsIGFudGVyaW9yIGdyYWZpY28gc2UgcHVlZGUgb2JzZXJ2YXIgcXVlIDMgZGUgbGFzIDIyIHBlcnNvbmFzIGVuY3Vlc3RhZGFzIHNlIGVuY3VlbnRyYW4gZW4gdW4gcmFuZ28gZGUgZWRhZCBkZSAyNy0zNCBB8W9zDQoNCmBgYHtyfQ0KZ2dwbG90KERBVE9TLGFlcyh4PURBVE9TWywzXSkpK2dlb21faGlzdG9ncmFtKGJyZWFrcz1zZXEoMS41MiwxLjg4LCBieT0wLjA5KSxiaW53aWR0aCA9OCxjb2xvcj0iYmxhY2siLCBmaWxsID0gInJlZCIpK3NjYWxlX3hfY29udGludW91cyhuYW1lID0gIlJhbmdvIGRlIGVzdGF0dXJhIixicmVha3MgPSBzZXEoMS41MiwxLjg4LCBieT0wLjA5KSxsaW1pdHM9YygxLjUyLDEuODgpKSArDQogICAgICAgIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkNhbnRpZGFkIGRlIHBlcnNvbmFzIGVuY3Vlc3RhZGFzIixsaW1pdHM9YygwLDEwKSxicmVha3MgPSBzZXEoMCw5LCBieT0xKSkgKw0KICAgICAgICBnZ3RpdGxlKCJIaXN0b2dyYW1hIGRlIGVzdGF0dXJhcyIpK2Fubm90YXRlKCJ0ZXh0IiwgeD1jKDEuNTY1LDEuNjU1LDEuNzQ1LDEuODM1KSx5PWMoOS41LDYuNSwzLjUsNC41KSxsYWJlbD1jKCI0MC45JSIsIjI3LjI3JSIsIjEzLjY0JSIsIjE4LjE4JSIpKQ0KDQpgYGANCmRlbCBncmFmaWNvIGFudGVyaW9yIHNlIHB1ZWRlIG9ic2VydmFyIHF1ZSBkZSBsYXMgMjIgcGVyc29uYXMgZW5jdWVzdGFkYXMgbGEgbWF5b3IgcGFydGUgdGllbmVuIHVuYSBlc3RhdHVyYSBkZSAxLjUybSBhIDEuNjFtLg0KYGBge3J9DQpnZ3Bsb3QoREFUT1MsYWVzKHg9REFUT1NbLDRdKSkrZ2VvbV9oaXN0b2dyYW0oYnJlYWtzPXNlcSg1MCw5OCwgYnk9OS42KSxiaW53aWR0aCA9OCxjb2xvcj0iYmxhY2siLCBmaWxsID0gImdyZWVuIikrc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiUmFuZ28gZGUgcGVzb3MgZW4gW0tnXSIsYnJlYWtzID0gc2VxKDUwLDk4LCBieT05LjYpLGxpbWl0cz1jKDUwLDk4KSkgKw0KICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJDYW50aWRhZCBkZSBwZXJzb25hcyBlbmN1ZXN0YWRhcyIsbGltaXRzPWMoMCwxMSksYnJlYWtzID0gc2VxKDAsMTAsIGJ5PTEpKSArDQogICAgICAgIGdndGl0bGUoIkhpc3RvZ3JhbWEgZGUgcGVzbyIpK2Fubm90YXRlKCJ0ZXh0IiwgeD1jKDU0LjgsNjQuNCw3NCw4My42LDkzLjIpLHk9YygxMC41LDMuNSw2LjUsMS41LDIuNSksbGFiZWw9YygiNDUuNDUlIiwiMTMuNjQlIiwiMjcuMjclIiwiNC41NCUiLCI5LjElIikpDQoNCmBgYA0KRW4gZWwgYW50ZXJpb3IgZ3JhZmljbyBzZSBwdWVkZSBvYnNlcnZhciBxdWUgbGEgbWF5b3IgcGFydGUgZGUgbG9zIGVuY3Vlc3RhZG9zIHRpZW5lbiB1biBwZXNvIGRlIDUwS2cgYSA1OSw2S2cgeSByZXByZXNlbnRhIGVsIDQ1LjQ1JSBkZSBsb3MgZW5jdWVzdGFkb3MsIHkgc29sbyB1bmEgcGVyc29uYSBwZXNhIGVudHJlIDc4LDhLZyB5IDg4LjRLZyBxdWUgcmVwcmVzZW50YW4gZWwgNC41NCUNCg0KYGBge3J9DQpDPC1hcy5kYXRhLmZyYW1lKHByb3AudGFibGUodGFibGUoREFUT1NbLDVdKSkqMTAwKQ0KY29sbmFtZXMoQyk8LWMoIk5VTUVSTyIsICJQT1JDRU5UQUpFIikNCg0KZ2dwbG90KEMsIGFlcyh4PSBOVU1FUk8sIHkgPSBQT1JDRU5UQUpFLCBmaWxsID0gTlVNRVJPKSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjgpICtzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBsYWJlbHM9YygiSW5nLiBDaXZsIiwiQXJxdWl0ZWN0dXJhIiwiTWF0ZW1hdGljYXMiKSkrIGxhYnModGl0bGUgPSAiSGlzdG9ncmFtYSBkZSBwcm9mZXNp824iLCB4ID0gTlVMTCwgeSA9ICJwb3JjZW50YWplIHBlcnNvbmFzIGVuY3Vlc3RhZGFzIiwgZmlsbCA9IE5VTEwpK3NjYWxlX3hfZGlzY3JldGUobGFiZWxzPU5VTEwpK3NjYWxlX3lfZGlzY3JldGUobGFiZWxzPU5VTEwpKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9Mywgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikreWxpbSgwLCA5MCkrY29vcmRfZmxpcCgpDQpgYGANCmVsIDgxLDgyJSBkZSBsb3MgZW5jdWVzdGFkb3MgZXN0dWRpYW4gbyB0aWVuZW4gY29tbyBwcm9mZXNpb24gbGEgSW5nZW5pZXJpYSBjaXZpbC4NCmBgYHtyfQ0KSDwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKERBVE9TWyw2XSkpKjEwMCkNCmNvbG5hbWVzKEgpPC1jKCJOVU1FUk8iLCAiUE9SQ0VOVEFKRSIpDQoNCmdncGxvdChILCBhZXMoeD0gTlVNRVJPLCB5ID0gUE9SQ0VOVEFKRSwgZmlsbCA9IE5VTUVSTykpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC44KSArc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgbGFiZWxzPWMoIjAgSElKT1MiLCIxIEhJSk8iLCIyIEhJSk9TIiwiMyBISUpPUyIpKSsgbGFicyh0aXRsZSA9ICJIaXN0b2dyYW1hIGRlIGNhbnRpZGFkIGRlIGhpam9zIiwgeCA9IE5VTEwsIHkgPSAicG9yY2VudGFqZSBwZXJzb25hcyBlbmN1ZXN0YWRhcyIsIGZpbGwgPSBOVUxMKStzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1OVUxMKStzY2FsZV95X2Rpc2NyZXRlKGxhYmVscz1OVUxMKSsgZ2VvbV90ZXh0KGFlcyh5ID0gUE9SQ0VOVEFKRSwgbGFiZWwgPSBwYXN0ZShyb3VuZChQT1JDRU5UQUpFLCAyKSwgIiUiKSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaXplPTMsIHZqdXN0PS0wLjUsIGhqdXN0PTAuNSAsY29sPSJibGFjayIpK3lsaW0oMCwgOTApK2Nvb3JkX2ZsaXAoKQ0KYGBgDQplbCA4MSw4MiUgZGUgbG9zIGVuY3Vlc3RhZG9zIG5vIHRpZW5lbiBoaWpvcyBh+m4uDQpgYGB7cn0NCkhFPC1hcy5kYXRhLmZyYW1lKHByb3AudGFibGUodGFibGUoREFUT1NbLDddKSkqMTAwKQ0KY29sbmFtZXMoSEUpPC1jKCJOVU1FUk8iLCAiUE9SQ0VOVEFKRSIpDQoNCmdncGxvdChIRSwgYWVzKHg9IE5VTUVSTywgeSA9IFBPUkNFTlRBSkUsIGZpbGwgPSBOVU1FUk8pKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuOCkgK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGxhYmVscz1jKCIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IikpKyBsYWJzKHRpdGxlID0gIkhpc3RvZ3JhbWEgZGUgY2FudGlkYWQgZGUgaGVybWFub3MiLCB4ID0gTlVMTCwgeSA9ICJwb3JjZW50YWplIGRlIHBlcnNvbmFzIGVuY3Vlc3RhZGFzIiwgZmlsbCA9ICJDYW50aWRhZCBkZSBoZXJtYW5vcyIpK3NjYWxlX3hfZGlzY3JldGUobGFiZWxzPU5VTEwpK3NjYWxlX3lfZGlzY3JldGUobGFiZWxzPU5VTEwpKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9Mywgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikreWxpbSgwLCAzMCkrY29vcmRfZmxpcCgpDQpgYGANCmxhIG1heW9yIHBhcnRlIGRlIGxvcyBlbmN1ZXN0YWRvcyB0aWVuZW4gMSBoZXJtYW5vIHkgY29ycmVzcG9uZGVuIGFsIDI3LDI3JSBkZWwgdG90YWwNCg0KYGBge3J9DQpFUzwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKERBVE9TWyw4XSkpKjEwMCkNCmNvbG5hbWVzKEVTKTwtYygiTlVNRVJPIiwgIlBPUkNFTlRBSkUiKQ0KDQpnZ3Bsb3QoRVMsIGFlcyh4PSBOVU1FUk8sIHkgPSBQT1JDRU5UQUpFLCBmaWxsID0gTlVNRVJPKSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjgpICtzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBsYWJlbHM9YygiMiIsIjMiLCI0IiwiNSIpKSsgbGFicyh0aXRsZSA9ICJIaXN0b2dyYW1hIGRlIEVzdHJhdG9zIiwgeCA9IE5VTEwsIHkgPSAicG9yY2VudGFqZSBkZSBwZXJzb25hcyBlbmN1ZXN0YWRhcyIsIGZpbGwgPSAiRXN0cmF0byIpK3NjYWxlX3hfZGlzY3JldGUobGFiZWxzPU5VTEwpK3NjYWxlX3lfZGlzY3JldGUobGFiZWxzPU5VTEwpKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9Mywgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikreWxpbSgwLDU1KStjb29yZF9mbGlwKCkNCmBgYA0KZWwgNTAlIGRlIGxvcyBlbmN1ZXN0YWRvcyBzb24gZGUgZXN0cmF0byAzIHkgc29sbyBlbCA5LDA5JSBzb24gZGUgZXN0cmF0byA1DQoNCmBgYHtyfQ0KDQpOQUM8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShEQVRPU1ssOV0pKSoxMDApDQpjb2xuYW1lcyhOQUMpPC1jKCJOVU1FUk8iLCAiUE9SQ0VOVEFKRSIpDQoNCmdncGxvdChOQUMsIGFlcyh4PSBOVU1FUk8sIHkgPSBQT1JDRU5UQUpFLCBmaWxsID0gTlVNRVJPKSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjgpICtzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBsYWJlbHM9YygiVmFsbGUiLCJDYXVjYSIsIlF1aW5kaW8iLCJOYXJp8W8iLCJDdW5kaW5hbWFyY2EiKSkrIGxhYnModGl0bGUgPSAiSGlzdG9ncmFtYSIsIHggPSAiTHVnYXIgZGUgbmFjaW1pZW50byIsIHkgPSAiUG9yY2VudGFqZSBkZSBwZXJzb25hcyBlbmN1ZXN0YWRhcyIsIGZpbGwgPSAiRGVwYXJ0YW1lbnRvIikrc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9TlVMTCkrc2NhbGVfeV9kaXNjcmV0ZShsYWJlbHM9TlVMTCkrIGdlb21fdGV4dChhZXMoeSA9IFBPUkNFTlRBSkUsIGxhYmVsID0gcGFzdGUocm91bmQoUE9SQ0VOVEFKRSwgMiksICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2l6ZT0zLCB2anVzdD0tMC41LCBoanVzdD0wLjUgLGNvbD0iYmxhY2siKSt5bGltKDAsIDc1KStjb29yZF9mbGlwKCkNCmBgYA0KDQoNCmBgYHtyfQ0KQ0lWSUw8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShEQVRPU1ssMTBdKSkqMTAwKQ0KY29sbmFtZXMoQ0lWSUwpPC1jKCJOVU1FUk8iLCAiUE9SQ0VOVEFKRSIpDQoNCmdncGxvdChDSVZJTCwgYWVzKHg9ICIiLCB5ID0gUE9SQ0VOVEFKRSwgZmlsbCA9IE5VTUVSTykpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSkgKyBjb29yZF9wb2xhcigieSIsIHN0YXJ0PTApK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGxhYmVscz1jKCJTb2x0ZXJvIiwiQ2FzYWRvIikpKyBsYWJzKHRpdGxlID0gIkhpc3RvZ3JhbWEgZGUgZXN0YWRvIGNpdmlsIiwgeCA9IE5VTEwsIHkgPSBOVUxMLCBmaWxsID0gIkVzdGFkbyBjaXZpbCIpK3NjYWxlX3hfZGlzY3JldGUobGFiZWxzPU5VTEwpK3NjYWxlX3lfZGlzY3JldGUobGFiZWxzPU5VTEwpKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDEuNSksIHNpemU9NCwgdmp1c3Q9YygtMC4zLDEpLCBoanVzdD1jKDEuMiwxLjMpICxjb2w9ImJsYWNrIikreWxpbSgwLCAxMDApKyBjb29yZF9wb2xhcigieSIsIHN0YXJ0PTApDQpgYGANCmVsIDg2LDM2JSBkZSBsb3MgZW5jdWVzdGFkb3Mgc29uIHNvbHRlcm9zLg0KYGBge3J9DQpNQTwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKERBVE9TWywxMV0pKSoxMDApDQpjb2xuYW1lcyhNQSk8LWMoIk5VTUVSTyIsICJQT1JDRU5UQUpFIikNCg0KZ2dwbG90KE1BLCBhZXMoeD0gIiIsIHkgPSBQT1JDRU5UQUpFLCBmaWxsID0gTlVNRVJPKSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArIGNvb3JkX3BvbGFyKCJ5Iiwgc3RhcnQ9MCkrc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgbGFiZWxzPWMoIlNpIiwiTm8iKSkrIGxhYnModGl0bGUgPSAiSGlzdG9ncmFtYSIsIHggPSBOVUxMLCB5ID0gTlVMTCwgZmlsbCA9ICJNYXRyaWN1bGFkbyIpK3NjYWxlX3hfZGlzY3JldGUobGFiZWxzPU5VTEwsYnJlYWtzID0gTlVMTCkrc2NhbGVfeV9kaXNjcmV0ZShsYWJlbHM9TlVMTCxicmVha3MgPSBOVUxMKSsgZ2VvbV90ZXh0KGFlcyh5ID0gUE9SQ0VOVEFKRSwgbGFiZWwgPSBwYXN0ZShyb3VuZChQT1JDRU5UQUpFLCAyKSwgIiUiKSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaXplPTQsIHZqdXN0PWMoLTEwLC0zKSwgaGp1c3Q9YygwLjEsMSkgLGNvbD0iYmxhY2siKSt5bGltKDAsIDEwMCkrIGNvb3JkX3BvbGFyKCJ5Iiwgc3RhcnQ9MCkNCmBgYA0KDQpgYGB7cn0NClNFWDwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKERBVE9TWywxMl0pKSoxMDApDQpjb2xuYW1lcyhTRVgpPC1jKCJOVU1FUk8iLCAiUE9SQ0VOVEFKRSIpDQoNCmdncGxvdChTRVgsIGFlcyh4PSAiIiwgeSA9IFBPUkNFTlRBSkUsIGZpbGwgPSBOVU1FUk8pKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEpICsgY29vcmRfcG9sYXIoInkiLCBzdGFydD0wKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBsYWJlbHM9YygiTWFjdWxpbm8iLCJGZW1lbmlubyIpKSsgbGFicyh0aXRsZSA9ICJIaXN0b2dyYW1hIiwgeCA9IE5VTEwsIHkgPSBOVUxMLCBmaWxsID0gIlNleG8iKStzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1OVUxMLGJyZWFrcyA9IE5VTEwpK3NjYWxlX3lfZGlzY3JldGUobGFiZWxzPU5VTEwsYnJlYWtzID0gTlVMTCkrIGdlb21fdGV4dChhZXMoeSA9IFBPUkNFTlRBSkUsIGxhYmVsID0gcGFzdGUocm91bmQoUE9SQ0VOVEFKRSwgMiksICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2l6ZT00LCB2anVzdD1jKC0xMCwtMyksIGhqdXN0PWMoMC4xLDAuMykgLGNvbD0iYmxhY2siKSt5bGltKDAsIDEwMCkrIGNvb3JkX3BvbGFyKCJ5Iiwgc3RhcnQ9MCkNCmBgYA0KbGEgbWF5b3IgcGFydGUgZGUgbG9zIGVuY3Vlc3RhZG9zIHNvbiBkZSBnZW5lcm8gbWFzY3VsaW5vIHkgY29ycmVzcG9uZGVuIGFsIDYzLDY0JSBkZWwgdG90YWwgZGUgZW5jdWVzdGFkb3MuDQoNCkxhcyBtZWRpZGFzIGRlIHRlbmRlbmNpYSBjZW50cmFsKE1vZGEsIG1lZGlhIHkgbWVkaWFuYSksIHBhcmEgYWxndW5hcyBkZSBsYXMgdmFyaWFibGVzIHNvbiBsYXMgc2lndWllbnRlczoNCg0KcGFyYSBsYSB2YXJpYWJsZSBlc3RhdHVyYQ0KDQpgYGB7cn0NCnN1bW1hcnkoREFUT1NbLDNdKQ0KYGBgDQoNClBhcmEgbGEgdmFyaWFibGUgZWRhZA0KYGBge3J9DQpzdW1tYXJ5KERBVE9TWywyXSkNCmBgYA0KUGFyYSBsYSB2YXJpYWJsZSBQZXNvDQoNCmBgYHtyfQ0Kc3VtbWFyeShEQVRPU1ssNF0pDQpgYGANCg0K