Con el objetivo de poder determinar si existe o no una significancia
estadística para la diferencia entre la Recuperación Global de
la Zafra 2023-2024 y la de la Zafra 2024-2025 se realizan pruebas de
hipótesis para medias / medianas.
library(dplyr)
library(ggplot2)
library(ggpubr)
dataset <- read.csv(file = 'C:/Users/sbarrios/OneDrive - Universidad Galileo/Data Science/R/Proyectos/Pantaleon/Optimizador PrO NI/Data/Recuperacion Global MRSA.csv')
dataset$Zafra <- as.character(dataset$Zafra)
dataset
Funciones de Densidad: Recuperación Global PSA
df1 <- data.frame(RG = dataset[dataset$Zafra == "2024",]$Recuperacion_Global_5861,zafra=dataset[dataset$Zafra == "2024",]$Zafra)
df2 <- data.frame(RG = dataset[dataset$Zafra == "2025",]$Recuperacion_Global_5861,zafra=dataset[dataset$Zafra == "2025",]$Zafra)
df1$zafra <- as.character(df1$zafra)
df2$zafra <- as.character(df2$zafra)
df_RG <- data.frame("Zafra" = c("2024","2025"),
"Media" = c(mean(df1$RG, na.rm=TRUE),mean(df2$RG, na.rm=TRUE)),
"Mediana" = c(median(df1$RG, na.rm=TRUE),median(df2$RG, na.rm=TRUE)),
"Desv. Estándar" = c(sd(df1$RG, na.rm=TRUE),sd(df2$RG, na.rm=TRUE))
)
df_RG
ggplot() +
geom_density(data = df1, aes(x = RG,fill=zafra),alpha=0.7) +
geom_density(data = df2, aes(x = RG,fill=zafra),alpha=0.7)

ggtitle("Global Recovery Distributions")
$title
[1] "Global Recovery Distributions"
attr(,"class")
[1] "labels"
Prueba de Normalidad de Recuperación Global PSA
Se conduce una prueba Shapiro-Wilk para la Recuperación
Global PSA de la zafra 2024 y 2025 con el objetivo de verificar la
asunción de normalidad. El test Shapiro-Wilk considera
como Hipótesis Nula \(H_0\) que los
datos son normalmente distribuidos.
# Shapiro-Wilk normality test for Recuperación Global PSA 2024
with(dataset, shapiro.test(dataset[dataset$Zafra == "2024",]$Recuperacion_Global_5861))
Shapiro-Wilk normality test
data: dataset[dataset$Zafra == "2024", ]$Recuperacion_Global_5861
W = 0.66548, p-value < 2.2e-16
A un nivel de significancia del 5% rechazamos la hipótesis nula de
normalidad y concluimos que los datos no están normalmente
distribuidos.
# Shapiro-Wilk normality test for Recuperación Global PSA 2025
with(dataset, shapiro.test(dataset[dataset$Zafra == "2025",]$Recuperacion_Global_5861))
Shapiro-Wilk normality test
data: dataset[dataset$Zafra == "2025", ]$Recuperacion_Global_5861
W = 0.83575, p-value = 3.652e-09
A un nivel de significancia del 5% rechazamos la hipótesis nula de
normalidad y concluimos que los datos no están normalmente
distribuidos.
Prueba Wilcoxon
Debido a que ambas muestras no cumplen el requisito de ser
normalmente distribuidas, se elige la prueba Wilcoxon de Dos
Muestras No Pareadas como una alternativa no-paramétrica a la
prueba t-Test de Dos Muestras No Pareadas, la cual es
útil para comparar dos grupos independientes de muestras cuando
no están normalmente distribuidas.
\(H_0: RG_{2024} - RG_{2025} \geq
0\)
\(H_1: RG_{2024} - RG_{2025} <
0\)
x <- dataset[dataset$Zafra == "2024",]$Recuperacion_Global_5861
y <- dataset[dataset$Zafra == "2025",]$Recuperacion_Global_5861
res_Wilcox <- wilcox.test(x, y, alternative = "less", mu = 0.0, conf.level = 0.95)
res_Wilcox
Wilcoxon rank sum test with continuity correction
data: x and y
W = 4977, p-value = 1.823e-11
alternative hypothesis: true location shift is less than 0
res_Wilcox$p.value
[1] 1.823401e-11
A un nivel de confianza del 95%, con un p-value de
1.823401e-11 rechazamos la hipótesis nula \(H_0: RG_{2024} - RG_{2025} \geq
0\) y existe evidencia estadística suficiente para
concluir que \(H_1: RG_{2024} -
RG_{2025} < 0\), es decir, el Rendimiento para la
zafra 2025 es mayor al de la zafra 2024.
Prueba t-Test de Dos Muestras No Pareadas Varianzas Desiguales
Se muestra como ejercicio la prueba t-Test de Dos Muestras No
Pareadas, la cual es útil para comparar dos grupos
independientes de muestras cuando se asume que están normalmente
distribuidas.
\(H_0: RG_{2024} - RG_{2025} \geq
0\)
\(H_1: RG_{2024} - RG_{2025} <
0\)
res_tTest <- t.test(x, y, alternative = 'less', mu = 0.0, var.equal = FALSE)
res_tTest
Welch Two Sample t-test
data: x and y
t = -5.8147, df = 283.99, p-value = 8.159e-09
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
-Inf -1.082571
sample estimates:
mean of x mean of y
82.39128 83.90283
res_tTest$p.value
[1] 8.15944e-09
A un nivel de confianza del 95%, con un p-value de
8.15944e-09 rechazamos la hipótesis nula \(H_0: RG_{2024} - RG_{2025} \geq
0\) y existe evidencia estadística suficiente para
concluir que \(H_1: RG_{2024} -
RG_{2025} < 0\), es decir, el Rendimiento para la
zafra 2025 es mayor al de la zafra 2024.
Prueba Wilcoxon para Diferencia Mínima Significativa entre
Recuperación Global 2024 y 2025
Se conduce el test de Wilcoxon para encontrar una diferencia mínima
significativa entre las Recuperaciones Globales 2024 y 2025
\(H_0: RG_{2025} - RG_{2024} \leq
1.04\)
\(H_1: RG_{2025} - RG_{2024} >
1.04\)
x <- dataset[dataset$Zafra == "2024",]$Recuperacion_Global_5861
y <- dataset[dataset$Zafra == "2025",]$Recuperacion_Global_5861
res_Wilcox <- wilcox.test(y, x, alternative = "great", mu = 1.04 , conf.level = 0.95)
res_Wilcox
Wilcoxon rank sum test with continuity correction
data: y and x
W = 10562, p-value = 0.04995
alternative hypothesis: true location shift is greater than 1.04
res_Wilcox$p.value
[1] 0.04994599
A un nivel de confianza del 95%, con un p-value de 0.04994599
rechazamos la hipótesis nula \(H_0: RG_{2025}
- RG_{2024} \leq 1.04\) y existe evidencia estadística
suficiente para concluir que \(H_1:
RG_{2025} - RG_{2024} > 1.04\), es decir, el
Rendimiento para la zafra 2025 es mayor al de la zafra 2024 por
al menos 1.04%.
Prueba ANOVA para Dos Muestras (Un factor)
Se realiza una prueba ANOVA con las dos muestras, equivalente a
prueba t-Student, para un solo factor (Zafra).
dataset_anova <- dataset
dataset_anova$Zafra <- factor(dataset_anova$Zafra)
one.way <- aov(Recuperacion_Global_5861 ~ Zafra, data = dataset_anova)
summary(one.way)
Df Sum Sq Mean Sq F value Pr(>F)
Zafra 1 149.4 149.42 24.95 1.02e-06 ***
Residuals 287 1718.8 5.99
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Con un p-value de 1.02e-06 se rechaza la hipótesis
nula de medias iguales y el factor Zafra tiene un
impacto significativo en la Recuperación Global, y por lo tanto se
concluye que las medias son diferentes.
ggplot(data = dataset_anova, aes(x = Zafra, y = Recuperacion_Global_5861)) + geom_boxplot() + geom_jitter(aes(color = Zafra)) + ggtitle("Box Plot Recuperacion Global (%)")

LS0tDQp0aXRsZTogIlByTyBOaWNhcmFndWEgUkcgSHlwb3RoZXNpcyBUZXN0aW5nIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KQ29uIGVsIG9iamV0aXZvIGRlIHBvZGVyIGRldGVybWluYXIgc2kgZXhpc3RlIG8gbm8gdW5hIHNpZ25pZmljYW5jaWEgZXN0YWTDrXN0aWNhIHBhcmEgbGEgZGlmZXJlbmNpYSBlbnRyZSBsYSAqUmVjdXBlcmFjacOzbiBHbG9iYWwqIGRlIGxhIFphZnJhIDIwMjMtMjAyNCB5IGxhIGRlIGxhIFphZnJhIDIwMjQtMjAyNSBzZSByZWFsaXphbiBwcnVlYmFzIGRlIGhpcMOzdGVzaXMgcGFyYSBtZWRpYXMgLyBtZWRpYW5hcy4gDQoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2dwdWJyKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YXNldCA8LSByZWFkLmNzdihmaWxlID0gJ0M6L1VzZXJzL3NiYXJyaW9zL09uZURyaXZlIC0gVW5pdmVyc2lkYWQgR2FsaWxlby9EYXRhIFNjaWVuY2UvUi9Qcm95ZWN0b3MvUGFudGFsZW9uL09wdGltaXphZG9yIFByTyBOSS9EYXRhL1JlY3VwZXJhY2lvbiBHbG9iYWwgTVJTQS5jc3YnKQ0KZGF0YXNldCRaYWZyYSA8LSBhcy5jaGFyYWN0ZXIoZGF0YXNldCRaYWZyYSkNCmRhdGFzZXQNCmBgYA0KDQoNCiMjIyBGdW5jaW9uZXMgZGUgRGVuc2lkYWQ6IFJlY3VwZXJhY2nDs24gR2xvYmFsIFBTQQ0KDQpgYGB7cn0NCmRmMSA8LSBkYXRhLmZyYW1lKFJHID0gZGF0YXNldFtkYXRhc2V0JFphZnJhID09ICIyMDI0IixdJFJlY3VwZXJhY2lvbl9HbG9iYWxfNTg2MSx6YWZyYT1kYXRhc2V0W2RhdGFzZXQkWmFmcmEgPT0gIjIwMjQiLF0kWmFmcmEpDQpkZjIgPC0gZGF0YS5mcmFtZShSRyA9IGRhdGFzZXRbZGF0YXNldCRaYWZyYSA9PSAiMjAyNSIsXSRSZWN1cGVyYWNpb25fR2xvYmFsXzU4NjEsemFmcmE9ZGF0YXNldFtkYXRhc2V0JFphZnJhID09ICIyMDI1IixdJFphZnJhKQ0KDQpkZjEkemFmcmEgPC0gYXMuY2hhcmFjdGVyKGRmMSR6YWZyYSkNCmRmMiR6YWZyYSA8LSBhcy5jaGFyYWN0ZXIoZGYyJHphZnJhKQ0KDQoNCmRmX1JHIDwtIGRhdGEuZnJhbWUoIlphZnJhIiA9IGMoIjIwMjQiLCIyMDI1IiksIA0KICAgICAgICAgICAgICAgICAgICAgICJNZWRpYSIgPSBjKG1lYW4oZGYxJFJHLCBuYS5ybT1UUlVFKSxtZWFuKGRmMiRSRywgbmEucm09VFJVRSkpLA0KICAgICAgICAgICAgICAgICAgICAgICJNZWRpYW5hIiA9IGMobWVkaWFuKGRmMSRSRywgbmEucm09VFJVRSksbWVkaWFuKGRmMiRSRywgbmEucm09VFJVRSkpLA0KICAgICAgICAgICAgICAgICAgICAgICJEZXN2LiBFc3TDoW5kYXIiID0gYyhzZChkZjEkUkcsIG5hLnJtPVRSVUUpLHNkKGRmMiRSRywgbmEucm09VFJVRSkpDQogICAgICAgICAgICAgICAgICAgICAgKQ0KDQpkZl9SRw0KDQpnZ3Bsb3QoKSArIA0KICBnZW9tX2RlbnNpdHkoZGF0YSA9IGRmMSwgYWVzKHggPSBSRyxmaWxsPXphZnJhKSxhbHBoYT0wLjcpICsgDQogIGdlb21fZGVuc2l0eShkYXRhID0gZGYyLCBhZXMoeCA9IFJHLGZpbGw9emFmcmEpLGFscGhhPTAuNykNCiAgZ2d0aXRsZSgiR2xvYmFsIFJlY292ZXJ5IERpc3RyaWJ1dGlvbnMiKQ0KYGBgDQoNCiMjIyBQcnVlYmEgZGUgTm9ybWFsaWRhZCBkZSBSZWN1cGVyYWNpw7NuIEdsb2JhbCBQU0ENCg0KU2UgY29uZHVjZSB1bmEgcHJ1ZWJhICpTaGFwaXJvLVdpbGsqIHBhcmEgbGEgUmVjdXBlcmFjacOzbiBHbG9iYWwgUFNBIGRlIGxhIHphZnJhIDIwMjQgeSAyMDI1IGNvbiBlbCBvYmpldGl2byBkZSB2ZXJpZmljYXIgbGEgYXN1bmNpw7NuIGRlICpub3JtYWxpZGFkKi4NCkVsIHRlc3QgKlNoYXBpcm8tV2lsayogY29uc2lkZXJhIGNvbW8gSGlww7N0ZXNpcyBOdWxhICRIXzAkIHF1ZSBsb3MgZGF0b3Mgc29uIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRvcy4NCg0KYGBge3J9DQojIFNoYXBpcm8tV2lsayBub3JtYWxpdHkgdGVzdCBmb3IgUmVjdXBlcmFjacOzbiBHbG9iYWwgUFNBIDIwMjQNCndpdGgoZGF0YXNldCwgc2hhcGlyby50ZXN0KGRhdGFzZXRbZGF0YXNldCRaYWZyYSA9PSAiMjAyNCIsXSRSZWN1cGVyYWNpb25fR2xvYmFsXzU4NjEpKQ0KYGBgDQpBIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGVsIDUlIHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhIGRlIG5vcm1hbGlkYWQgeSBjb25jbHVpbW9zIHF1ZSBsb3MgZGF0b3MgKipubyBlc3TDoW4gbm9ybWFsbWVudGUgZGlzdHJpYnVpZG9zKiouDQoNCmBgYHtyfQ0KIyBTaGFwaXJvLVdpbGsgbm9ybWFsaXR5IHRlc3QgZm9yIFJlY3VwZXJhY2nDs24gR2xvYmFsIFBTQSAyMDI1DQp3aXRoKGRhdGFzZXQsIHNoYXBpcm8udGVzdChkYXRhc2V0W2RhdGFzZXQkWmFmcmEgPT0gIjIwMjUiLF0kUmVjdXBlcmFjaW9uX0dsb2JhbF81ODYxKSkNCmBgYA0KQSB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIGRlbCA1JSByZWNoYXphbW9zIGxhIGhpcMOzdGVzaXMgbnVsYSBkZSBub3JtYWxpZGFkIHkgY29uY2x1aW1vcyBxdWUgbG9zIGRhdG9zICoqbm8gZXN0w6FuIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRvcyoqLg0KDQojIyMgUHJ1ZWJhIFdpbGNveG9uDQoNCkRlYmlkbyBhIHF1ZSBhbWJhcyBtdWVzdHJhcyBubyBjdW1wbGVuIGVsIHJlcXVpc2l0byBkZSBzZXIgbm9ybWFsbWVudGUgZGlzdHJpYnVpZGFzLCBzZSBlbGlnZSBsYSBwcnVlYmEgKipXaWxjb3hvbiBkZSBEb3MgTXVlc3RyYXMgTm8gUGFyZWFkYXMqKiBjb21vIHVuYSBhbHRlcm5hdGl2YSBuby1wYXJhbcOpdHJpY2EgYSBsYSBwcnVlYmEgKip0LVRlc3QgZGUgRG9zIE11ZXN0cmFzIE5vIFBhcmVhZGFzKiosIGxhIGN1YWwgZXMgw7p0aWwgcGFyYSBjb21wYXJhciBkb3MgZ3J1cG9zIGluZGVwZW5kaWVudGVzIGRlIG11ZXN0cmFzIGN1YW5kbyAqKm5vIGVzdMOhbiBub3JtYWxtZW50ZSBkaXN0cmlidWlkYXMqKi4NCg0KJEhfMDogUkdfezIwMjR9IC0gUkdfezIwMjV9IFxnZXEgMCQNCg0KJEhfMTogUkdfezIwMjR9IC0gUkdfezIwMjV9IDwgMCQNCg0KYGBge3J9DQp4IDwtIGRhdGFzZXRbZGF0YXNldCRaYWZyYSA9PSAiMjAyNCIsXSRSZWN1cGVyYWNpb25fR2xvYmFsXzU4NjENCnkgPC0gZGF0YXNldFtkYXRhc2V0JFphZnJhID09ICIyMDI1IixdJFJlY3VwZXJhY2lvbl9HbG9iYWxfNTg2MQ0KDQpyZXNfV2lsY294IDwtIHdpbGNveC50ZXN0KHgsIHksIGFsdGVybmF0aXZlID0gImxlc3MiLCBtdSA9IDAuMCwgY29uZi5sZXZlbCA9IDAuOTUpDQpyZXNfV2lsY294DQpgYGANCmBgYHtyfQ0KcmVzX1dpbGNveCRwLnZhbHVlDQpgYGANCkEgdW4gbml2ZWwgZGUgY29uZmlhbnphIGRlbCA5NSUsIGNvbiB1biAqKnAtdmFsdWUgZGUgMS44MjM0MDFlLTExIHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhICRIXzA6IFJHX3syMDI0fSAtIFJHX3syMDI1fSBcZ2VxIDAkKiogeSBleGlzdGUgZXZpZGVuY2lhIGVzdGFkw61zdGljYSBzdWZpY2llbnRlIHBhcmEgY29uY2x1aXIgcXVlICoqJEhfMTogUkdfezIwMjR9IC0gUkdfezIwMjV9IDwgMCQqKiwgZXMgZGVjaXIsIGVsIFJlbmRpbWllbnRvIHBhcmEgbGEgemFmcmEgMjAyNSBlcyBtYXlvciBhbCBkZSBsYSB6YWZyYSAyMDI0Lg0KDQojIyMgUHJ1ZWJhIHQtVGVzdCBkZSBEb3MgTXVlc3RyYXMgTm8gUGFyZWFkYXMgVmFyaWFuemFzIERlc2lndWFsZXMNCg0KU2UgbXVlc3RyYSBjb21vIGVqZXJjaWNpbyBsYSBwcnVlYmEgKip0LVRlc3QgZGUgRG9zIE11ZXN0cmFzIE5vIFBhcmVhZGFzKiosIGxhIGN1YWwgZXMgw7p0aWwgcGFyYSBjb21wYXJhciBkb3MgZ3J1cG9zIGluZGVwZW5kaWVudGVzIGRlIG11ZXN0cmFzIGN1YW5kbyBzZSBhc3VtZSBxdWUgZXN0w6FuIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRhcy4NCg0KJEhfMDogUkdfezIwMjR9IC0gUkdfezIwMjV9IFxnZXEgMCQNCg0KJEhfMTogUkdfezIwMjR9IC0gUkdfezIwMjV9IDwgMCQNCg0KYGBge3J9DQpyZXNfdFRlc3QgPC0gdC50ZXN0KHgsIHksIGFsdGVybmF0aXZlID0gJ2xlc3MnLCBtdSA9IDAuMCwgdmFyLmVxdWFsID0gRkFMU0UpDQpyZXNfdFRlc3QNCmBgYA0KYGBge3J9DQpyZXNfdFRlc3QkcC52YWx1ZQ0KYGBgDQpBIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZWwgOTUlLCBjb24gdW4gKipwLXZhbHVlIGRlIDguMTU5NDRlLTA5IHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhICRIXzA6IFJHX3syMDI0fSAtIFJHX3syMDI1fSBcZ2VxIDAkKiogeSBleGlzdGUgZXZpZGVuY2lhIGVzdGFkw61zdGljYSBzdWZpY2llbnRlIHBhcmEgY29uY2x1aXIgcXVlICoqJEhfMTogUkdfezIwMjR9IC0gUkdfezIwMjV9IDwgMCQqKiwgZXMgZGVjaXIsIGVsIFJlbmRpbWllbnRvIHBhcmEgbGEgemFmcmEgMjAyNSBlcyBtYXlvciBhbCBkZSBsYSB6YWZyYSAyMDI0Lg0KDQoNCiMjIyBQcnVlYmEgV2lsY294b24gcGFyYSBEaWZlcmVuY2lhIE3DrW5pbWEgU2lnbmlmaWNhdGl2YSBlbnRyZSBSZWN1cGVyYWNpw7NuIEdsb2JhbCAyMDI0IHkgMjAyNQ0KDQpTZSBjb25kdWNlIGVsIHRlc3QgZGUgV2lsY294b24gcGFyYSBlbmNvbnRyYXIgdW5hIGRpZmVyZW5jaWEgbcOtbmltYSBzaWduaWZpY2F0aXZhIGVudHJlIGxhcyBSZWN1cGVyYWNpb25lcyBHbG9iYWxlcyAyMDI0IHkgMjAyNQ0KDQokSF8wOiBSR197MjAyNX0gLSBSR197MjAyNH0gXGxlcSAxLjA0JA0KDQokSF8xOiBSR197MjAyNX0gLSBSR197MjAyNH0gPiAxLjA0JA0KDQpgYGB7cn0NCnggPC0gZGF0YXNldFtkYXRhc2V0JFphZnJhID09ICIyMDI0IixdJFJlY3VwZXJhY2lvbl9HbG9iYWxfNTg2MQ0KeSA8LSBkYXRhc2V0W2RhdGFzZXQkWmFmcmEgPT0gIjIwMjUiLF0kUmVjdXBlcmFjaW9uX0dsb2JhbF81ODYxDQoNCnJlc19XaWxjb3ggPC0gd2lsY294LnRlc3QoeSwgeCwgYWx0ZXJuYXRpdmUgPSAiZ3JlYXQiLCBtdSA9IDEuMDQgLCBjb25mLmxldmVsID0gMC45NSkNCnJlc19XaWxjb3gNCmBgYA0KYGBge3J9DQpyZXNfV2lsY294JHAudmFsdWUNCmBgYA0KQSB1biBuaXZlbCBkZSBjb25maWFuemEgZGVsIDk1JSwgY29uIHVuICoqcC12YWx1ZSBkZSAwLjA0OTk0NTk5IHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhICRIXzA6IFJHX3syMDI1fSAtIFJHX3syMDI0fSBcbGVxIDEuMDQkKiogeSBleGlzdGUgZXZpZGVuY2lhIGVzdGFkw61zdGljYSBzdWZpY2llbnRlIHBhcmEgY29uY2x1aXIgcXVlICoqJEhfMTogUkdfezIwMjV9IC0gUkdfezIwMjR9ID4gMS4wNCQqKiwgZXMgZGVjaXIsIGVsIFJlbmRpbWllbnRvIHBhcmEgbGEgemFmcmEgMjAyNSBlcyBtYXlvciBhbCBkZSBsYSB6YWZyYSAyMDI0ICoqcG9yIGFsIG1lbm9zIDEuMDQlKiouDQoNCiMjIyBQcnVlYmEgQU5PVkEgcGFyYSBEb3MgTXVlc3RyYXMgKFVuIGZhY3RvcikNCg0KU2UgcmVhbGl6YSB1bmEgcHJ1ZWJhIEFOT1ZBIGNvbiBsYXMgZG9zIG11ZXN0cmFzLCBlcXVpdmFsZW50ZSBhIHBydWViYSB0LVN0dWRlbnQsIHBhcmEgdW4gc29sbyBmYWN0b3IgKFphZnJhKS4NCg0KYGBge3J9DQpkYXRhc2V0X2Fub3ZhIDwtIGRhdGFzZXQNCmRhdGFzZXRfYW5vdmEkWmFmcmEgPC0gZmFjdG9yKGRhdGFzZXRfYW5vdmEkWmFmcmEpDQpvbmUud2F5IDwtIGFvdihSZWN1cGVyYWNpb25fR2xvYmFsXzU4NjEgfiBaYWZyYSwgZGF0YSA9IGRhdGFzZXRfYW5vdmEpDQpzdW1tYXJ5KG9uZS53YXkpDQpgYGANCkNvbiB1biAqKnAtdmFsdWUgZGUgMS4wMmUtMDYqKiBzZSByZWNoYXphIGxhIGhpcMOzdGVzaXMgbnVsYSBkZSBtZWRpYXMgaWd1YWxlcyB5IGVsIGZhY3RvciAqKlphZnJhKiogdGllbmUgdW4gaW1wYWN0byBzaWduaWZpY2F0aXZvIGVuIGxhIFJlY3VwZXJhY2nDs24gR2xvYmFsLCB5IHBvciBsbyB0YW50byBzZSBjb25jbHV5ZSBxdWUgKipsYXMgbWVkaWFzIHNvbiBkaWZlcmVudGVzKiouIA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gZGF0YXNldF9hbm92YSwgYWVzKHggPSBaYWZyYSwgeSA9IFJlY3VwZXJhY2lvbl9HbG9iYWxfNTg2MSkpICsgZ2VvbV9ib3hwbG90KCkgKyBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBaYWZyYSkpICsgZ2d0aXRsZSgiQm94IFBsb3QgUmVjdXBlcmFjaW9uIEdsb2JhbCAoJSkiKQ0KYGBgDQoNCg==