Tablas de frecuencias

Edad


clases <- seq(min(HR_Case_Study$Age), max(HR_Case_Study$Age)+1, 2)
TablaFreq <- data.frame(table(cut(HR_Case_Study$Age, breaks=clases, right=FALSE))/length(HR_Case_Study$Age))
sum(TablaFreq$Freq)
TablaFreq$Frecuencia_Absoluta <- table(cut(HR_Case_Study$Age, breaks = clases, right = FALSE))
names(TablaFreq)[names(TablaFreq) == "Var1"]<-"Clases"
names(TablaFreq)[names(TablaFreq) == "Freq"]<-"Frecuencia_Relativa"
TablaFreq$Frecuencia_Absoluta_Acumulada <- cumsum(TablaFreq$Frecuencia_Absoluta)
TablaFreq$Frecuencia_Relativa_Acumulada <- cumsum(TablaFreq$Frecuencia_Absoluta) / sum(TablaFreq$Frecuencia_Absoluta)
print(TablaFreq)

Salario

#Codigo para la creación de las clases:
clases_sal <- seq(min(HR_Case_Study$`Annual Salary`)-1, max(HR_Case_Study$`Annual Salary`)+883518, 883518)

clases_estandar <- format(clases_sal, scientific = FALSE)
#Codigo para la creación de la tabla:
TablaFreqSalary <- data.frame(table(cut(HR_Case_Study$`Annual Salary`, breaks=clases_estandar, right=FALSE)))

names(TablaFreqSalary)[names(TablaFreqSalary) == "Var1"]<-"Clases"

names(TablaFreqSalary)[names(TablaFreqSalary) == "Freq"]<-"Frecuencia_Absoluta"
TablaFreqSalary$Frecuencia_Relativa <- table(cut(HR_Case_Study$`Annual Salary`, breaks = clases_estandar, right = FALSE))/length(HR_Case_Study$`Annual Salary`)

TablaFreqSalary$Frecuencia_Absoluta_Acumulada <- cumsum(TablaFreqSalary$Frecuencia_Absoluta)

TablaFreqSalary$Frecuencia_Relativa_Acumulada <- cumsum(TablaFreqSalary$Frecuencia_Absoluta) / sum(TablaFreqSalary$Frecuencia_Absoluta)
TablaFreqSalary$Clases <- as.character(TablaFreqSalary$Clases)
intervalos_notacion_estandar <- sapply(strsplit(TablaFreqSalary$Clases, ","), function(x) {
  lower <- as.numeric(gsub("\\[|\\)", "", x[1]))
  upper <- as.numeric(gsub("\\[|\\)", "", x[2]))
  paste("[", format(as.numeric(lower), scientific = FALSE), ", ", format(as.numeric(upper), scientific = FALSE), ")", sep = "")
})
# Mostrar los intervalos en notación estándar junto con las frecuencias
for (i in 1:length(intervalos_notacion_estandar)) {
  cat(intervalos_notacion_estandar[i], " : ", TablaFreqSalary$Frecuencia_Absoluta[i], "\n")
}
[281000, 1160000)  :  841 
[1160000, 2050000)  :  33 
[2050000, 2930000)  :  0 
[2930000, 3820000)  :  0 
[3820000, 4700000)  :  0 
[4700000, 5580000)  :  0 
[5580000, 6470000)  :  0 
[6470000, 7350000)  :  0 
[7350000, 8230000)  :  0 
[8230000, 9120000)  :  0 
[9120000, 10000000)  :  0 
[10000000, 10900000)  :  1 
TablaSalary <- cbind(intervalos_notacion_estandar, TablaFreqSalary$Frecuencia_Absoluta, TablaFreqSalary$Frecuencia_Relativa, TablaFreqSalary$Frecuencia_Absoluta_Acumulada, TablaFreqSalary$Frecuencia_Relativa_Acumulada)

# Agregar nombres a las columnas
colnames(TablaSalary) <- c("Clases", "Frecuencia_Absoluta", "Frecuencia_Relativa", "Frecuencia_Absoluta_Acumulada", "Frecuencia_Relativa_Acumulada")
TablaSalary2 <- as.data.frame(TablaSalary)
TablaSalary2$Frecuencia_Relativa <- as.numeric(TablaSalary2$Frecuencia_Relativa)
TablaSalary2$Clases <- factor(TablaSalary2$Clases, levels = unique(TablaSalary2$Clases))
write.csv(TablaSalary2, "SalaryDF.csv", row.names = FALSE)
print(TablaSalary2)

Antiguedad en la empresa

#Codigo para la creación de las clases:
clases_ten <- seq(min(HR_Case_Study$`Tenure in Company`)-1, max(HR_Case_Study$`Tenure in Company`)+1, 2)
#Codigo para la creación de la tabla:
TablaTenure <- data.frame(table(cut(HR_Case_Study$`Tenure in Company`, breaks=clases_ten, right=FALSE)))

names(TablaTenure)[names(TablaTenure) == "Var1"]<-"Clases"

names(TablaTenure)[names(TablaTenure) == "Freq"]<-"Frecuencia_Absoluta"
TablaTenure$Frecuencia_Relativa <- table(cut(HR_Case_Study$`Tenure in Company`, breaks=clases_ten, right = FALSE))/length(HR_Case_Study$`Tenure in Company`)

TablaTenure$Frecuencia_Absoluta_Acumulada <- cumsum(TablaTenure$Frecuencia_Absoluta)

TablaTenure$Frecuencia_Relativa_Acumulada <- cumsum(TablaTenure$Frecuencia_Absoluta) / sum(TablaTenure$Frecuencia_Absoluta)
#Guardar el csv
write.csv(TablaTenure, "Tenure.csv", row.names = FALSE)
print(TablaTenure)

Graficos

Edad

library(ggplot2)
ggplot(data.frame(TablaFreq), aes(x=Clases, y=Frecuencia_Relativa))  +
geom_bar(stat="identity", color="blue", fill="cyan", width=1) +
theme_bw() + labs(x="Edad", y="Frecuencia Relativa") +
geom_text(aes(label=sprintf("%.3f", Frecuencia_Relativa)), vjust=-.5, col="black")

Salario anual

#Codigo para la creación del histograma:
library(ggplot2)
ggplot(data.frame(TablaSalary2), aes(x=Clases, y=Frecuencia_Relativa))  +
geom_bar(stat="identity", color="blue", fill="cyan", width=1) +
theme_bw() + labs(x="Salario Anual", y="Frecuencia Relativa") +
geom_text(aes(label=sprintf("%.3f", Frecuencia_Relativa)), vjust=-.5, col="black", size = 3) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 8)) 

Antiguedad en la empresa

#Codigo para la creación del histograma:
library(ggplot2)
ggplot(data.frame(TablaTenure), aes(x=Clases, y=Frecuencia_Relativa))  +
geom_bar(stat="identity", color="blue", fill="cyan", width=1) +
theme_bw() + labs(x="Antigüedad  en la empresa", y="Frecuencia Relativa") +
geom_text(aes(label=sprintf("%.3f", Frecuencia_Relativa)), vjust=-.5, col="black") + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 8)) 

LS0tDQp0aXRsZTogIkhpc3RvZ3JhbXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyBUYWJsYXMgZGUgZnJlY3VlbmNpYXMNCg0KIyMgRWRhZA0KDQpgYGB7cn0NCiMgQ3JlYWNpb24gZGUgY2xhc2VzDQpjbGFzZXMgPC0gc2VxKG1pbihIUl9DYXNlX1N0dWR5JEFnZSksIG1heChIUl9DYXNlX1N0dWR5JEFnZSkrMSwgMikNCmBgYA0KDQpgYGB7cn0NClRhYmxhRnJlcSA8LSBkYXRhLmZyYW1lKHRhYmxlKGN1dChIUl9DYXNlX1N0dWR5JEFnZSwgYnJlYWtzPWNsYXNlcywgcmlnaHQ9RkFMU0UpKS9sZW5ndGgoSFJfQ2FzZV9TdHVkeSRBZ2UpKQ0KYGBgDQpgYGB7cn0NCnN1bShUYWJsYUZyZXEkRnJlcSkNCmBgYA0KYGBge3J9DQpUYWJsYUZyZXEkRnJlY3VlbmNpYV9BYnNvbHV0YSA8LSB0YWJsZShjdXQoSFJfQ2FzZV9TdHVkeSRBZ2UsIGJyZWFrcyA9IGNsYXNlcywgcmlnaHQgPSBGQUxTRSkpDQpuYW1lcyhUYWJsYUZyZXEpW25hbWVzKFRhYmxhRnJlcSkgPT0gIlZhcjEiXTwtIkNsYXNlcyINCm5hbWVzKFRhYmxhRnJlcSlbbmFtZXMoVGFibGFGcmVxKSA9PSAiRnJlcSJdPC0iRnJlY3VlbmNpYV9SZWxhdGl2YSINCmBgYA0KYGBge3J9DQpUYWJsYUZyZXEkRnJlY3VlbmNpYV9BYnNvbHV0YV9BY3VtdWxhZGEgPC0gY3Vtc3VtKFRhYmxhRnJlcSRGcmVjdWVuY2lhX0Fic29sdXRhKQ0KDQpgYGANCmBgYHtyfQ0KVGFibGFGcmVxJEZyZWN1ZW5jaWFfUmVsYXRpdmFfQWN1bXVsYWRhIDwtIGN1bXN1bShUYWJsYUZyZXEkRnJlY3VlbmNpYV9BYnNvbHV0YSkgLyBzdW0oVGFibGFGcmVxJEZyZWN1ZW5jaWFfQWJzb2x1dGEpDQpgYGANCg0KYGBge3J9DQpwcmludChUYWJsYUZyZXEpDQpgYGANCg0KDQojIyBTYWxhcmlvDQoNCmBgYHtyfQ0KI0NvZGlnbyBwYXJhIGxhIGNyZWFjacOzbiBkZSBsYXMgY2xhc2VzOg0KY2xhc2VzX3NhbCA8LSBzZXEobWluKEhSX0Nhc2VfU3R1ZHkkYEFubnVhbCBTYWxhcnlgKS0xLCBtYXgoSFJfQ2FzZV9TdHVkeSRgQW5udWFsIFNhbGFyeWApKzg4MzUxOCwgODgzNTE4KQ0KDQpjbGFzZXNfZXN0YW5kYXIgPC0gZm9ybWF0KGNsYXNlc19zYWwsIHNjaWVudGlmaWMgPSBGQUxTRSkNCmBgYA0KDQpgYGB7cn0NCiNDb2RpZ28gcGFyYSBsYSBjcmVhY2nDs24gZGUgbGEgdGFibGE6DQpUYWJsYUZyZXFTYWxhcnkgPC0gZGF0YS5mcmFtZSh0YWJsZShjdXQoSFJfQ2FzZV9TdHVkeSRgQW5udWFsIFNhbGFyeWAsIGJyZWFrcz1jbGFzZXNfZXN0YW5kYXIsIHJpZ2h0PUZBTFNFKSkpDQoNCm5hbWVzKFRhYmxhRnJlcVNhbGFyeSlbbmFtZXMoVGFibGFGcmVxU2FsYXJ5KSA9PSAiVmFyMSJdPC0iQ2xhc2VzIg0KDQpuYW1lcyhUYWJsYUZyZXFTYWxhcnkpW25hbWVzKFRhYmxhRnJlcVNhbGFyeSkgPT0gIkZyZXEiXTwtIkZyZWN1ZW5jaWFfQWJzb2x1dGEiDQoNCg0KYGBgDQpgYGB7cn0NClRhYmxhRnJlcVNhbGFyeSRGcmVjdWVuY2lhX1JlbGF0aXZhIDwtIHRhYmxlKGN1dChIUl9DYXNlX1N0dWR5JGBBbm51YWwgU2FsYXJ5YCwgYnJlYWtzID0gY2xhc2VzX2VzdGFuZGFyLCByaWdodCA9IEZBTFNFKSkvbGVuZ3RoKEhSX0Nhc2VfU3R1ZHkkYEFubnVhbCBTYWxhcnlgKQ0KDQpUYWJsYUZyZXFTYWxhcnkkRnJlY3VlbmNpYV9BYnNvbHV0YV9BY3VtdWxhZGEgPC0gY3Vtc3VtKFRhYmxhRnJlcVNhbGFyeSRGcmVjdWVuY2lhX0Fic29sdXRhKQ0KDQpUYWJsYUZyZXFTYWxhcnkkRnJlY3VlbmNpYV9SZWxhdGl2YV9BY3VtdWxhZGEgPC0gY3Vtc3VtKFRhYmxhRnJlcVNhbGFyeSRGcmVjdWVuY2lhX0Fic29sdXRhKSAvIHN1bShUYWJsYUZyZXFTYWxhcnkkRnJlY3VlbmNpYV9BYnNvbHV0YSkNCmBgYA0KYGBge3J9DQpUYWJsYUZyZXFTYWxhcnkkQ2xhc2VzIDwtIGFzLmNoYXJhY3RlcihUYWJsYUZyZXFTYWxhcnkkQ2xhc2VzKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDcmVhY2lvbiBkZSBpbnRlcnZhbG9zIHBhcmEgcGFzYXIgbGFzIGNsYXNlcyBkZSBub3RhY2nDs24gY2llbnRpZmljYSBhIG5vdGFjacOzbiBlc3RhbmRhcg0KaW50ZXJ2YWxvc19ub3RhY2lvbl9lc3RhbmRhciA8LSBzYXBwbHkoc3Ryc3BsaXQoVGFibGFGcmVxU2FsYXJ5JENsYXNlcywgIiwiKSwgZnVuY3Rpb24oeCkgew0KICBsb3dlciA8LSBhcy5udW1lcmljKGdzdWIoIlxcW3xcXCkiLCAiIiwgeFsxXSkpDQogIHVwcGVyIDwtIGFzLm51bWVyaWMoZ3N1YigiXFxbfFxcKSIsICIiLCB4WzJdKSkNCiAgcGFzdGUoIlsiLCBmb3JtYXQoYXMubnVtZXJpYyhsb3dlciksIHNjaWVudGlmaWMgPSBGQUxTRSksICIsICIsIGZvcm1hdChhcy5udW1lcmljKHVwcGVyKSwgc2NpZW50aWZpYyA9IEZBTFNFKSwgIikiLCBzZXAgPSAiIikNCn0pDQpgYGANCg0KYGBge3J9DQojIE1vc3RyYXIgbG9zIGludGVydmFsb3MgZW4gbm90YWNpw7NuIGVzdMOhbmRhciBqdW50byBjb24gbGFzIGZyZWN1ZW5jaWFzDQpmb3IgKGkgaW4gMTpsZW5ndGgoaW50ZXJ2YWxvc19ub3RhY2lvbl9lc3RhbmRhcikpIHsNCiAgY2F0KGludGVydmFsb3Nfbm90YWNpb25fZXN0YW5kYXJbaV0sICIgOiAiLCBUYWJsYUZyZXFTYWxhcnkkRnJlY3VlbmNpYV9BYnNvbHV0YVtpXSwgIlxuIikNCn0NCmBgYA0KYGBge3J9DQpUYWJsYVNhbGFyeSA8LSBjYmluZChpbnRlcnZhbG9zX25vdGFjaW9uX2VzdGFuZGFyLCBUYWJsYUZyZXFTYWxhcnkkRnJlY3VlbmNpYV9BYnNvbHV0YSwgVGFibGFGcmVxU2FsYXJ5JEZyZWN1ZW5jaWFfUmVsYXRpdmEsIFRhYmxhRnJlcVNhbGFyeSRGcmVjdWVuY2lhX0Fic29sdXRhX0FjdW11bGFkYSwgVGFibGFGcmVxU2FsYXJ5JEZyZWN1ZW5jaWFfUmVsYXRpdmFfQWN1bXVsYWRhKQ0KDQojIEFncmVnYXIgbm9tYnJlcyBhIGxhcyBjb2x1bW5hcw0KY29sbmFtZXMoVGFibGFTYWxhcnkpIDwtIGMoIkNsYXNlcyIsICJGcmVjdWVuY2lhX0Fic29sdXRhIiwgIkZyZWN1ZW5jaWFfUmVsYXRpdmEiLCAiRnJlY3VlbmNpYV9BYnNvbHV0YV9BY3VtdWxhZGEiLCAiRnJlY3VlbmNpYV9SZWxhdGl2YV9BY3VtdWxhZGEiKQ0KYGBgDQoNCmBgYHtyfQ0KI0NvbnZlcnNpb24gZGVsIG9iamV0byBjYmluZCBhIHVuIGRhdGFmcmFtZQ0KVGFibGFTYWxhcnkyIDwtIGFzLmRhdGEuZnJhbWUoVGFibGFTYWxhcnkpDQpgYGANCg0KYGBge3J9DQojQ29udmVyc2lvbiBkZSBsYSBjb2x1bW5hIGZyZWN1ZW5jaWEgcmVsYXRpdmEgZW4gb2JqZXRvIG51bWVyaWNvDQpUYWJsYVNhbGFyeTIkRnJlY3VlbmNpYV9SZWxhdGl2YSA8LSBhcy5udW1lcmljKFRhYmxhU2FsYXJ5MiRGcmVjdWVuY2lhX1JlbGF0aXZhKQ0KYGBgDQoNCmBgYHtyfQ0KI0FzaWduYWNpb24gZGUgbml2ZWxlcyBkZSBvcmRlbiBlbiBsYSBjb2x1bW5hIGNsYXNlcw0KVGFibGFTYWxhcnkyJENsYXNlcyA8LSBmYWN0b3IoVGFibGFTYWxhcnkyJENsYXNlcywgbGV2ZWxzID0gdW5pcXVlKFRhYmxhU2FsYXJ5MiRDbGFzZXMpKQ0KYGBgDQoNCmBgYHtyfQ0KI0d1YXJkYXIgZWwgY3N2DQp3cml0ZS5jc3YoVGFibGFTYWxhcnkyLCAiU2FsYXJ5REYuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpDQoNCmBgYA0KDQpgYGB7cn0NCnByaW50KFRhYmxhU2FsYXJ5MikNCmBgYA0KDQojIyBBbnRpZ3VlZGFkIGVuIGxhIGVtcHJlc2ENCg0KYGBge3J9DQojQ29kaWdvIHBhcmEgbGEgY3JlYWNpw7NuIGRlIGxhcyBjbGFzZXM6DQpjbGFzZXNfdGVuIDwtIHNlcShtaW4oSFJfQ2FzZV9TdHVkeSRgVGVudXJlIGluIENvbXBhbnlgKS0xLCBtYXgoSFJfQ2FzZV9TdHVkeSRgVGVudXJlIGluIENvbXBhbnlgKSsxLCAyKQ0KDQpgYGANCg0KYGBge3J9DQojQ29kaWdvIHBhcmEgbGEgY3JlYWNpw7NuIGRlIGxhIHRhYmxhOg0KVGFibGFUZW51cmUgPC0gZGF0YS5mcmFtZSh0YWJsZShjdXQoSFJfQ2FzZV9TdHVkeSRgVGVudXJlIGluIENvbXBhbnlgLCBicmVha3M9Y2xhc2VzX3RlbiwgcmlnaHQ9RkFMU0UpKSkNCg0KbmFtZXMoVGFibGFUZW51cmUpW25hbWVzKFRhYmxhVGVudXJlKSA9PSAiVmFyMSJdPC0iQ2xhc2VzIg0KDQpuYW1lcyhUYWJsYVRlbnVyZSlbbmFtZXMoVGFibGFUZW51cmUpID09ICJGcmVxIl08LSJGcmVjdWVuY2lhX0Fic29sdXRhIg0KDQpgYGANCmBgYHtyfQ0KVGFibGFUZW51cmUkRnJlY3VlbmNpYV9SZWxhdGl2YSA8LSB0YWJsZShjdXQoSFJfQ2FzZV9TdHVkeSRgVGVudXJlIGluIENvbXBhbnlgLCBicmVha3M9Y2xhc2VzX3RlbiwgcmlnaHQgPSBGQUxTRSkpL2xlbmd0aChIUl9DYXNlX1N0dWR5JGBUZW51cmUgaW4gQ29tcGFueWApDQoNClRhYmxhVGVudXJlJEZyZWN1ZW5jaWFfQWJzb2x1dGFfQWN1bXVsYWRhIDwtIGN1bXN1bShUYWJsYVRlbnVyZSRGcmVjdWVuY2lhX0Fic29sdXRhKQ0KDQpUYWJsYVRlbnVyZSRGcmVjdWVuY2lhX1JlbGF0aXZhX0FjdW11bGFkYSA8LSBjdW1zdW0oVGFibGFUZW51cmUkRnJlY3VlbmNpYV9BYnNvbHV0YSkgLyBzdW0oVGFibGFUZW51cmUkRnJlY3VlbmNpYV9BYnNvbHV0YSkNCmBgYA0KDQoNCmBgYHtyfQ0KI0d1YXJkYXIgZWwgY3N2DQp3cml0ZS5jc3YoVGFibGFUZW51cmUsICJUZW51cmUuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpDQpgYGANCg0KYGBge3J9DQpwcmludChUYWJsYVRlbnVyZSkNCmBgYA0KDQoNCiMgR3JhZmljb3MNCg0KIyMgRWRhZA0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChkYXRhLmZyYW1lKFRhYmxhRnJlcSksIGFlcyh4PUNsYXNlcywgeT1GcmVjdWVuY2lhX1JlbGF0aXZhKSkgICsNCmdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IiwgY29sb3I9ImJsdWUiLCBmaWxsPSJjeWFuIiwgd2lkdGg9MSkgKw0KdGhlbWVfYncoKSArIGxhYnMoeD0iRWRhZCIsIHk9IkZyZWN1ZW5jaWEgUmVsYXRpdmEiKSArDQpnZW9tX3RleHQoYWVzKGxhYmVsPXNwcmludGYoIiUuM2YiLCBGcmVjdWVuY2lhX1JlbGF0aXZhKSksIHZqdXN0PS0uNSwgY29sPSJibGFjayIpDQpgYGANCg0KIyMgU2FsYXJpbyBhbnVhbA0KDQpgYGB7cn0NCiNDb2RpZ28gcGFyYSBsYSBjcmVhY2nDs24gZGVsIGhpc3RvZ3JhbWE6DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGF0YS5mcmFtZShUYWJsYVNhbGFyeTIpLCBhZXMoeD1DbGFzZXMsIHk9RnJlY3VlbmNpYV9SZWxhdGl2YSkpICArDQpnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibHVlIiwgZmlsbD0iY3lhbiIsIHdpZHRoPTEpICsNCnRoZW1lX2J3KCkgKyBsYWJzKHg9IlNhbGFyaW8gQW51YWwiLCB5PSJGcmVjdWVuY2lhIFJlbGF0aXZhIikgKw0KZ2VvbV90ZXh0KGFlcyhsYWJlbD1zcHJpbnRmKCIlLjNmIiwgRnJlY3VlbmNpYV9SZWxhdGl2YSkpLCB2anVzdD0tLjUsIGNvbD0iYmxhY2siLCBzaXplID0gMykgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAxLCBzaXplID0gOCkpIA0KDQpgYGANCg0KDQojIyBBbnRpZ3VlZGFkIGVuIGxhIGVtcHJlc2ENCg0KYGBge3J9DQojQ29kaWdvIHBhcmEgbGEgY3JlYWNpw7NuIGRlbCBoaXN0b2dyYW1hOg0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGRhdGEuZnJhbWUoVGFibGFUZW51cmUpLCBhZXMoeD1DbGFzZXMsIHk9RnJlY3VlbmNpYV9SZWxhdGl2YSkpICArDQpnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIGNvbG9yPSJibHVlIiwgZmlsbD0iY3lhbiIsIHdpZHRoPTEpICsNCnRoZW1lX2J3KCkgKyBsYWJzKHg9IkFudGlnw7xlZGFkICBlbiBsYSBlbXByZXNhIiwgeT0iRnJlY3VlbmNpYSBSZWxhdGl2YSIpICsNCmdlb21fdGV4dChhZXMobGFiZWw9c3ByaW50ZigiJS4zZiIsIEZyZWN1ZW5jaWFfUmVsYXRpdmEpKSwgdmp1c3Q9LS41LCBjb2w9ImJsYWNrIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAxLCBzaXplID0gOCkpIA0KYGBg