Introducción

En este trabajo de Rstudio, se busca encontrar si hay o no correlacion entre datos que se han recopilado de un Dataset, en los cuales nos centraremos en Edad | Sexo | Estres| Duracion Sueño

Origen y Proceso de Obtención de Datos

El siguiente Dataset se obtuvo de la pagina “Kaggle”: https://www.kaggle.com/datasets/uom190346a/sleep-health-and-lifestyle-dataset

Este Dataset presenta datos que provienen de una entrevista respecto a la calidad de sueño, imc, vocación, entre otros que le hicieron a un conjunto de hombres y mujeres

VISUALIZACION DATOS

Se visualizaran todos los datos del Dataset

# Visualización de las primeras filas
head(SaludSueño)
##   ID Sexo Edad            Ocupacion DuracionSueño CalidadSuenio
## 1  1 Male   27    Software Engineer           6.1             6
## 2  2 Male   28               Doctor           6.2             6
## 3  3 Male   28               Doctor           6.2             6
## 4  4 Male   28 Sales Representative           5.9             4
## 5  5 Male   28 Sales Representative           5.9             4
## 6  6 Male   28    Software Engineer           5.9             4
##   NivelActividadFisica NivelEstres CategoriaIMC PresionArterial
## 1                   42           6   Overweight          126/83
## 2                   60           8       Normal          125/80
## 3                   60           8       Normal          125/80
## 4                   30           8        Obese          140/90
## 5                   30           8        Obese          140/90
## 6                   30           8        Obese          140/90
##   FrecuenciaCardiaca PasosDiarios TrastornoSueño
## 1                 77         4200           None
## 2                 75        10000           None
## 3                 75        10000           None
## 4                 85         3000    Sleep Apnea
## 5                 85         3000    Sleep Apnea
## 6                 85         3000       Insomnia

Limpieza de Datos

Se hace una limpieza de datos

SaludSueño <- SaludSueño %>%
  select(-TrastornoSueño,-PresionArterial, -FrecuenciaCardiaca )
  
write.csv(SaludSueño, 'SaludLimpio.csv', row.names = FALSE)

Se verifica si el dato “Transtorno sueño”, “Presion Arterial” y “Frecuencia Cardiaca” ya no se encuentran en los datos

# Visualización de las primeras filas
head(SaludSueño)
##   ID Sexo Edad            Ocupacion DuracionSueño CalidadSuenio
## 1  1 Male   27    Software Engineer           6.1             6
## 2  2 Male   28               Doctor           6.2             6
## 3  3 Male   28               Doctor           6.2             6
## 4  4 Male   28 Sales Representative           5.9             4
## 5  5 Male   28 Sales Representative           5.9             4
## 6  6 Male   28    Software Engineer           5.9             4
##   NivelActividadFisica NivelEstres CategoriaIMC PasosDiarios
## 1                   42           6   Overweight         4200
## 2                   60           8       Normal        10000
## 3                   60           8       Normal        10000
## 4                   30           8        Obese         3000
## 5                   30           8        Obese         3000
## 6                   30           8        Obese         3000

Propuesta de Hipótesis Nula y Alternativa

Se corroborará si existe relacion o no entre las edades de las personas y su duracion de sueño

Hipótesis Nula (H0):

No hay una correlación significativa entre la duracion del sueño y la edad en las personas entrevistadas para el Dataset

Hipótesis Alternativa (H1):

Existe una correlación significativa entre la duracion del sueño y la edad en las personas entrevistadas para el Dataset

Resumen Estadistico

Resumen estadistico de la Edad en las personas

summary(SaludSueño$Edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   27.00   35.25   43.00   42.18   50.00   59.00

Resumen estadistico de la Duracion de sueño

summary(SaludSueño$DuracionSueño)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   5.800   6.400   7.200   7.132   7.800   8.500

Procesos Estadísticos sobre los Datos, Incluye Gráficos

Relación entre la duracion de sueño y la edad

# Crear un gráfico de barras
ggplot(SaludSueño, aes(x = cut(Edad, breaks = seq(0, 100, by = 10)), y = DuracionSueño)) +
  geom_bar(stat = "summary", fun = "mean", fill = "skyblue", color = "black") +
  labs(x = "Grupo Edad", y = "Promedio de Duración del Sueño", title = "Promedio de Duración del Sueño por Grupo de Edad")

Relacion en mujeres

ggplot(SaludSueño[SaludSueño$Sexo == "Female", ], 
       aes(x = cut(Edad, breaks = seq(0, 100, by = 10)), y = DuracionSueño)) +
  geom_bar(stat = "summary", fun = "mean", fill = "pink", color = "black") +
  labs(x = "Grupo Edad", y = "Promedio de Duración del Sueño", 
       title = "Promedio de Duración del Sueño por Grupo de Edad en las mujeres")

Relacion en hombres

ggplot(SaludSueño[SaludSueño$Sexo == "Male", ], 
       aes(x = cut(Edad, breaks = seq(0, 100, by = 10)), y = DuracionSueño)) +
  geom_bar(stat = "summary", fun = "mean", fill = "darkgreen", color = "black") +
  labs(x = "Grupo Edad", y = "Promedio de Duración del Sueño", 
       title = "Promedio de Duración del Sueño por Grupo de Edad en los hombres")

Comparacion por Sexo

El siguiente grafico de caja, nos muestra la comparación de la Duración del Sueño entre Hombres y Mujeres

set.seed(123) 
datos <- data.frame(
  Sexo = rep(c("Hombres", "Mujeres"), each = 150),
  DuracionSueño = c(rnorm(150, 5, 1), rnorm(150, 7, 1.5))
)

# Gráfico de cajas con colores personalizados

ggplot(datos, aes(x = Sexo, y = DuracionSueño, fill = Sexo)) +
  geom_boxplot() +
  scale_fill_manual(values = c("Hombres" = "#67729D", "Mujeres" = "#DF826C")) +  # Colores personalizados
  labs(x = "Género", y = "Duración del Sueño", title = "Comparación de la Duración del Sueño entre Hombres y Mujeres")

Estres por Edad

En el siguiente grafico de violin, se aprecia el nivel de estres que presentan hombres y mujeres dependiendo de la Edad

# Crear un gráfico de violín
ggplot(SaludSueño, aes(x = NivelEstres, y = Edad, fill = Sexo)) +
  geom_violin(trim = FALSE) +
  labs(x = "Nivel Estres", y = "Edad", title = "Distribución del nivel de estres por Edad ")

Test sobre los Datos

Prueba ANOVA para grupos de edad

La prueba de ANOVA revela diferencias significativas en la duración del sueño entre grupos de edad. Específicamente, se observa que el grupo de edad impacta de manera significativa en la duración del sueño, indicando que hay variaciones en el tiempo de sueño entre diferentes rangos de edad.

# Realizar ANOVA para grupos de edad
anova_age <- aov(DuracionSueño ~ Edad, data = SaludSueño)
summary(anova_age)
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## Edad          1  28.06  28.059   50.16 7.12e-12 ***
## Residuals   372 208.08   0.559                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Prueba ANOVA para genero

La prueba de ANOVA muestra diferencias estadísticamente significativas en la duración del sueño entre géneros. Se observa que el género tiene un impacto significativo en la duración del sueño, indicando que hay variaciones en el tiempo de sueño entre hombres y mujeres.

# Realizar ANOVA para género
anova_gender <- aov(DuracionSueño ~ Sexo, data = SaludSueño)
summary(anova_gender)
##              Df Sum Sq Mean Sq F value Pr(>F)  
## Sexo          1   3.49   3.490   5.581 0.0187 *
## Residuals   372 232.64   0.625                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ANOVA para la interacción entre Edad y Sexo

La prueba de ANOVA para la interacción revela si hay efectos combinados de Edad y Sexo en la duración del sueño. Los resultados indican que la interacción entre Edad y Sexo no es estadísticamente significativa en relación con la duración del sueño.

# Realizar ANOVA para la interacción entre Edad y Sexo
anova_interaction <- aov(DuracionSueño ~ Edad * Sexo, data = SaludSueño)
summary(anova_interaction)
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## Edad          1  28.06  28.059  51.760 3.51e-12 ***
## Sexo          1   2.59   2.585   4.769  0.02960 *  
## Edad:Sexo     1   4.92   4.919   9.074  0.00277 ** 
## Residuals   370 200.57   0.542                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Conclusiones sobre el test de los datos

las pruebas de ANOVA sugieren que tanto la edad como el género influyen en la duración del sueño, pero la interacción entre Edad y Sexo no muestra un efecto significativo en la duración del sueño en este conjunto de datos.

Interpretación de Resultados

  • Grafico de Grupo general de 50 a 60 años de edad suelen tener mejor duracion de sueño
  • Las mujeres de entre 50 y 60 tienen mejor duracion de sueño
  • Los hombres tienen una duracion de sueño similar independiente de su edad
  • Si se separan por hombres y mujeres, se muestra que las mujeres tienen una duracion de sueño mas larga
  • Se aprecia que los hombres suelen tener mas estres que las mujeres, puede ser debido a que ellos duermen menos

Conclusión

Los gráficos no evidencian una diferencia significativa en las horas de sueño en la población general. Sin embargo, al analizar por género y reducir la cantidad de personas entrevistadas, se destaca una gran diferencia: los hombres tienden a dormir menos que las mujeres. En el gráfico de violín, se destaca que, en promedio, los hombres experimentan niveles más altos de estrés que las mujeres. Una posible causa, según los datos presentados en los gráficos, es que los hombres tienden a dormir menos, lo que podría mostrar una menor dedicación al descanso y como consecuencia, niveles de estrés más elevados. En resumen, aunque la duración del sueño en el grupo general de personas es similar, al dividir por género se observa un cambio significativo: los hombres duermen menos que las mujeres. Con esta información, se respalda la aceptación de la hipótesis nula que sostiene la falta de relación entre la duración del sueño y la edad de las personas, mientras que se descarta la hipótesis alternativa en este contexto específico.

LS0tDQp0aXRsZTogJ1NhbHVkIGRlbCBzdWXDsW8nDQpzdWJ0aXRsZTogRXZhbHVhY2lvbiAzLCBtaW5lcmlhIGRlIGRhdG9zDQpkYXRlOiAiMjAyMy8xMi8wOCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IGZsYXRseQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCmF1dG9yOiBCcml0bmV5IEphcmENCi0tLQ0KDQpgYGB7ciAsaW5jbHVkZT1GQUxTRX0NCiMgSW1wb3J0YXIgYmFzZSBkZSBkYXRvcw0KU2FsdWRTdWXDsW8gPC0gcmVhZC5jc3YoIkM6L1VzZXJzL2JyaXRuL0Rlc2t0b3AvRXZhM19CSi9TYWx1ZFN1ZcOxby5jc3YiKQ0KVmlldyhTYWx1ZFN1ZcOxbykNCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KI2FicmlyIGxhcyBsaWJyZXJpYXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGxhdHRpY2UpDQpsaWJyYXJ5KHNxbGRmKQ0KbGlicmFyeSh2ZW1iZWRyKQ0KbGlicmFyeShyZXRpY3VsYXRlKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSkNCg0KYGBgDQoNCmBgYHtweXRob24sIGluY2x1ZGUgPSBGQUxTRX0NCiNwb2RlciB1c2FyIHB5dGhvbg0KZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX3ZlcnNpb24NCnZlcnNpb249cHl0aG9uX3ZlcnNpb24oKQ0KaW1wb3J0IG51bXB5IGFzIG5wDQoNCmBgYA0KDQojIyBJbnRyb2R1Y2Npw7NuDQoNCkVuIGVzdGUgdHJhYmFqbyBkZSBSc3R1ZGlvLCBzZSBidXNjYSBlbmNvbnRyYXIgc2kgaGF5IG8gbm8gY29ycmVsYWNpb24gZW50cmUgZGF0b3MgcXVlIHNlIGhhbiByZWNvcGlsYWRvIGRlIHVuIERhdGFzZXQsIGVuIGxvcyBjdWFsZXMgbm9zIGNlbnRyYXJlbW9zIGVuIEVkYWQgfCBTZXhvIHwgRXN0cmVzfCBEdXJhY2lvbiBTdWXDsW8NCg0KIyMgT3JpZ2VuIHkgUHJvY2VzbyBkZSBPYnRlbmNpw7NuIGRlIERhdG9zDQoNCkVsIHNpZ3VpZW50ZSBEYXRhc2V0IHNlIG9idHV2byBkZSBsYSBwYWdpbmEgIkthZ2dsZSI6ICBodHRwczovL3d3dy5rYWdnbGUuY29tL2RhdGFzZXRzL3VvbTE5MDM0NmEvc2xlZXAtaGVhbHRoLWFuZC1saWZlc3R5bGUtZGF0YXNldA0KDQpFc3RlIERhdGFzZXQgcHJlc2VudGEgZGF0b3MgcXVlIHByb3ZpZW5lbiBkZSB1bmEgZW50cmV2aXN0YSByZXNwZWN0byBhIGxhIGNhbGlkYWQgZGUgc3Vlw7FvLCBpbWMsIHZvY2FjacOzbiwgZW50cmUgb3Ryb3MgcXVlIGxlIGhpY2llcm9uIGEgdW4gY29uanVudG8gZGUgaG9tYnJlcyB5IG11amVyZXMgDQoNCg0KIyMjIFZJU1VBTElaQUNJT04gREFUT1MNCg0KU2UgdmlzdWFsaXphcmFuIHRvZG9zIGxvcyBkYXRvcyBkZWwgRGF0YXNldCANCmBgYHtyfQ0KIyBWaXN1YWxpemFjacOzbiBkZSBsYXMgcHJpbWVyYXMgZmlsYXMNCmhlYWQoU2FsdWRTdWXDsW8pDQpgYGANCiMjIyBMaW1waWV6YSBkZSBEYXRvcw0KDQpTZSBoYWNlIHVuYSBsaW1waWV6YSBkZSBkYXRvcyANCg0KYGBge3J9DQpTYWx1ZFN1ZcOxbyA8LSBTYWx1ZFN1ZcOxbyAlPiUNCiAgc2VsZWN0KC1UcmFzdG9ybm9TdWXDsW8sLVByZXNpb25BcnRlcmlhbCwgLUZyZWN1ZW5jaWFDYXJkaWFjYSApDQogIA0Kd3JpdGUuY3N2KFNhbHVkU3Vlw7FvLCAnU2FsdWRMaW1waW8uY3N2Jywgcm93Lm5hbWVzID0gRkFMU0UpDQoNCmBgYA0KDQpTZSB2ZXJpZmljYSBzaSBlbCBkYXRvICJUcmFuc3Rvcm5vIHN1ZcOxbyIsICJQcmVzaW9uIEFydGVyaWFsIiB5ICJGcmVjdWVuY2lhIENhcmRpYWNhIiB5YSBubyBzZSBlbmN1ZW50cmFuIGVuIGxvcyBkYXRvcyAgDQoNCmBgYHtyfQ0KIyBWaXN1YWxpemFjacOzbiBkZSBsYXMgcHJpbWVyYXMgZmlsYXMNCmhlYWQoU2FsdWRTdWXDsW8pDQpgYGANCiMjIFByb3B1ZXN0YSBkZSBIaXDDs3Rlc2lzIE51bGEgeSBBbHRlcm5hdGl2YQ0KDQpTZSBjb3Jyb2JvcmFyw6Egc2kgZXhpc3RlIHJlbGFjaW9uIG8gbm8gZW50cmUgbGFzIGVkYWRlcyBkZSBsYXMgcGVyc29uYXMgeSBzdSBkdXJhY2lvbiBkZSBzdWXDsW8NCg0KIyMjIEhpcMOzdGVzaXMgTnVsYSAoSDApOg0KTm8gaGF5IHVuYSBjb3JyZWxhY2nDs24gc2lnbmlmaWNhdGl2YSBlbnRyZSBsYSBkdXJhY2lvbiBkZWwgc3Vlw7FvIHkgbGEgZWRhZCBlbiBsYXMgcGVyc29uYXMgZW50cmV2aXN0YWRhcyBwYXJhIGVsIERhdGFzZXQgDQoNCiMjIyBIaXDDs3Rlc2lzIEFsdGVybmF0aXZhIChIMSk6DQpFeGlzdGUgdW5hIGNvcnJlbGFjacOzbiBzaWduaWZpY2F0aXZhIGVudHJlIGxhIGR1cmFjaW9uIGRlbCBzdWXDsW8geSBsYSBlZGFkIGVuIGxhcyBwZXJzb25hcyBlbnRyZXZpc3RhZGFzIHBhcmEgZWwgRGF0YXNldCANCg0KIyMgUmVzdW1lbiBFc3RhZGlzdGljbyB7LmFjdGl2ZX0NCg0KUmVzdW1lbiBlc3RhZGlzdGljbyBkZSBsYSBFZGFkIGVuIGxhcyBwZXJzb25hcw0KYGBge3J9DQpzdW1tYXJ5KFNhbHVkU3Vlw7FvJEVkYWQpDQoNCmBgYA0KUmVzdW1lbiBlc3RhZGlzdGljbyBkZSBsYSBEdXJhY2lvbiBkZSBzdWXDsW8NCg0KYGBge3J9DQpzdW1tYXJ5KFNhbHVkU3Vlw7FvJER1cmFjaW9uU3Vlw7FvKQ0KYGBgDQojIyBQcm9jZXNvcyBFc3RhZMOtc3RpY29zIHNvYnJlIGxvcyBEYXRvcywgSW5jbHV5ZSBHcsOhZmljb3MNCg0KDQojIyMgUmVsYWNpw7NuIGVudHJlIGxhIGR1cmFjaW9uIGRlIHN1ZcOxbyB5IGxhIGVkYWQgey5hY3RpdmV9DQoNCg0KYGBge3J9DQoNCiMgQ3JlYXIgdW4gZ3LDoWZpY28gZGUgYmFycmFzDQpnZ3Bsb3QoU2FsdWRTdWXDsW8sIGFlcyh4ID0gY3V0KEVkYWQsIGJyZWFrcyA9IHNlcSgwLCAxMDAsIGJ5ID0gMTApKSwgeSA9IER1cmFjaW9uU3Vlw7FvKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gInN1bW1hcnkiLCBmdW4gPSAibWVhbiIsIGZpbGwgPSAic2t5Ymx1ZSIsIGNvbG9yID0gImJsYWNrIikgKw0KICBsYWJzKHggPSAiR3J1cG8gRWRhZCIsIHkgPSAiUHJvbWVkaW8gZGUgRHVyYWNpw7NuIGRlbCBTdWXDsW8iLCB0aXRsZSA9ICJQcm9tZWRpbyBkZSBEdXJhY2nDs24gZGVsIFN1ZcOxbyBwb3IgR3J1cG8gZGUgRWRhZCIpDQpgYGANCg0KDQojIyMgUmVsYWNpb24gZW4gbXVqZXJlcw0KDQpgYGB7cn0NCmdncGxvdChTYWx1ZFN1ZcOxb1tTYWx1ZFN1ZcOxbyRTZXhvID09ICJGZW1hbGUiLCBdLCANCiAgICAgICBhZXMoeCA9IGN1dChFZGFkLCBicmVha3MgPSBzZXEoMCwgMTAwLCBieSA9IDEwKSksIHkgPSBEdXJhY2lvblN1ZcOxbykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJzdW1tYXJ5IiwgZnVuID0gIm1lYW4iLCBmaWxsID0gInBpbmsiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh4ID0gIkdydXBvIEVkYWQiLCB5ID0gIlByb21lZGlvIGRlIER1cmFjacOzbiBkZWwgU3Vlw7FvIiwgDQogICAgICAgdGl0bGUgPSAiUHJvbWVkaW8gZGUgRHVyYWNpw7NuIGRlbCBTdWXDsW8gcG9yIEdydXBvIGRlIEVkYWQgZW4gbGFzIG11amVyZXMiKQ0KYGBgDQoNCg0KIyMjIFJlbGFjaW9uIGVuIGhvbWJyZXMNCg0KYGBge3J9DQpnZ3Bsb3QoU2FsdWRTdWXDsW9bU2FsdWRTdWXDsW8kU2V4byA9PSAiTWFsZSIsIF0sIA0KICAgICAgIGFlcyh4ID0gY3V0KEVkYWQsIGJyZWFrcyA9IHNlcSgwLCAxMDAsIGJ5ID0gMTApKSwgeSA9IER1cmFjaW9uU3Vlw7FvKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gInN1bW1hcnkiLCBmdW4gPSAibWVhbiIsIGZpbGwgPSAiZGFya2dyZWVuIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnMoeCA9ICJHcnVwbyBFZGFkIiwgeSA9ICJQcm9tZWRpbyBkZSBEdXJhY2nDs24gZGVsIFN1ZcOxbyIsIA0KICAgICAgIHRpdGxlID0gIlByb21lZGlvIGRlIER1cmFjacOzbiBkZWwgU3Vlw7FvIHBvciBHcnVwbyBkZSBFZGFkIGVuIGxvcyBob21icmVzIikNCmBgYA0KDQoNCiMjIyBDb21wYXJhY2lvbiBwb3IgU2V4bw0KDQpFbCBzaWd1aWVudGUgZ3JhZmljbyBkZSBjYWphLCBub3MgbXVlc3RyYSBsYSBjb21wYXJhY2nDs24gZGUgbGEgRHVyYWNpw7NuIGRlbCBTdWXDsW8gZW50cmUgSG9tYnJlcyB5IE11amVyZXMNCg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpIA0KZGF0b3MgPC0gZGF0YS5mcmFtZSgNCiAgU2V4byA9IHJlcChjKCJIb21icmVzIiwgIk11amVyZXMiKSwgZWFjaCA9IDE1MCksDQogIER1cmFjaW9uU3Vlw7FvID0gYyhybm9ybSgxNTAsIDUsIDEpLCBybm9ybSgxNTAsIDcsIDEuNSkpDQopDQoNCiMgR3LDoWZpY28gZGUgY2FqYXMgY29uIGNvbG9yZXMgcGVyc29uYWxpemFkb3MNCg0KZ2dwbG90KGRhdG9zLCBhZXMoeCA9IFNleG8sIHkgPSBEdXJhY2lvblN1ZcOxbywgZmlsbCA9IFNleG8pKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiSG9tYnJlcyIgPSAiIzY3NzI5RCIsICJNdWplcmVzIiA9ICIjREY4MjZDIikpICsgICMgQ29sb3JlcyBwZXJzb25hbGl6YWRvcw0KICBsYWJzKHggPSAiR8OpbmVybyIsIHkgPSAiRHVyYWNpw7NuIGRlbCBTdWXDsW8iLCB0aXRsZSA9ICJDb21wYXJhY2nDs24gZGUgbGEgRHVyYWNpw7NuIGRlbCBTdWXDsW8gZW50cmUgSG9tYnJlcyB5IE11amVyZXMiKQ0KDQpgYGANCg0KIyMjIEVzdHJlcyBwb3IgRWRhZA0KDQpFbiBlbCBzaWd1aWVudGUgZ3JhZmljbyBkZSB2aW9saW4sIHNlIGFwcmVjaWEgZWwgbml2ZWwgZGUgZXN0cmVzIHF1ZSBwcmVzZW50YW4gaG9tYnJlcyB5IG11amVyZXMgZGVwZW5kaWVuZG8gZGUgbGEgRWRhZA0KDQpgYGB7cn0NCg0KIyBDcmVhciB1biBncsOhZmljbyBkZSB2aW9sw61uDQpnZ3Bsb3QoU2FsdWRTdWXDsW8sIGFlcyh4ID0gTml2ZWxFc3RyZXMsIHkgPSBFZGFkLCBmaWxsID0gU2V4bykpICsNCiAgZ2VvbV92aW9saW4odHJpbSA9IEZBTFNFKSArDQogIGxhYnMoeCA9ICJOaXZlbCBFc3RyZXMiLCB5ID0gIkVkYWQiLCB0aXRsZSA9ICJEaXN0cmlidWNpw7NuIGRlbCBuaXZlbCBkZSBlc3RyZXMgcG9yIEVkYWQgIikNCg0KDQpgYGANCg0KIyMgVGVzdCBzb2JyZSBsb3MgRGF0b3MNCg0KKipQcnVlYmEgQU5PVkEgcGFyYSBncnVwb3MgZGUgZWRhZCoqDQoNCkxhIHBydWViYSBkZSBBTk9WQSByZXZlbGEgZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW50cmUgZ3J1cG9zIGRlIGVkYWQuDQpFc3BlY8OtZmljYW1lbnRlLCBzZSBvYnNlcnZhIHF1ZSBlbCBncnVwbyBkZSBlZGFkIGltcGFjdGEgZGUgbWFuZXJhIHNpZ25pZmljYXRpdmEgZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8sDQppbmRpY2FuZG8gcXVlIGhheSB2YXJpYWNpb25lcyBlbiBlbCB0aWVtcG8gZGUgc3Vlw7FvIGVudHJlIGRpZmVyZW50ZXMgcmFuZ29zIGRlIGVkYWQuDQoNCmBgYHtyfQ0KIyBSZWFsaXphciBBTk9WQSBwYXJhIGdydXBvcyBkZSBlZGFkDQphbm92YV9hZ2UgPC0gYW92KER1cmFjaW9uU3Vlw7FvIH4gRWRhZCwgZGF0YSA9IFNhbHVkU3Vlw7FvKQ0Kc3VtbWFyeShhbm92YV9hZ2UpDQpgYGANCioqUHJ1ZWJhIEFOT1ZBIHBhcmEgZ2VuZXJvKioNCg0KTGEgcHJ1ZWJhIGRlIEFOT1ZBIG11ZXN0cmEgZGlmZXJlbmNpYXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW50cmUgZ8OpbmVyb3MuDQpTZSBvYnNlcnZhIHF1ZSBlbCBnw6luZXJvIHRpZW5lIHVuIGltcGFjdG8gc2lnbmlmaWNhdGl2byBlbiBsYSBkdXJhY2nDs24gZGVsIHN1ZcOxbywgaW5kaWNhbmRvIHF1ZSBoYXkgdmFyaWFjaW9uZXMNCmVuIGVsIHRpZW1wbyBkZSBzdWXDsW8gZW50cmUgaG9tYnJlcyB5IG11amVyZXMuDQoNCmBgYHtyfQ0KIyBSZWFsaXphciBBTk9WQSBwYXJhIGfDqW5lcm8NCmFub3ZhX2dlbmRlciA8LSBhb3YoRHVyYWNpb25TdWXDsW8gfiBTZXhvLCBkYXRhID0gU2FsdWRTdWXDsW8pDQpzdW1tYXJ5KGFub3ZhX2dlbmRlcikNCmBgYA0KDQoqKkFOT1ZBIHBhcmEgbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvKioNCg0KTGEgcHJ1ZWJhIGRlIEFOT1ZBIHBhcmEgbGEgaW50ZXJhY2Npw7NuIHJldmVsYSBzaSBoYXkgZWZlY3RvcyBjb21iaW5hZG9zIGRlIEVkYWQgeSBTZXhvIGVuIGxhIGR1cmFjacOzbiBkZWwgc3Vlw7FvLg0KTG9zIHJlc3VsdGFkb3MgaW5kaWNhbiBxdWUgbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvIG5vIGVzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmEgZW4gcmVsYWNpw7NuIGNvbiBsYSBkdXJhY2nDs24gZGVsIHN1ZcOxby4NCg0KYGBge3J9DQojIFJlYWxpemFyIEFOT1ZBIHBhcmEgbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvDQphbm92YV9pbnRlcmFjdGlvbiA8LSBhb3YoRHVyYWNpb25TdWXDsW8gfiBFZGFkICogU2V4bywgZGF0YSA9IFNhbHVkU3Vlw7FvKQ0Kc3VtbWFyeShhbm92YV9pbnRlcmFjdGlvbikNCmBgYA0KDQoqKkNvbmNsdXNpb25lcyBzb2JyZSBlbCB0ZXN0IGRlIGxvcyBkYXRvcyoqDQoNCmxhcyBwcnVlYmFzIGRlIEFOT1ZBIHN1Z2llcmVuIHF1ZSB0YW50byBsYSBlZGFkIGNvbW8gZWwgZ8OpbmVybyBpbmZsdXllbiBlbiBsYSBkdXJhY2nDs24gZGVsIHN1ZcOxbywNCnBlcm8gbGEgaW50ZXJhY2Npw7NuIGVudHJlIEVkYWQgeSBTZXhvIG5vIG11ZXN0cmEgdW4gZWZlY3RvIHNpZ25pZmljYXRpdm8gZW4gbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW4gZXN0ZSBjb25qdW50byBkZSBkYXRvcy4NCg0KDQojIyBJbnRlcnByZXRhY2nDs24gZGUgUmVzdWx0YWRvcw0KDQotIEdyYWZpY28gZGUgR3J1cG8gZ2VuZXJhbCBkZSA1MCBhIDYwIGHDsW9zIGRlIGVkYWQgc3VlbGVuIHRlbmVyIG1lam9yIGR1cmFjaW9uIGRlIHN1ZcOxbw0KLSBMYXMgbXVqZXJlcyBkZSBlbnRyZSA1MCB5IDYwIHRpZW5lbiBtZWpvciBkdXJhY2lvbiBkZSBzdWXDsW8NCi0gTG9zIGhvbWJyZXMgdGllbmVuIHVuYSBkdXJhY2lvbiBkZSBzdWXDsW8gc2ltaWxhciBpbmRlcGVuZGllbnRlIGRlIHN1IGVkYWQNCi0gU2kgc2Ugc2VwYXJhbiBwb3IgaG9tYnJlcyB5IG11amVyZXMsIHNlIG11ZXN0cmEgcXVlIGxhcyBtdWplcmVzIHRpZW5lbiB1bmEgZHVyYWNpb24gZGUgc3Vlw7FvIG1hcyBsYXJnYQ0KLSBTZSBhcHJlY2lhIHF1ZSBsb3MgaG9tYnJlcyBzdWVsZW4gdGVuZXIgbWFzIGVzdHJlcyBxdWUgbGFzIG11amVyZXMsIHB1ZWRlIHNlciBkZWJpZG8gYSBxdWUgZWxsb3MgZHVlcm1lbiBtZW5vcw0KDQojIyBDb25jbHVzacOzbg0KDQpMb3MgZ3LDoWZpY29zIG5vIGV2aWRlbmNpYW4gdW5hIGRpZmVyZW5jaWEgc2lnbmlmaWNhdGl2YSBlbiBsYXMgaG9yYXMgZGUgc3Vlw7FvIGVuIGxhIHBvYmxhY2nDs24gZ2VuZXJhbC4gU2luIGVtYmFyZ28sIGFsIGFuYWxpemFyIHBvciBnw6luZXJvIHkgcmVkdWNpciBsYSBjYW50aWRhZCBkZSBwZXJzb25hcyBlbnRyZXZpc3RhZGFzLCBzZSBkZXN0YWNhIHVuYSBncmFuIGRpZmVyZW5jaWE6IGxvcyBob21icmVzIHRpZW5kZW4gYSBkb3JtaXIgbWVub3MgcXVlIGxhcyBtdWplcmVzLg0KRW4gZWwgZ3LDoWZpY28gZGUgdmlvbMOtbiwgc2UgZGVzdGFjYSBxdWUsIGVuIHByb21lZGlvLCBsb3MgaG9tYnJlcyBleHBlcmltZW50YW4gbml2ZWxlcyBtw6FzIGFsdG9zIGRlIGVzdHLDqXMgcXVlIGxhcyBtdWplcmVzLiBVbmEgcG9zaWJsZSBjYXVzYSwgc2Vnw7puIGxvcyBkYXRvcyBwcmVzZW50YWRvcyBlbiBsb3MgZ3LDoWZpY29zLCBlcyBxdWUgbG9zIGhvbWJyZXMgdGllbmRlbiBhIGRvcm1pciBtZW5vcywgbG8gcXVlIHBvZHLDrWEgbW9zdHJhciB1bmEgbWVub3IgZGVkaWNhY2nDs24gYWwgZGVzY2Fuc28geSBjb21vIGNvbnNlY3VlbmNpYSwgbml2ZWxlcyBkZSBlc3Ryw6lzIG3DoXMgZWxldmFkb3MuDQpFbiByZXN1bWVuLCBhdW5xdWUgbGEgZHVyYWNpw7NuIGRlbCBzdWXDsW8gZW4gZWwgZ3J1cG8gZ2VuZXJhbCBkZSBwZXJzb25hcyBlcyBzaW1pbGFyLCBhbCBkaXZpZGlyIHBvciBnw6luZXJvIHNlIG9ic2VydmEgdW4gY2FtYmlvIHNpZ25pZmljYXRpdm86IGxvcyBob21icmVzIGR1ZXJtZW4gbWVub3MgcXVlIGxhcyBtdWplcmVzLiBDb24gZXN0YSBpbmZvcm1hY2nDs24sIHNlIHJlc3BhbGRhIGxhIGFjZXB0YWNpw7NuIGRlIGxhIGhpcMOzdGVzaXMgbnVsYSBxdWUgc29zdGllbmUgbGEgZmFsdGEgZGUgcmVsYWNpw7NuIGVudHJlIGxhIGR1cmFjacOzbiBkZWwgc3Vlw7FvIHkgbGEgZWRhZCBkZSBsYXMgcGVyc29uYXMsIG1pZW50cmFzIHF1ZSBzZSBkZXNjYXJ0YSBsYSBoaXDDs3Rlc2lzIGFsdGVybmF0aXZhIGVuIGVzdGUgY29udGV4dG8gZXNwZWPDrWZpY28uDQoNCg==