Durante la clase de Seminario de Construcciones se realizó una encuesta a las personas que han estado en el salon de clase. En total, han sido 25 las personas encuestadas (hasta el dia 9 de marzo del 2018). A cada una de las personas se le preguntó la siguiente información:
M2<-read.csv("Matriz2.csv")
library(ggplot2)
library(scales)
library(data.table)
package <U+393C><U+3E31>data.table<U+393C><U+3E32> was built under R version 3.4.4data.table 1.11.0
The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
Documentation: ?data.table, example(data.table) and browseVignettes("data.table")
Release notes, videos and slides: http://r-datatable.com
names(M2)
[1] "NOMBRE" "EDAD" "PESO"
[4] "ESTATURA" "ESTRATO" "NIVEL.ACADEMICO"
[7] "HERMANOS" "SEXO" "HIJOS"
[10] "CIVIL" "MATRICULADO" "REGION"
El nivel académico consiste en si es de pregrado, maestria o doctorado y la region consiste en su lugar de procedencia (según el departamento donde nació).
La muestra esta distribuida de la siguiente manera entre hombres y mujeres:
#sexo<-M2$SEXO
#sexo<-as.factor(sexo)
#levels(sexo)<-c("Hombres","Mujeres")
#dat_sexo<-table(sexo)
#barplot(dat_sexo,main = "Hombres y mujeres encuestados.",
# ylab="# de personas", col=c("blue","pink"))
sexo<-as.data.frame(prop.table(table(M2$SEXO))*100)
colnames(sexo)<-c("Sexo", "PORCENTAJE")
s.n<-c("1", "2")
ggplot(sexo, aes(x = Sexo, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill =c("blue", "pink")) + theme(legend.position = "right", legend.background = element_rect(fill = "white", size = 0.5, linetype = "solid", colour = "darkgrey")) + ggtitle("Hombres y mujeres encuestados") + xlab("") + ylab("%") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_x_discrete(breaks = s.n, labels = c("Hombres", "Mujeres")) + scale_y_continuous(breaks = seq(0, 60, by = 5), limits = c(0,60))

Históricamente la Ingenieria Civil ha sido una profesión en que la gran mayoria de personas que la estudian y ejercen son del género masculino, y observar esta distribución en el curso muestra un cambio enorme con respecto a lo que sucedia años atrás.
La distribución por edades es la siguiente:
#edad<-M2$EDAD
#edad<-as.factor(edad)
#dat_edad<-table(edad)
#barplot(dat_edad,main = "Edades de los encuestados.",
# xlab="Edad", ylab="# de personas", col="gray")
edad<-as.data.frame(prop.table(table(M2$EDAD))*100)
colnames(edad)<-c("Edad", "PORCENTAJE")
e.n<-c("21", "22", "23", "24", "25", "26", "27", "28", "30", "31", "37", "40", "47", "48", "49")
ggplot(edad, aes(x = Edad, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8) + theme(legend.position = "right", legend.background = element_rect(fill = "white", size = 0.5, linetype = "solid", colour = "darkgrey")) + ggtitle("Edades de los encuestados") + xlab("") + ylab("%") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_x_discrete(breaks = e.n, labels = c("21", "22", "23", "24", "25", "26", "27", "28", "30", "31", "37", "40", "47", "48", "49")) + scale_y_continuous(breaks = seq(0, 20, by = 5), limits = c(0,20))

Tambien lo podemos observar de la siguiente manera:
por_edad<-M2$EDAD
por_edad<-as.factor(por_edad)
total<-length(por_edad)
porcent<-summary(por_edad)
porcent2<-100*porcent/total
label1<-paste(levels(por_edad),"años",sep=" ")
label2<-paste(label1,"(",sep="")
label3<-paste(label2,porcent2,sep="")
label4<-paste(label3,"%",sep="")
label<-paste(label4,")",sep="")
dat_poredad<-table(por_edad)
pie(dat_poredad,sub = "Edades de los encuestados.",
labels=label,
col=c("blueviolet","darkgoldenrod1","salmon","bisque1","blue","darkolivegreen1","coral","midnightblue","pink","orange","seagreen","aquamarine","yellow","green","red"), clockwise=TRUE,radius=1.08)

La distribución de personas solteras y casadas es la siguiente:
#EstCivil<-M2$CIVIL
#EstCivil<-as.factor(EstCivil)
#levels(EstCivil)<-c("Solteros","Casados")
#dat_EstCivil<-table(EstCivil)
#barplot(dat_EstCivil,main = "Cantidad de solteros y casados.",
# ylab="# de personas", col=c("green","red"))
#box()
EstCivil<-as.data.frame(prop.table(table(M2$SEXO))*100)
colnames(EstCivil)<-c("EstadoCivil", "PORCENTAJE")
s.n<-c("1", "2")
ggplot(EstCivil, aes(x = EstadoCivil, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill =c("green", "red")) + theme(legend.position = "right", legend.background = element_rect(fill = "white", size = 0.5, linetype = "solid", colour = "darkgrey")) + ggtitle("Cantidad de solteros y casados") + xlab("") + ylab("%") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_x_discrete(breaks = s.n, labels = c("Solteros", "Casados")) + scale_y_continuous(breaks = seq(0, 60, by = 5), limits = c(0,60))

A continuación se observa cuál es el lugar de origen de las personas encuestadas:
region<-M2$REGION
region<-as.factor(region)
R=levels(region)<-c("Valle del Cauca","Cauca","Quindio","Nariño","Cundinamarca")
por_region<-M2$REGION
por_region<-as.factor(por_region)
total_reg<-length(por_region)
porcent_reg<-summary(por_region)
porcent2_reg<-100*porcent_reg/total_reg
label1reg<-paste(R,"(",sep=" ")
label2reg<-paste(label1reg,porcent2_reg,sep="")
label3reg<-paste(label2reg,"%",sep="")
labelreg<-paste(label3reg,")",sep="")
dat_por_reg<-table(por_region)
pie(dat_por_reg,main = "Origen de los encuestados",
labels=labelreg,
col=c("green","blue","chocolate1","yellow","red"), clockwise=TRUE,radius=0.9)

La distribución de encuestados que se encuentran en Pregrado, Maestria o Doctorado es la siguiente:
NivAcad<-M2$NIVEL.ACADEMICO
NivAcad<-M2$NIVEL.ACADEMICO
NivAcad<-as.factor(NivAcad)
NiAc=levels(NivAcad)<-c("Pregrado","Maestría","Doctorado")
por_NivAcad<-M2$NIVEL.ACADEMICO
por_NivAcad<-as.factor(por_NivAcad)
total_NivAcad<-length(por_NivAcad)
porcent_NivAcad<-summary(por_NivAcad)
porcent2_NivAcad<-100*porcent_NivAcad/total_NivAcad
label1NivAcad<-paste(NiAc,"(",sep=" ")
label2NivAcad<-paste(label1NivAcad,porcent2_NivAcad,sep="")
label3NivAcad<-paste(label2NivAcad,"%",sep="")
labelNivAcad<-paste(label3NivAcad,")",sep="")
dat_por_NivAcad<-table(por_NivAcad)
pie(dat_por_NivAcad,main = "Nivel académico de los encuestados.",
labels=labelNivAcad,
col=c("violet","aquamarine","salmon"), clockwise=TRUE,radius=0.9)

En cuanto al peso de las personas encuestadas, obtenemos la siguiente información:
#Analizando el peso
peso<-M2$PESO
#summary(peso)
media_peso<-mean(peso)
mediana_peso<-median(peso)
library(modeest)
This is package 'modeest' written by P. PONCET.
For a complete list of functions, use 'library(help = "modeest")' or 'help.start()'.
moda_peso<-mfv(peso)
desvest_peso<-sd(peso)
vari_peso<-var(peso)
maxmin_peso<-range(peso)
Datos_Peso<-c(media_peso,mediana_peso,moda_peso,desvest_peso,vari_peso,maxmin_peso)
#Datos_Peso<-as.factor(Datos_Peso)
dfPeso=data.frame(Datos_Peso,stringsAsFactors=FALSE,row.names=c("Media","Mediana","Moda","Desviación estandar","Varianza","Valor minimo","Valor Maximo"))
show(dfPeso)
Datos_Peso
Media 67.64000
Mediana 70.00000
Moda 57.00000
Desviación estandar 12.49627
Varianza 156.15667
Valor minimo 50.00000
Valor Maximo 98.00000
El peso promedio de la muestra es de 67.64kg, pero la mitad de los encuestados pesa mas de 70kg. El peso mas frecuente es 57kg. El menor peso es de 50kg y el mayor peso es 98kg. El peso no es uniforme.
Ahora analizando la estatura de las personas encuestadas, obtenemos la siguiente información:
#Analizando la estatura
estat<-M2$ESTATURA
#summary(estat)
media_estat<-mean(estat)
mediana_estat<-median(estat)
library(modeest)
moda_estat<-mfv(estat)
desvest_estat<-sd(estat)
vari_estat<-var(estat)
maxmin_estat<-range(estat)
Datos_Estatura<-c(media_estat,mediana_estat,moda_estat,desvest_estat,vari_estat,maxmin_estat)
dfEstat=data.frame(Datos_Estatura,stringsAsFactors=FALSE,row.names=c("Media","Mediana","Moda","Desviación estandar","Varianza","Valor minimo","Valor Maximo"))
show(dfEstat)
Datos_Estatura
Media 1.67680000
Mediana 1.67000000
Moda 1.60000000
Desviación estandar 0.10471071
Varianza 0.01096433
Valor minimo 1.52000000
Valor Maximo 1.88000000
La estatura promedio de la muestra es aproximadamente 1.67m, y de igual manera la mitad de los encuestados mide mas y la otra mitad mide menos, aunque la estatura mas frecuente es 1.60m. La persona mas baja mide 1.52m y la mas alta mide 1.88m. La estatura de los encuestados es bastante uniforme.
Casi finalizando el analisis de esta encuesta realizada, se observará el Indice de Masa Corportal, que es una razón matemática que asocia el peso y la estatura de un individio y que se utiliza como uno de los recursos para evaluar su estado nutricional de los adultos, de acuerdo con los valores propuestos por la Organización Mundial de la Salud. Se obtuvo la siguiente información:
#Analizando el IMC
IMC<-M2$PESO/(M2$ESTATURA*M2$ESTATURA)
#summary(IMC)
media_imc<-mean(IMC)
mediana_imc<-median(IMC)
library(modeest)
moda_imc<-mfv(IMC)
desvest_imc<-sd(IMC)
vari_imc<-var(IMC)
maxmin_imc<-range(IMC)
Datos_IMC<-c(media_imc,mediana_imc,moda_imc,desvest_imc,vari_imc,maxmin_imc)
#Datos_IMC
dfIMC=data.frame(Datos_IMC,stringsAsFactors=FALSE,row.names=c("Media","Mediana","Moda #1","Moda #2","Desviación estandar","Varianza","Valor minimo","Valor Maximo"))
show(dfIMC)
Datos_IMC
Media 23.927100
Mediana 23.124670
Moda #1 21.224490
Moda #2 23.124670
Desviación estandar 2.895899
Varianza 8.386231
Valor minimo 19.051974
Valor Maximo 30.359251
hist(IMC,sub = "Valores de Indices de Masa Corporal",
breaks=30, xlim = c(15,35),
xlab=NULL, ylab="# de Personas", col="red",
cex.main=1.4,border=F, main = NULL
)
axis(3,at=c(18.5, 25), labels=c("Bajo peso","Sobrepeso"))
box()

El IMC promedio de la muestra es aproximadamente 23.92, pero la mitad de los encuestados estan incluso por debajo de 23.12, siendo los valores mas frecuentes 21.22 y 23.12, y la desviacion de los datos se observa relativamente uniforme. Al comparar estos resultados con los rangos definidos por la OMS (menos de 18.5 bajo peso y mas de 25 sobrepeso), se dice que por distribución los encuestados estan en su mayoria en peso normal. Incluso, nadie se encuentra en bajo peso (el valor mínimo fue 19.05), pero en el gráfico se observan varias personas que clasifican con sobrepeso y llegando hasta un IMC de 30.36. Cabe resaltar que el IMC tiene varias limitaciones, ya que ignora otras caracteristicas fisicas, no difiere entre masa muscular y masa grasa, entre otras.
Para finalizar, la profesora mostró un interes en saber qué porcentaje va a aprobar el curso, pero al no haber registros por ser una materia “nueva”, ya que su enfoque es distinto, no es posible hacer un analisis significativo. Como opción, aunque no menos importante y ademas como valor real, se puede observar el porcentaje de personas matriculadas, ya que no todos los encuestados lo estan.
Matri<-M2$MATRICULADO
Matri<-M2$MATRICULADO
Matri<-as.factor(Matri)
Mat=levels(Matri)<-c("Matriculado","No Matriculado")
por_Matri<-M2$MATRICULADO
por_Matri<-as.factor(por_Matri)
total_Matri<-length(por_Matri)
porcent_Matri<-summary(por_Matri)
porcent2_Matri<-100*porcent_Matri/total_Matri
label1Matri<-paste(Mat,"(",sep=" ")
label2Matri<-paste(label1Matri,porcent2_Matri,sep="")
label3Matri<-paste(label2Matri,"%",sep="")
labelMatri<-paste(label3Matri,")",sep="")
dat_por_Matri<-table(por_Matri)
pie(dat_por_Matri,main = "Estado en el curso de los encuestados.",
labels=labelMatri,
col=c("red","blue"), clockwise=TRUE,radius=0.9)

12 de las personas encuestadas se encuentran matriculados en el curso, ; siendo estos potencialmente las personas que aprobarán el curso y que serán el primer registro de estudiantes que aprobaron o reprobaron la materia.
LS0tDQp0aXRsZTogIkVuY3Vlc3RhIFNlbWluYXJpbyBkZSBDb25zdHJ1Y2Npb25lcyINCmF1dGhvcjogIkouIFNlYmFzdGlhbiBDb2xsYXpvcyBBLiwgQ29kOiAwNzUxMjEwLCBDZWw6IDMwMTc4ODkxNTkiDQpkYXRlOiAiMTYgZGUgTWFyem8gZGUgMjAxOCwgQWN0dWFsaXphZG86IDA0IGRlIE1heW8gZGUgMjAxOCINCg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KRHVyYW50ZSBsYSBjbGFzZSBkZSBTZW1pbmFyaW8gZGUgQ29uc3RydWNjaW9uZXMgc2UgcmVhbGl68yB1bmEgZW5jdWVzdGEgYSBsYXMgcGVyc29uYXMgcXVlIGhhbiBlc3RhZG8gZW4gZWwgc2Fsb24gZGUgY2xhc2UuIEVuIHRvdGFsLCBoYW4gc2lkbyAyNSBsYXMgcGVyc29uYXMgZW5jdWVzdGFkYXMgKGhhc3RhIGVsIGRpYSA5IGRlIG1hcnpvIGRlbCAyMDE4KS4NCkEgY2FkYSB1bmEgZGUgbGFzIHBlcnNvbmFzIHNlIGxlIHByZWd1bnTzIGxhIHNpZ3VpZW50ZSBpbmZvcm1hY2nzbjoNCg0KYGBge3J9DQpNMjwtcmVhZC5jc3YoIk1hdHJpejIuY3N2IikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KbmFtZXMoTTIpDQpgYGANCg0KRWwgbml2ZWwgYWNhZOltaWNvIGNvbnNpc3RlIGVuIHNpIGVzIGRlIHByZWdyYWRvLCBtYWVzdHJpYSBvIGRvY3RvcmFkbyB5IGxhIHJlZ2lvbiBjb25zaXN0ZSBlbiBzdSBsdWdhciBkZSBwcm9jZWRlbmNpYSAoc2Vn+m4gZWwgZGVwYXJ0YW1lbnRvIGRvbmRlIG5hY2nzKS4NCg0KTGEgbXVlc3RyYSBlc3RhIGRpc3RyaWJ1aWRhIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmEgZW50cmUgaG9tYnJlcyB5IG11amVyZXM6DQoNCmBgYHtyfQ0KI3NleG88LU0yJFNFWE8NCiNzZXhvPC1hcy5mYWN0b3Ioc2V4bykNCiNsZXZlbHMoc2V4byk8LWMoIkhvbWJyZXMiLCJNdWplcmVzIikNCiNkYXRfc2V4bzwtdGFibGUoc2V4bykNCiNiYXJwbG90KGRhdF9zZXhvLG1haW4gPSAiSG9tYnJlcyB5IG11amVyZXMgZW5jdWVzdGFkb3MuIiwNCiMgICAgICAgIHlsYWI9IiMgZGUgcGVyc29uYXMiLCBjb2w9YygiYmx1ZSIsInBpbmsiKSkNCnNleG88LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShNMiRTRVhPKSkqMTAwKQ0KY29sbmFtZXMoc2V4byk8LWMoIlNleG8iLCAiUE9SQ0VOVEFKRSIpDQpzLm48LWMoIjEiLCAiMiIpDQpnZ3Bsb3Qoc2V4bywgYWVzKHggPSBTZXhvLCB5ID0gUE9SQ0VOVEFKRSkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC44LCBmaWxsID1jKCJibHVlIiwgInBpbmsiKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLCBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvdXIgPSAiZGFya2dyZXkiKSkgKyBnZ3RpdGxlKCJIb21icmVzIHkgbXVqZXJlcyBlbmN1ZXN0YWRvcyIpICsgeGxhYigiIikgKyB5bGFiKCIlIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9NCwgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikgKyBzY2FsZV94X2Rpc2NyZXRlKGJyZWFrcyA9IHMubiwgbGFiZWxzID0gYygiSG9tYnJlcyIsICJNdWplcmVzIikpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MCwgYnkgPSA1KSwgbGltaXRzID0gYygwLDYwKSkNCg0KYGBgDQpIaXN083JpY2FtZW50ZSBsYSBJbmdlbmllcmlhIENpdmlsIGhhIHNpZG8gdW5hIHByb2Zlc2nzbiBlbiBxdWUgbGEgZ3JhbiBtYXlvcmlhIGRlIHBlcnNvbmFzIHF1ZSBsYSBlc3R1ZGlhbiB5IGVqZXJjZW4gc29uIGRlbCBn6W5lcm8gbWFzY3VsaW5vLCB5IG9ic2VydmFyIGVzdGEgZGlzdHJpYnVjafNuIGVuIGVsIGN1cnNvIG11ZXN0cmEgdW4gY2FtYmlvIGVub3JtZSBjb24gcmVzcGVjdG8gYSBsbyBxdWUgc3VjZWRpYSBh8W9zIGF0cuFzLg0KDQoNCg0KTGEgZGlzdHJpYnVjafNuIHBvciBlZGFkZXMgZXMgbGEgc2lndWllbnRlOg0KDQpgYGB7cn0NCiNlZGFkPC1NMiRFREFEDQojZWRhZDwtYXMuZmFjdG9yKGVkYWQpDQojZGF0X2VkYWQ8LXRhYmxlKGVkYWQpDQojYmFycGxvdChkYXRfZWRhZCxtYWluID0gIkVkYWRlcyBkZSBsb3MgZW5jdWVzdGFkb3MuIiwNCiMgICAgICAgIHhsYWI9IkVkYWQiLCB5bGFiPSIjIGRlIHBlcnNvbmFzIiwgY29sPSJncmF5IikNCg0KZWRhZDwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKE0yJEVEQUQpKSoxMDApDQpjb2xuYW1lcyhlZGFkKTwtYygiRWRhZCIsICJQT1JDRU5UQUpFIikNCmUubjwtYygiMjEiLCAiMjIiLCAiMjMiLCAiMjQiLCAiMjUiLCAiMjYiLCAiMjciLCAiMjgiLCAiMzAiLCAiMzEiLCAiMzciLCAiNDAiLCAiNDciLCAiNDgiLCAiNDkiKQ0KZ2dwbG90KGVkYWQsIGFlcyh4ID0gRWRhZCwgeSA9IFBPUkNFTlRBSkUpKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuOCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLCBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvdXIgPSAiZGFya2dyZXkiKSkgKyBnZ3RpdGxlKCJFZGFkZXMgZGUgbG9zIGVuY3Vlc3RhZG9zIikgKyB4bGFiKCIiKSArIHlsYWIoIiUiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIGdlb21fdGV4dChhZXMoeSA9IFBPUkNFTlRBSkUsIGxhYmVsID0gcGFzdGUocm91bmQoUE9SQ0VOVEFKRSwgMiksICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2l6ZT00LCB2anVzdD0tMC41LCBoanVzdD0wLjUgLGNvbD0iYmxhY2siKSArIHNjYWxlX3hfZGlzY3JldGUoYnJlYWtzID0gZS5uLCBsYWJlbHMgPSBjKCIyMSIsICIyMiIsICIyMyIsICIyNCIsICIyNSIsICIyNiIsICIyNyIsICIyOCIsICIzMCIsICIzMSIsICIzNyIsICI0MCIsICI0NyIsICI0OCIsICI0OSIpKSArIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjAsIGJ5ID0gNSksIGxpbWl0cyA9IGMoMCwyMCkpDQoNCmBgYA0KVGFtYmllbiBsbyBwb2RlbW9zIG9ic2VydmFyIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6DQoNCmBgYHtyfQ0KcG9yX2VkYWQ8LU0yJEVEQUQNCnBvcl9lZGFkPC1hcy5mYWN0b3IocG9yX2VkYWQpDQp0b3RhbDwtbGVuZ3RoKHBvcl9lZGFkKQ0KcG9yY2VudDwtc3VtbWFyeShwb3JfZWRhZCkNCnBvcmNlbnQyPC0xMDAqcG9yY2VudC90b3RhbA0KbGFiZWwxPC1wYXN0ZShsZXZlbHMocG9yX2VkYWQpLCJh8W9zIixzZXA9IiAiKQ0KbGFiZWwyPC1wYXN0ZShsYWJlbDEsIigiLHNlcD0iIikNCmxhYmVsMzwtcGFzdGUobGFiZWwyLHBvcmNlbnQyLHNlcD0iIikNCmxhYmVsNDwtcGFzdGUobGFiZWwzLCIlIixzZXA9IiIpDQpsYWJlbDwtcGFzdGUobGFiZWw0LCIpIixzZXA9IiIpDQpkYXRfcG9yZWRhZDwtdGFibGUocG9yX2VkYWQpDQpwaWUoZGF0X3BvcmVkYWQsc3ViID0gIkVkYWRlcyBkZSBsb3MgZW5jdWVzdGFkb3MuIiwNCiAgICAgICAgbGFiZWxzPWxhYmVsLA0KICAgICAgICBjb2w9YygiYmx1ZXZpb2xldCIsImRhcmtnb2xkZW5yb2QxIiwic2FsbW9uIiwiYmlzcXVlMSIsImJsdWUiLCJkYXJrb2xpdmVncmVlbjEiLCJjb3JhbCIsIm1pZG5pZ2h0Ymx1ZSIsInBpbmsiLCJvcmFuZ2UiLCJzZWFncmVlbiIsImFxdWFtYXJpbmUiLCJ5ZWxsb3ciLCJncmVlbiIsInJlZCIpLCBjbG9ja3dpc2U9VFJVRSxyYWRpdXM9MS4wOCkNCmBgYA0KDQpMYSBkaXN0cmlidWNp824gZGUgcGVyc29uYXMgc29sdGVyYXMgeSBjYXNhZGFzIGVzIGxhIHNpZ3VpZW50ZToNCg0KYGBge3J9DQojRXN0Q2l2aWw8LU0yJENJVklMDQojRXN0Q2l2aWw8LWFzLmZhY3RvcihFc3RDaXZpbCkNCiNsZXZlbHMoRXN0Q2l2aWwpPC1jKCJTb2x0ZXJvcyIsIkNhc2Fkb3MiKQ0KI2RhdF9Fc3RDaXZpbDwtdGFibGUoRXN0Q2l2aWwpDQojYmFycGxvdChkYXRfRXN0Q2l2aWwsbWFpbiA9ICJDYW50aWRhZCBkZSBzb2x0ZXJvcyB5IGNhc2Fkb3MuIiwNCiMgICAgICAgIHlsYWI9IiMgZGUgcGVyc29uYXMiLCBjb2w9YygiZ3JlZW4iLCJyZWQiKSkNCiNib3goKQ0KRXN0Q2l2aWw8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShNMiRTRVhPKSkqMTAwKQ0KY29sbmFtZXMoRXN0Q2l2aWwpPC1jKCJFc3RhZG9DaXZpbCIsICJQT1JDRU5UQUpFIikNCnMubjwtYygiMSIsICIyIikNCmdncGxvdChFc3RDaXZpbCwgYWVzKHggPSBFc3RhZG9DaXZpbCwgeSA9IFBPUkNFTlRBSkUpKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuOCwgZmlsbCA9YygiZ3JlZW4iLCAicmVkIikpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiwgY29sb3VyID0gImRhcmtncmV5IikpICsgZ2d0aXRsZSgiQ2FudGlkYWQgZGUgc29sdGVyb3MgeSBjYXNhZG9zIikgKyB4bGFiKCIiKSArIHlsYWIoIiUiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIGdlb21fdGV4dChhZXMoeSA9IFBPUkNFTlRBSkUsIGxhYmVsID0gcGFzdGUocm91bmQoUE9SQ0VOVEFKRSwgMiksICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2l6ZT00LCB2anVzdD0tMC41LCBoanVzdD0wLjUgLGNvbD0iYmxhY2siKSArIHNjYWxlX3hfZGlzY3JldGUoYnJlYWtzID0gcy5uLCBsYWJlbHMgPSBjKCJTb2x0ZXJvcyIsICJDYXNhZG9zIikpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MCwgYnkgPSA1KSwgbGltaXRzID0gYygwLDYwKSkNCmBgYA0KDQpBIGNvbnRpbnVhY2nzbiBzZSBvYnNlcnZhIGN14WwgZXMgZWwgbHVnYXIgZGUgb3JpZ2VuIGRlIGxhcyBwZXJzb25hcyBlbmN1ZXN0YWRhczoNCg0KYGBge3J9DQpyZWdpb248LU0yJFJFR0lPTg0KcmVnaW9uPC1hcy5mYWN0b3IocmVnaW9uKQ0KUj1sZXZlbHMocmVnaW9uKTwtYygiVmFsbGUgZGVsIENhdWNhIiwiQ2F1Y2EiLCJRdWluZGlvIiwiTmFyafFvIiwiQ3VuZGluYW1hcmNhIikNCnBvcl9yZWdpb248LU0yJFJFR0lPTg0KcG9yX3JlZ2lvbjwtYXMuZmFjdG9yKHBvcl9yZWdpb24pDQp0b3RhbF9yZWc8LWxlbmd0aChwb3JfcmVnaW9uKQ0KcG9yY2VudF9yZWc8LXN1bW1hcnkocG9yX3JlZ2lvbikNCnBvcmNlbnQyX3JlZzwtMTAwKnBvcmNlbnRfcmVnL3RvdGFsX3JlZw0KbGFiZWwxcmVnPC1wYXN0ZShSLCIoIixzZXA9IiAiKQ0KbGFiZWwycmVnPC1wYXN0ZShsYWJlbDFyZWcscG9yY2VudDJfcmVnLHNlcD0iIikNCmxhYmVsM3JlZzwtcGFzdGUobGFiZWwycmVnLCIlIixzZXA9IiIpDQpsYWJlbHJlZzwtcGFzdGUobGFiZWwzcmVnLCIpIixzZXA9IiIpDQpkYXRfcG9yX3JlZzwtdGFibGUocG9yX3JlZ2lvbikNCnBpZShkYXRfcG9yX3JlZyxtYWluID0gIk9yaWdlbiBkZSBsb3MgZW5jdWVzdGFkb3MiLA0KICAgICAgICBsYWJlbHM9bGFiZWxyZWcsDQogICAgICAgIGNvbD1jKCJncmVlbiIsImJsdWUiLCJjaG9jb2xhdGUxIiwieWVsbG93IiwicmVkIiksIGNsb2Nrd2lzZT1UUlVFLHJhZGl1cz0wLjkpDQpgYGANCg0KTGEgZGlzdHJpYnVjafNuIGRlIGVuY3Vlc3RhZG9zIHF1ZSBzZSBlbmN1ZW50cmFuIGVuIFByZWdyYWRvLCBNYWVzdHJpYSBvIERvY3RvcmFkbyBlcyBsYSBzaWd1aWVudGU6DQoNCmBgYHtyfQ0KTml2QWNhZDwtTTIkTklWRUwuQUNBREVNSUNPDQpOaXZBY2FkPC1NMiROSVZFTC5BQ0FERU1JQ08NCk5pdkFjYWQ8LWFzLmZhY3RvcihOaXZBY2FkKQ0KTmlBYz1sZXZlbHMoTml2QWNhZCk8LWMoIlByZWdyYWRvIiwiTWFlc3Ry7WEiLCJEb2N0b3JhZG8iKQ0KcG9yX05pdkFjYWQ8LU0yJE5JVkVMLkFDQURFTUlDTw0KcG9yX05pdkFjYWQ8LWFzLmZhY3Rvcihwb3JfTml2QWNhZCkNCnRvdGFsX05pdkFjYWQ8LWxlbmd0aChwb3JfTml2QWNhZCkNCnBvcmNlbnRfTml2QWNhZDwtc3VtbWFyeShwb3JfTml2QWNhZCkNCnBvcmNlbnQyX05pdkFjYWQ8LTEwMCpwb3JjZW50X05pdkFjYWQvdG90YWxfTml2QWNhZA0KbGFiZWwxTml2QWNhZDwtcGFzdGUoTmlBYywiKCIsc2VwPSIgIikNCmxhYmVsMk5pdkFjYWQ8LXBhc3RlKGxhYmVsMU5pdkFjYWQscG9yY2VudDJfTml2QWNhZCxzZXA9IiIpDQpsYWJlbDNOaXZBY2FkPC1wYXN0ZShsYWJlbDJOaXZBY2FkLCIlIixzZXA9IiIpDQpsYWJlbE5pdkFjYWQ8LXBhc3RlKGxhYmVsM05pdkFjYWQsIikiLHNlcD0iIikNCmRhdF9wb3JfTml2QWNhZDwtdGFibGUocG9yX05pdkFjYWQpDQpwaWUoZGF0X3Bvcl9OaXZBY2FkLG1haW4gPSAiTml2ZWwgYWNhZOltaWNvIGRlIGxvcyBlbmN1ZXN0YWRvcy4iLA0KICAgICAgICBsYWJlbHM9bGFiZWxOaXZBY2FkLA0KICAgICAgICBjb2w9YygidmlvbGV0IiwiYXF1YW1hcmluZSIsInNhbG1vbiIpLCBjbG9ja3dpc2U9VFJVRSxyYWRpdXM9MC45KQ0KYGBgDQpFbiBjdWFudG8gYWwgcGVzbyBkZSBsYXMgcGVyc29uYXMgZW5jdWVzdGFkYXMsIG9idGVuZW1vcyBsYSBzaWd1aWVudGUgaW5mb3JtYWNp8246DQpgYGB7cn0NCiNBbmFsaXphbmRvIGVsIHBlc28NCnBlc288LU0yJFBFU08NCiNzdW1tYXJ5KHBlc28pDQptZWRpYV9wZXNvPC1tZWFuKHBlc28pDQptZWRpYW5hX3Blc288LW1lZGlhbihwZXNvKQ0KbGlicmFyeShtb2RlZXN0KQ0KbW9kYV9wZXNvPC1tZnYocGVzbykNCmRlc3Zlc3RfcGVzbzwtc2QocGVzbykNCnZhcmlfcGVzbzwtdmFyKHBlc28pDQptYXhtaW5fcGVzbzwtcmFuZ2UocGVzbykNCkRhdG9zX1Blc288LWMobWVkaWFfcGVzbyxtZWRpYW5hX3Blc28sbW9kYV9wZXNvLGRlc3Zlc3RfcGVzbyx2YXJpX3Blc28sbWF4bWluX3Blc28pDQojRGF0b3NfUGVzbzwtYXMuZmFjdG9yKERhdG9zX1Blc28pDQpkZlBlc289ZGF0YS5mcmFtZShEYXRvc19QZXNvLHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0Uscm93Lm5hbWVzPWMoIk1lZGlhIiwiTWVkaWFuYSIsIk1vZGEiLCJEZXN2aWFjafNuIGVzdGFuZGFyIiwiVmFyaWFuemEiLCJWYWxvciBtaW5pbW8iLCJWYWxvciBNYXhpbW8iKSkNCnNob3coZGZQZXNvKQ0KYGBgDQoNCkVsIHBlc28gcHJvbWVkaW8gZGUgbGEgbXVlc3RyYSBlcyBkZSA2Ny42NGtnLCBwZXJvIGxhIG1pdGFkIGRlIGxvcyBlbmN1ZXN0YWRvcyBwZXNhIG1hcyBkZSA3MGtnLiBFbCBwZXNvIG1hcyBmcmVjdWVudGUgZXMgNTdrZy4gRWwgbWVub3IgcGVzbyBlcyBkZSA1MGtnIHkgZWwgbWF5b3IgcGVzbyBlcyA5OGtnLiBFbCBwZXNvIG5vIGVzIHVuaWZvcm1lLg0KDQoNCg0KDQoNCkFob3JhIGFuYWxpemFuZG8gbGEgZXN0YXR1cmEgZGUgbGFzIHBlcnNvbmFzIGVuY3Vlc3RhZGFzLCBvYnRlbmVtb3MgbGEgc2lndWllbnRlIGluZm9ybWFjafNuOg0KYGBge3J9DQojQW5hbGl6YW5kbyBsYSBlc3RhdHVyYQ0KZXN0YXQ8LU0yJEVTVEFUVVJBDQojc3VtbWFyeShlc3RhdCkNCm1lZGlhX2VzdGF0PC1tZWFuKGVzdGF0KQ0KbWVkaWFuYV9lc3RhdDwtbWVkaWFuKGVzdGF0KQ0KbGlicmFyeShtb2RlZXN0KQ0KbW9kYV9lc3RhdDwtbWZ2KGVzdGF0KQ0KZGVzdmVzdF9lc3RhdDwtc2QoZXN0YXQpDQp2YXJpX2VzdGF0PC12YXIoZXN0YXQpDQptYXhtaW5fZXN0YXQ8LXJhbmdlKGVzdGF0KQ0KRGF0b3NfRXN0YXR1cmE8LWMobWVkaWFfZXN0YXQsbWVkaWFuYV9lc3RhdCxtb2RhX2VzdGF0LGRlc3Zlc3RfZXN0YXQsdmFyaV9lc3RhdCxtYXhtaW5fZXN0YXQpDQpkZkVzdGF0PWRhdGEuZnJhbWUoRGF0b3NfRXN0YXR1cmEsc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSxyb3cubmFtZXM9YygiTWVkaWEiLCJNZWRpYW5hIiwiTW9kYSIsIkRlc3ZpYWNp824gZXN0YW5kYXIiLCJWYXJpYW56YSIsIlZhbG9yIG1pbmltbyIsIlZhbG9yIE1heGltbyIpKQ0Kc2hvdyhkZkVzdGF0KQ0KYGBgDQoNCkxhIGVzdGF0dXJhIHByb21lZGlvIGRlIGxhIG11ZXN0cmEgZXMgYXByb3hpbWFkYW1lbnRlIDEuNjdtLCB5IGRlIGlndWFsIG1hbmVyYSBsYSBtaXRhZCBkZSBsb3MgZW5jdWVzdGFkb3MgbWlkZSBtYXMgeSBsYSBvdHJhIG1pdGFkIG1pZGUgbWVub3MsIGF1bnF1ZSBsYSBlc3RhdHVyYSBtYXMgZnJlY3VlbnRlIGVzIDEuNjBtLiBMYSBwZXJzb25hIG1hcyBiYWphIG1pZGUgMS41Mm0geSBsYSBtYXMgYWx0YSBtaWRlIDEuODhtLiBMYSBlc3RhdHVyYSBkZSBsb3MgZW5jdWVzdGFkb3MgZXMgYmFzdGFudGUgdW5pZm9ybWUuDQoNCkNhc2kgZmluYWxpemFuZG8gZWwgYW5hbGlzaXMgZGUgZXN0YSBlbmN1ZXN0YSByZWFsaXphZGEsIHNlIG9ic2VydmFy4SBlbCBJbmRpY2UgZGUgTWFzYSBDb3Jwb3J0YWwsIHF1ZSBlcyB1bmEgcmF6824gbWF0ZW3hdGljYSBxdWUgYXNvY2lhIGVsIHBlc28geSBsYSBlc3RhdHVyYSBkZSB1biBpbmRpdmlkaW8geSBxdWUgc2UgdXRpbGl6YSBjb21vIHVubyBkZSBsb3MgcmVjdXJzb3MgcGFyYSBldmFsdWFyIHN1IGVzdGFkbyBudXRyaWNpb25hbCBkZSBsb3MgYWR1bHRvcywgZGUgYWN1ZXJkbyBjb24gbG9zIHZhbG9yZXMgcHJvcHVlc3RvcyBwb3IgbGEgT3JnYW5pemFjafNuIE11bmRpYWwgZGUgbGEgU2FsdWQuIFNlIG9idHV2byBsYSBzaWd1aWVudGUgaW5mb3JtYWNp8246DQoNCmBgYHtyfQ0KI0FuYWxpemFuZG8gZWwgSU1DDQpJTUM8LU0yJFBFU08vKE0yJEVTVEFUVVJBKk0yJEVTVEFUVVJBKQ0KI3N1bW1hcnkoSU1DKQ0KbWVkaWFfaW1jPC1tZWFuKElNQykNCm1lZGlhbmFfaW1jPC1tZWRpYW4oSU1DKQ0KbGlicmFyeShtb2RlZXN0KQ0KbW9kYV9pbWM8LW1mdihJTUMpDQpkZXN2ZXN0X2ltYzwtc2QoSU1DKQ0KdmFyaV9pbWM8LXZhcihJTUMpDQptYXhtaW5faW1jPC1yYW5nZShJTUMpDQpEYXRvc19JTUM8LWMobWVkaWFfaW1jLG1lZGlhbmFfaW1jLG1vZGFfaW1jLGRlc3Zlc3RfaW1jLHZhcmlfaW1jLG1heG1pbl9pbWMpDQojRGF0b3NfSU1DDQpkZklNQz1kYXRhLmZyYW1lKERhdG9zX0lNQyxzdHJpbmdzQXNGYWN0b3JzPUZBTFNFLHJvdy5uYW1lcz1jKCJNZWRpYSIsIk1lZGlhbmEiLCJNb2RhICMxIiwiTW9kYSAjMiIsIkRlc3ZpYWNp824gZXN0YW5kYXIiLCJWYXJpYW56YSIsIlZhbG9yIG1pbmltbyIsIlZhbG9yIE1heGltbyIpKQ0Kc2hvdyhkZklNQykNCmBgYA0KYGBge3J9DQpoaXN0KElNQyxzdWIgPSAiVmFsb3JlcyBkZSBJbmRpY2VzIGRlIE1hc2EgQ29ycG9yYWwiLA0KICAgICBicmVha3M9MzAsIHhsaW0gPSBjKDE1LDM1KSwNCiAgICAgeGxhYj1OVUxMLCB5bGFiPSIjIGRlIFBlcnNvbmFzIiwgY29sPSJyZWQiLA0KICAgICBjZXgubWFpbj0xLjQsYm9yZGVyPUYsIG1haW4gPSBOVUxMDQogICAgICkNCmF4aXMoMyxhdD1jKDE4LjUsIDI1KSwgbGFiZWxzPWMoIkJham8gcGVzbyIsIlNvYnJlcGVzbyIpKQ0KYm94KCkNCmBgYA0KRWwgSU1DIHByb21lZGlvIGRlIGxhIG11ZXN0cmEgZXMgYXByb3hpbWFkYW1lbnRlIDIzLjkyLCBwZXJvIGxhIG1pdGFkIGRlIGxvcyBlbmN1ZXN0YWRvcyBlc3RhbiBpbmNsdXNvIHBvciBkZWJham8gZGUgMjMuMTIsIHNpZW5kbyBsb3MgdmFsb3JlcyBtYXMgZnJlY3VlbnRlcyAyMS4yMiB5IDIzLjEyLCB5IGxhIGRlc3ZpYWNpb24gZGUgbG9zIGRhdG9zIHNlIG9ic2VydmEgcmVsYXRpdmFtZW50ZSB1bmlmb3JtZS4gQWwgY29tcGFyYXIgZXN0b3MgcmVzdWx0YWRvcyBjb24gbG9zIHJhbmdvcyBkZWZpbmlkb3MgcG9yIGxhIE9NUyAobWVub3MgZGUgMTguNSBiYWpvIHBlc28geSBtYXMgZGUgMjUgc29icmVwZXNvKSwgc2UgZGljZSBxdWUgcG9yIGRpc3RyaWJ1Y2nzbiBsb3MgZW5jdWVzdGFkb3MgZXN0YW4gZW4gc3UgbWF5b3JpYSBlbiBwZXNvIG5vcm1hbC4gSW5jbHVzbywgbmFkaWUgc2UgZW5jdWVudHJhIGVuIGJham8gcGVzbyAoZWwgdmFsb3Igbe1uaW1vIGZ1ZSAxOS4wNSksIHBlcm8gZW4gZWwgZ3LhZmljbyBzZSBvYnNlcnZhbiB2YXJpYXMgcGVyc29uYXMgcXVlIGNsYXNpZmljYW4gY29uICBzb2JyZXBlc28geSBsbGVnYW5kbyBoYXN0YSB1biBJTUMgZGUgMzAuMzYuDQpDYWJlIHJlc2FsdGFyIHF1ZSBlbCBJTUMgdGllbmUgdmFyaWFzIGxpbWl0YWNpb25lcywgeWEgcXVlIGlnbm9yYSBvdHJhcyBjYXJhY3RlcmlzdGljYXMgZmlzaWNhcywgbm8gZGlmaWVyZSBlbnRyZSBtYXNhIG11c2N1bGFyIHkgbWFzYSBncmFzYSwgZW50cmUgb3RyYXMuDQoNClBhcmEgZmluYWxpemFyLCBsYSBwcm9mZXNvcmEgbW9zdHLzIHVuIGludGVyZXMgZW4gc2FiZXIgcXXpIHBvcmNlbnRhamUgdmEgYSBhcHJvYmFyIGVsIGN1cnNvLCBwZXJvIGFsIG5vIGhhYmVyIHJlZ2lzdHJvcyBwb3Igc2VyIHVuYSBtYXRlcmlhICJudWV2YSIsIHlhIHF1ZSBzdSBlbmZvcXVlIGVzIGRpc3RpbnRvLCBubyBlcyBwb3NpYmxlIGhhY2VyIHVuIGFuYWxpc2lzIHNpZ25pZmljYXRpdm8uIENvbW8gb3BjafNuLCBhdW5xdWUgbm8gbWVub3MgaW1wb3J0YW50ZSB5IGFkZW1hcyBjb21vIHZhbG9yIHJlYWwsIHNlIHB1ZWRlIG9ic2VydmFyIGVsIHBvcmNlbnRhamUgZGUgcGVyc29uYXMgbWF0cmljdWxhZGFzLCB5YSBxdWUgbm8gdG9kb3MgbG9zIGVuY3Vlc3RhZG9zIGxvIGVzdGFuLg0KDQoNCmBgYHtyfQ0KTWF0cmk8LU0yJE1BVFJJQ1VMQURPDQpNYXRyaTwtTTIkTUFUUklDVUxBRE8NCk1hdHJpPC1hcy5mYWN0b3IoTWF0cmkpDQpNYXQ9bGV2ZWxzKE1hdHJpKTwtYygiTWF0cmljdWxhZG8iLCJObyBNYXRyaWN1bGFkbyIpDQpwb3JfTWF0cmk8LU0yJE1BVFJJQ1VMQURPDQpwb3JfTWF0cmk8LWFzLmZhY3Rvcihwb3JfTWF0cmkpDQp0b3RhbF9NYXRyaTwtbGVuZ3RoKHBvcl9NYXRyaSkNCnBvcmNlbnRfTWF0cmk8LXN1bW1hcnkocG9yX01hdHJpKQ0KcG9yY2VudDJfTWF0cmk8LTEwMCpwb3JjZW50X01hdHJpL3RvdGFsX01hdHJpDQpsYWJlbDFNYXRyaTwtcGFzdGUoTWF0LCIoIixzZXA9IiAiKQ0KbGFiZWwyTWF0cmk8LXBhc3RlKGxhYmVsMU1hdHJpLHBvcmNlbnQyX01hdHJpLHNlcD0iIikNCmxhYmVsM01hdHJpPC1wYXN0ZShsYWJlbDJNYXRyaSwiJSIsc2VwPSIiKQ0KbGFiZWxNYXRyaTwtcGFzdGUobGFiZWwzTWF0cmksIikiLHNlcD0iIikNCmRhdF9wb3JfTWF0cmk8LXRhYmxlKHBvcl9NYXRyaSkNCnBpZShkYXRfcG9yX01hdHJpLG1haW4gPSAiRXN0YWRvIGVuIGVsIGN1cnNvIGRlIGxvcyBlbmN1ZXN0YWRvcy4iLA0KICAgICAgICBsYWJlbHM9bGFiZWxNYXRyaSwNCiAgICAgICAgY29sPWMoInJlZCIsImJsdWUiKSwgY2xvY2t3aXNlPVRSVUUscmFkaXVzPTAuOSkNCmBgYA0KDQoxMiBkZSBsYXMgcGVyc29uYXMgZW5jdWVzdGFkYXMgc2UgZW5jdWVudHJhbiBtYXRyaWN1bGFkb3MgZW4gZWwgY3Vyc28sIDsgc2llbmRvIGVzdG9zIHBvdGVuY2lhbG1lbnRlIGxhcyBwZXJzb25hcyBxdWUgYXByb2JhcuFuIGVsIGN1cnNvIHkgcXVlIHNlcuFuIGVsIHByaW1lciByZWdpc3RybyBkZSBlc3R1ZGlhbnRlcyBxdWUgYXByb2Jhcm9uIG8gcmVwcm9iYXJvbiBsYSBtYXRlcmlhLg==