Se presenta un análisis preliminar de correlación de la Pérdida Indeterminada Porcentual (%) de PSA para la Zafra 2023-2024 con variables de Calidad de Caña obtenidas del Laboratorio.

Librerías

library(dplyr)
library(ggplot2)
library(lares)
library(ggpubr)
mapa_dispersion <- function(label_x,label_y) { # crea un mapa de dispersión Y vrs. X
  ggplot(df, aes_string(x=label_x, y=label_y)) + 
    geom_point(
        color="orange",
        fill="#69b3a2",
        shape=21,
        alpha=0.5,
        size=6,
        stroke = 2
        ) +
    geom_smooth(method=lm , color="blue", fill="#69b3a2", se=TRUE) +
 ggtitle(paste(label_y,"vrs.",label_x)) +
  xlab(label_x) + ylab(label_y)
}

Dataset de Pérdidas Indeterminadas

El conjunto de datos analizados contiene 47 variables de Calidad de Caña. La variable objetivo es la Pérdida Indeterminada Porcentual (%), que es la proporción de pérdida que corresponde a la Pérdida Indeterminada (kg/t) respecto al Total de Pérdidas (kg/t) desde el Core Sampler.

A continuación el detalle de las variables incluidas en el análisis:

dataset_indeterminadas <- read.csv(file = 'c:/users/100346/OneDrive - Pantaleon. S.A/Desktop/DataScience/Perdidas Indeterminadas/Dataset_2023_2024_Dic.csv')
df <- dataset_indeterminadas[c(9,10,11,12,13,15,17,47,48,61,62,63,89,90,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,228)]
df

El dataset incluye los primeros 30 días de operación.

Función de Densidad: Pérdidas Indeterminadas (%)

distr(df,Pérdidas.indeterminadas)

La mayor cantidad de días muestran una pérdida entre el 5% y el 9%, sin embargo existen días con pérdidas bastante elevadas, hasta un 13%.

distr(dataset_indeterminadas,Dia.Zafra,Pérdidas.indeterminadas)

La mayor parte de las pérdidas indeterminadas altas ocurren en la primera semana de zafra.

Análisis de Correlación

Se comparan todas las variables con la variable objetivo de Pérdida Indeterminada, y para cada una, se determina su correlación, a un nivel de confianza del 95% (significancia 5%, p<= 0.05).

Entre ellas, se seleccionan las variables que muestran correlación moderada a correlación fuerte (valores mayores a 0.5)

corr_var(df, # nombre del dataframe
  Pérdidas.indeterminadas, # variable objetivo
  max_pvalue = 0.05, # nivel de significancia para la región de rechazo en las pruebas de hipótesis
  top = 30, # despliegue de las 30 variables más correlacionadas con la variable objetivo
  plot = T
)
New names:

corr_var(df, # nombre del dataframe
  Pérdidas.indeterminadas, # variable objetivo
  max_pvalue = 0.05, # nivel de significancia para la región de rechazo en las pruebas de hipótesis
  top = 30, # despliegue de las 30 variables más correlacionadas con la variable objetivo
  plot = F
)
New names:

Se observan variables de Calidad de Caña que tienen correlación fuerte a moderada con la Pérdida Indeterminada (%), con valor absoluto de correlación mayor o igual a 0.5

Total de Caña Quemada


label_x <- "Total.de.caña.quemada..t..4737"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Existe una correlación inversa con la cantidad de caña quemada, probablemente relacionada a la cantidad de trash reducida que la caña quemada trae respecto a la cosecha en verde.

Trash Total

label_x <- "Trash.Total..5878"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

La correlación positiva del trash total en la pérdida indeterminada es congruente con el resultado anterior con caña quemada: mayor trash, mayor pérdida.

Caña Quemada antes de 36 horas

label_x <- "Caña.quemada.antes.de.36.h..t..4738"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Esta variable se relaciona con la frescura de la caña. En general, mayor cantidad de caña “fresca”, menor pérdida.

Trash de Caña Mecanizada

label_x <- "Trash.de.caña.mecanizada..Kg..6054"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Asociado al trash, se muestra la sensibilidad de la pérdida relacionada al trash proveniente de la cosecha mecanizada

Hojas de Maleza en Trash

label_x <- "Hojas.maleza.trash..4495"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

El rango de indeterminadas observado asociado con la cantidad de hojas es notoriamente más significativo que con el resto de componentes trash como lalas, mamones, corcho, tierra, etc.

Caña Mecanizada

label_x <- "Caña.mecanizada..t..4735"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Desde la perspectiva de pérdida indeterminada, la cantidad de caña proveniente de cosecha mecánica está inversamente correlacionada. Normalmente la caña mecanizada tiende a tener mayores porcentajes de fibra, lo que se asocia a mayores pérdidas en bagazo. Esto, a su vez, reduce la porción indeterminada de la pérdida, pues aumenta la porción determinada.

Cachaza en Caña

label_x <- "Cachaza.en.caña..1680"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Existe una correlación positiva entre la cantidad de cachaza en caña y la pérdida indeterminada. Esto puede indicar que, aunque el aumento en la cachaza pueda aumentar la porción determinada de la pérdida, al parecer existe otro factor a investigar que puede degradar la sacarosa en el proceso, y que no puede observarse en las otras pérdidas determinadas. Se investigarán factores posibles, (e.g. actividad microbiana) asociada a la cantidad de cachaza que pueda generar mayores pérdidas en el proceso adelante.

Pureza del Jugo Primario

label_x <- "Pureza.Jugo.primario..2099"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

En general, mayores valores de pureza en el jugo primario están asociados a mayores valores de pérdida.

Cepas Trash

label_x <- "Cepas.trash..4500"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Trash Caña Mecanizada Quemada

label_x <- "Trash.caña.mecanizada.quemada..4914"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Piedra en Caña

label_x <- "Piedra.en.caña...Kg.1000.t..4926"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Aunque menos notable, el peso de piedras en la caña también está correlacionado directamente con la pérdida indeterminada. Esto probablemente al afectar la eficiencia de capacidad industrial, cuya correlación fue ya encontrada.

Tiempo Quema Molienda

label_x <- "Tiempo.Medio.Quema.a.Molienda..h..4776"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Esta variable también está relacionada a la frescura de la caña.

Caña acorchada

label_x <- "Caña.acorchada..4499"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Caña Podrida

label_x <- "Caña.podrida.masa..Kg..4488"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Caña Quemada antes de 36 h

label_x <- "Caña.quemada.antes.de.36.h..4739"
label_y <- "Pérdidas.indeterminadas"

mapa_dispersion(label_x,label_y)

Pureza del Jugo Core

label_x <- "Pureza.Jugo.del.core"

mapa_dispersion(label_x,label_y)

Las direcciones de correlación de las variables de calidad de caña coinciden con el patrón visto anteriormente: mayor Trash correlacionado a mayor pérdida, menor frescura correlacionada a mayor pérdida, etc. Existe una variable de Cachaza en Caña cuya relación con la pérdida no es lo que intuitivamente se esperaría. Esto requiere mayor investigación.

LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBQw6lyZGlkYXMgSW5kZXRlcm1pbmFkYXMgUFNBIDIwMjQgKFByaW1lcm9zIDMwIETDrWFzIGRlIFphZnJhKSBWYXJpYWJsZXMgQ2FsaWRhZCBkZSBDYcOxYSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNClNlIHByZXNlbnRhIHVuIGFuw6FsaXNpcyBwcmVsaW1pbmFyIGRlIGNvcnJlbGFjacOzbiBkZSBsYSBQw6lyZGlkYSBJbmRldGVybWluYWRhIFBvcmNlbnR1YWwgKCUpIGRlIFBTQSBwYXJhIGxhIFphZnJhIDIwMjMtMjAyNCBjb24gdmFyaWFibGVzIGRlIENhbGlkYWQgZGUgQ2HDsWEgb2J0ZW5pZGFzIGRlbCBMYWJvcmF0b3Jpby4NCg0KIyMjIExpYnJlcsOtYXMNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShsYXJlcykNCmxpYnJhcnkoZ2dwdWJyKQ0KYGBgDQoNCmBgYHtyfQ0KbWFwYV9kaXNwZXJzaW9uIDwtIGZ1bmN0aW9uKGxhYmVsX3gsbGFiZWxfeSkgeyAjIGNyZWEgdW4gbWFwYSBkZSBkaXNwZXJzacOzbiBZIHZycy4gWA0KICBnZ3Bsb3QoZGYsIGFlc19zdHJpbmcoeD1sYWJlbF94LCB5PWxhYmVsX3kpKSArIA0KICAgIGdlb21fcG9pbnQoDQogICAgICAgIGNvbG9yPSJvcmFuZ2UiLA0KICAgICAgICBmaWxsPSIjNjliM2EyIiwNCiAgICAgICAgc2hhcGU9MjEsDQogICAgICAgIGFscGhhPTAuNSwNCiAgICAgICAgc2l6ZT02LA0KICAgICAgICBzdHJva2UgPSAyDQogICAgICAgICkgKw0KICAgIGdlb21fc21vb3RoKG1ldGhvZD1sbSAsIGNvbG9yPSJibHVlIiwgZmlsbD0iIzY5YjNhMiIsIHNlPVRSVUUpICsNCiBnZ3RpdGxlKHBhc3RlKGxhYmVsX3ksInZycy4iLGxhYmVsX3gpKSArDQogIHhsYWIobGFiZWxfeCkgKyB5bGFiKGxhYmVsX3kpDQp9DQpgYGANCg0KDQojIyMgRGF0YXNldCBkZSBQw6lyZGlkYXMgSW5kZXRlcm1pbmFkYXMNCg0KRWwgY29uanVudG8gZGUgZGF0b3MgYW5hbGl6YWRvcyBjb250aWVuZSA0NyB2YXJpYWJsZXMgZGUgQ2FsaWRhZCBkZSBDYcOxYS4gTGEgdmFyaWFibGUgb2JqZXRpdm8gZXMgbGEgKipQw6lyZGlkYSBJbmRldGVybWluYWRhIFBvcmNlbnR1YWwgKCUpKiosIHF1ZSBlcyAqbGEgcHJvcG9yY2nDs24gZGUgcMOpcmRpZGEgcXVlIGNvcnJlc3BvbmRlIGEgbGEgUMOpcmRpZGEgSW5kZXRlcm1pbmFkYSAoa2cvdCkgcmVzcGVjdG8gYWwgVG90YWwgZGUgUMOpcmRpZGFzIChrZy90KSBkZXNkZSBlbCBDb3JlIFNhbXBsZXIqLg0KDQpBIGNvbnRpbnVhY2nDs24gZWwgZGV0YWxsZSBkZSBsYXMgdmFyaWFibGVzIGluY2x1aWRhcyBlbiBlbCBhbsOhbGlzaXM6DQoNCmBgYHtyfQ0KZGF0YXNldF9pbmRldGVybWluYWRhcyA8LSByZWFkLmNzdihmaWxlID0gJ2M6L3VzZXJzLzEwMDM0Ni9PbmVEcml2ZSAtIFBhbnRhbGVvbi4gUy5BL0Rlc2t0b3AvRGF0YVNjaWVuY2UvUGVyZGlkYXMgSW5kZXRlcm1pbmFkYXMvRGF0YXNldF8yMDIzXzIwMjRfRGljLmNzdicpDQpkZiA8LSBkYXRhc2V0X2luZGV0ZXJtaW5hZGFzW2MoOSwxMCwxMSwxMiwxMywxNSwxNyw0Nyw0OCw2MSw2Miw2Myw4OSw5MCwxMjYsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwyMjgpXQ0KZGYNCmBgYA0KDQpFbCBkYXRhc2V0IGluY2x1eWUgbG9zIHByaW1lcm9zIDMwIGTDrWFzIGRlIG9wZXJhY2nDs24uDQoNCiMjIyBGdW5jacOzbiBkZSBEZW5zaWRhZDogUMOpcmRpZGFzIEluZGV0ZXJtaW5hZGFzICglKQ0KDQpgYGB7cn0NCmRpc3RyKGRmLFDDqXJkaWRhcy5pbmRldGVybWluYWRhcykNCmBgYA0KTGEgbWF5b3IgY2FudGlkYWQgZGUgZMOtYXMgbXVlc3RyYW4gdW5hIHDDqXJkaWRhIGVudHJlIGVsIDUlIHkgZWwgOSUsIHNpbiBlbWJhcmdvIGV4aXN0ZW4gZMOtYXMgY29uIHDDqXJkaWRhcyBiYXN0YW50ZSBlbGV2YWRhcywgaGFzdGEgdW4gMTMlLg0KDQoNCmBgYHtyfQ0KZGlzdHIoZGF0YXNldF9pbmRldGVybWluYWRhcyxEaWEuWmFmcmEsUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzKQ0KYGBgDQpMYSBtYXlvciBwYXJ0ZSBkZSBsYXMgcMOpcmRpZGFzIGluZGV0ZXJtaW5hZGFzIGFsdGFzIG9jdXJyZW4gZW4gbGEgcHJpbWVyYSBzZW1hbmEgZGUgemFmcmEuDQoNCg0KIyMjIEFuw6FsaXNpcyBkZSBDb3JyZWxhY2nDs24NClNlIGNvbXBhcmFuIHRvZGFzIGxhcyB2YXJpYWJsZXMgY29uIGxhIHZhcmlhYmxlIG9iamV0aXZvIGRlICpQw6lyZGlkYSBJbmRldGVybWluYWRhKiwgeSBwYXJhIGNhZGEgdW5hLCBzZSBkZXRlcm1pbmEgc3UgY29ycmVsYWNpw7NuLCBhIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZWwgOTUlIChzaWduaWZpY2FuY2lhIDUlLCBwPD0gMC4wNSkuDQoNCkVudHJlIGVsbGFzLCBzZSBzZWxlY2Npb25hbiBsYXMgdmFyaWFibGVzIHF1ZSBtdWVzdHJhbiBjb3JyZWxhY2nDs24gbW9kZXJhZGEgYSBjb3JyZWxhY2nDs24gZnVlcnRlICh2YWxvcmVzIG1heW9yZXMgYSAwLjUpDQoNCmBgYHtyfQ0KY29ycl92YXIoZGYsICMgbm9tYnJlIGRlbCBkYXRhZnJhbWUNCiAgUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzLCAjIHZhcmlhYmxlIG9iamV0aXZvDQogIG1heF9wdmFsdWUgPSAwLjA1LCAjIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgcGFyYSBsYSByZWdpw7NuIGRlIHJlY2hhem8gZW4gbGFzIHBydWViYXMgZGUgaGlww7N0ZXNpcw0KICB0b3AgPSAzMCwgIyBkZXNwbGllZ3VlIGRlIGxhcyAzMCB2YXJpYWJsZXMgbcOhcyBjb3JyZWxhY2lvbmFkYXMgY29uIGxhIHZhcmlhYmxlIG9iamV0aXZvDQogIHBsb3QgPSBUDQopDQpgYGANCg0KYGBge3J9DQpjb3JyX3ZhcihkZiwgIyBub21icmUgZGVsIGRhdGFmcmFtZQ0KICBQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMsICMgdmFyaWFibGUgb2JqZXRpdm8NCiAgbWF4X3B2YWx1ZSA9IDAuMDUsICMgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSBwYXJhIGxhIHJlZ2nDs24gZGUgcmVjaGF6byBlbiBsYXMgcHJ1ZWJhcyBkZSBoaXDDs3Rlc2lzDQogIHRvcCA9IDMwLCAjIGRlc3BsaWVndWUgZGUgbGFzIDMwIHZhcmlhYmxlcyBtw6FzIGNvcnJlbGFjaW9uYWRhcyBjb24gbGEgdmFyaWFibGUgb2JqZXRpdm8NCiAgcGxvdCA9IEYNCikNCmBgYA0KDQpTZSBvYnNlcnZhbiB2YXJpYWJsZXMgZGUgQ2FsaWRhZCBkZSBDYcOxYSBxdWUgdGllbmVuICoqKmNvcnJlbGFjacOzbiBmdWVydGUgYSBtb2RlcmFkYSoqKiBjb24gbGEgUMOpcmRpZGEgSW5kZXRlcm1pbmFkYSAoJSksIGNvbiB2YWxvciBhYnNvbHV0byBkZSBjb3JyZWxhY2nDs24gbWF5b3IgbyBpZ3VhbCBhIDAuNQ0KDQojIyMgVG90YWwgZGUgQ2HDsWEgUXVlbWFkYQ0KYGBge3J9DQoNCmxhYmVsX3ggPC0gIlRvdGFsLmRlLmNhw7FhLnF1ZW1hZGEuLnQuLjQ3MzciDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQoNCmBgYA0KDQoqRXhpc3RlIHVuYSBjb3JyZWxhY2nDs24gaW52ZXJzYSBjb24gbGEgY2FudGlkYWQgZGUgY2HDsWEgcXVlbWFkYSwgcHJvYmFibGVtZW50ZSByZWxhY2lvbmFkYSBhIGxhIGNhbnRpZGFkIGRlIHRyYXNoIHJlZHVjaWRhIHF1ZSBsYSBjYcOxYSBxdWVtYWRhIHRyYWUgcmVzcGVjdG8gYSBsYSBjb3NlY2hhIGVuIHZlcmRlKi4NCg0KIyMjIFRyYXNoIFRvdGFsDQpgYGB7cn0NCmxhYmVsX3ggPC0gIlRyYXNoLlRvdGFsLi41ODc4Ig0KbGFiZWxfeSA8LSAiUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzIg0KDQptYXBhX2Rpc3BlcnNpb24obGFiZWxfeCxsYWJlbF95KQ0KYGBgDQoNCipMYSBjb3JyZWxhY2nDs24gcG9zaXRpdmEgZGVsIHRyYXNoIHRvdGFsIGVuIGxhIHDDqXJkaWRhIGluZGV0ZXJtaW5hZGEgZXMgY29uZ3J1ZW50ZSBjb24gZWwgcmVzdWx0YWRvIGFudGVyaW9yIGNvbiBjYcOxYSBxdWVtYWRhOiBtYXlvciB0cmFzaCwgbWF5b3IgcMOpcmRpZGEuKg0KDQojIyMgQ2HDsWEgUXVlbWFkYSBhbnRlcyBkZSAzNiBob3Jhcw0KYGBge3J9DQpsYWJlbF94IDwtICJDYcOxYS5xdWVtYWRhLmFudGVzLmRlLjM2LmguLnQuLjQ3MzgiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KKkVzdGEgdmFyaWFibGUgc2UgcmVsYWNpb25hIGNvbiBsYSBmcmVzY3VyYSBkZSBsYSBjYcOxYS4gRW4gZ2VuZXJhbCwgbWF5b3IgY2FudGlkYWQgZGUgY2HDsWEgImZyZXNjYSIsIG1lbm9yIHDDqXJkaWRhLioNCg0KIyMjIFRyYXNoIGRlIENhw7FhIE1lY2FuaXphZGENCmBgYHtyfQ0KbGFiZWxfeCA8LSAiVHJhc2guZGUuY2HDsWEubWVjYW5pemFkYS4uS2cuLjYwNTQiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCipBc29jaWFkbyBhbCB0cmFzaCwgc2UgbXVlc3RyYSBsYSBzZW5zaWJpbGlkYWQgZGUgbGEgcMOpcmRpZGEgcmVsYWNpb25hZGEgYWwgdHJhc2ggcHJvdmVuaWVudGUgZGUgbGEgY29zZWNoYSBtZWNhbml6YWRhKg0KDQojIyMgSG9qYXMgZGUgTWFsZXphIGVuIFRyYXNoDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkhvamFzLm1hbGV6YS50cmFzaC4uNDQ5NSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQoqRWwgcmFuZ28gZGUgaW5kZXRlcm1pbmFkYXMgb2JzZXJ2YWRvIGFzb2NpYWRvIGNvbiBsYSogKipjYW50aWRhZCBkZSBob2phcyoqICplcyBub3RvcmlhbWVudGUgbcOhcyBzaWduaWZpY2F0aXZvIHF1ZSBjb24gZWwgcmVzdG8gZGUgY29tcG9uZW50ZXMgdHJhc2ggY29tbyBsYWxhcywgbWFtb25lcywgY29yY2hvLCB0aWVycmEsIGV0Yy4qDQoNCiMjIyBDYcOxYSBNZWNhbml6YWRhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkNhw7FhLm1lY2FuaXphZGEuLnQuLjQ3MzUiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KKkRlc2RlIGxhIHBlcnNwZWN0aXZhIGRlIHDDqXJkaWRhIGluZGV0ZXJtaW5hZGEsIGxhIGNhbnRpZGFkIGRlIGNhw7FhIHByb3ZlbmllbnRlIGRlIGNvc2VjaGEgbWVjw6FuaWNhIGVzdMOhIGludmVyc2FtZW50ZSBjb3JyZWxhY2lvbmFkYS4gTm9ybWFsbWVudGUgbGEgY2HDsWEgbWVjYW5pemFkYSB0aWVuZGUgYSB0ZW5lciBtYXlvcmVzIHBvcmNlbnRhamVzIGRlIGZpYnJhLCBsbyBxdWUgc2UgYXNvY2lhIGEgbWF5b3JlcyBww6lyZGlkYXMgZW4gYmFnYXpvLiBFc3RvLCBhIHN1IHZleiwgcmVkdWNlIGxhIHBvcmNpw7NuIGluZGV0ZXJtaW5hZGEgZGUgbGEgcMOpcmRpZGEsIHB1ZXMgYXVtZW50YSBsYSBwb3JjacOzbiBkZXRlcm1pbmFkYS4qDQoNCiMjIyBDYWNoYXphIGVuIENhw7FhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkNhY2hhemEuZW4uY2HDsWEuLjE2ODAiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KKkV4aXN0ZSB1bmEqICoqY29ycmVsYWNpw7NuIHBvc2l0aXZhIGVudHJlIGxhIGNhbnRpZGFkIGRlIGNhY2hhemEgZW4gY2HDsWEgeSBsYSBww6lyZGlkYSBpbmRldGVybWluYWRhLioqICpFc3RvIHB1ZWRlIGluZGljYXIgcXVlLCBhdW5xdWUgZWwgYXVtZW50byBlbiBsYSBjYWNoYXphIHB1ZWRhIGF1bWVudGFyIGxhIHBvcmNpw7NuIGRldGVybWluYWRhIGRlIGxhIHDDqXJkaWRhLCBhbCBwYXJlY2VyIGV4aXN0ZSBvdHJvIGZhY3RvciBhIGludmVzdGlnYXIgcXVlIHB1ZWRlIGRlZ3JhZGFyIGxhIHNhY2Fyb3NhIGVuIGVsIHByb2Nlc28sIHkgcXVlIG5vIHB1ZWRlIG9ic2VydmFyc2UgZW4gbGFzIG90cmFzIHDDqXJkaWRhcyBkZXRlcm1pbmFkYXMuIFNlIGludmVzdGlnYXLDoW4gZmFjdG9yZXMgcG9zaWJsZXMsIChlLmcuIGFjdGl2aWRhZCBtaWNyb2JpYW5hKSBhc29jaWFkYSBhIGxhIGNhbnRpZGFkIGRlIGNhY2hhemEgcXVlIHB1ZWRhIGdlbmVyYXIgbWF5b3JlcyBww6lyZGlkYXMgZW4gZWwgcHJvY2VzbyBhZGVsYW50ZS4qDQoNCg0KIyMjIFB1cmV6YSBkZWwgSnVnbyBQcmltYXJpbw0KYGBge3J9DQpsYWJlbF94IDwtICJQdXJlemEuSnVnby5wcmltYXJpby4uMjA5OSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQoqRW4gZ2VuZXJhbCwgbWF5b3JlcyB2YWxvcmVzIGRlIHB1cmV6YSBlbiBlbCBqdWdvIHByaW1hcmlvIGVzdMOhbiBhc29jaWFkb3MgYSBtYXlvcmVzIHZhbG9yZXMgZGUgcMOpcmRpZGEuKg0KDQojIyMgQ2VwYXMgVHJhc2gNCmBgYHtyfQ0KbGFiZWxfeCA8LSAiQ2VwYXMudHJhc2guLjQ1MDAiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KIyMjIFRyYXNoIENhw7FhIE1lY2FuaXphZGEgUXVlbWFkYQ0KYGBge3J9DQpsYWJlbF94IDwtICJUcmFzaC5jYcOxYS5tZWNhbml6YWRhLnF1ZW1hZGEuLjQ5MTQiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KDQojIyMgUGllZHJhIGVuIENhw7FhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIlBpZWRyYS5lbi5jYcOxYS4uLktnLjEwMDAudC4uNDkyNiINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KKkF1bnF1ZSBtZW5vcyBub3RhYmxlLCBlbCBwZXNvIGRlIHBpZWRyYXMgZW4gbGEgY2HDsWEgdGFtYmnDqW4gZXN0w6EgY29ycmVsYWNpb25hZG8gZGlyZWN0YW1lbnRlIGNvbiBsYSBww6lyZGlkYSBpbmRldGVybWluYWRhLiBFc3RvIHByb2JhYmxlbWVudGUgYWwgYWZlY3RhciBsYSBlZmljaWVuY2lhIGRlIGNhcGFjaWRhZCBpbmR1c3RyaWFsLCBjdXlhIGNvcnJlbGFjacOzbiBmdWUgeWEgZW5jb250cmFkYS4qDQoNCiMjIyBUaWVtcG8gUXVlbWEgTW9saWVuZGENCmBgYHtyfQ0KbGFiZWxfeCA8LSAiVGllbXBvLk1lZGlvLlF1ZW1hLmEuTW9saWVuZGEuLmguLjQ3NzYiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCipFc3RhIHZhcmlhYmxlIHRhbWJpw6luIGVzdMOhIHJlbGFjaW9uYWRhIGEgbGEgZnJlc2N1cmEgZGUgbGEgY2HDsWEuKg0KDQojIyMgQ2HDsWEgYWNvcmNoYWRhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkNhw7FhLmFjb3JjaGFkYS4uNDQ5OSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQojIyMgQ2HDsWEgUG9kcmlkYQ0KYGBge3J9DQpsYWJlbF94IDwtICJDYcOxYS5wb2RyaWRhLm1hc2EuLktnLi40NDg4Ig0KbGFiZWxfeSA8LSAiUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzIg0KDQptYXBhX2Rpc3BlcnNpb24obGFiZWxfeCxsYWJlbF95KQ0KYGBgDQoNCiMjIyBDYcOxYSBRdWVtYWRhIGFudGVzIGRlIDM2IGgNCmBgYHtyfQ0KbGFiZWxfeCA8LSAiQ2HDsWEucXVlbWFkYS5hbnRlcy5kZS4zNi5oLi40NzM5Ig0KbGFiZWxfeSA8LSAiUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzIg0KDQptYXBhX2Rpc3BlcnNpb24obGFiZWxfeCxsYWJlbF95KQ0KYGBgDQoNCiMjIyBQdXJlemEgZGVsIEp1Z28gQ29yZQ0KYGBge3J9DQpsYWJlbF94IDwtICJQdXJlemEuSnVnby5kZWwuY29yZSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQpMYXMgZGlyZWNjaW9uZXMgZGUgY29ycmVsYWNpw7NuIGRlIGxhcyB2YXJpYWJsZXMgZGUgY2FsaWRhZCBkZSBjYcOxYSBjb2luY2lkZW4gY29uIGVsIHBhdHLDs24gdmlzdG8gYW50ZXJpb3JtZW50ZTogbWF5b3IgVHJhc2ggY29ycmVsYWNpb25hZG8gYSBtYXlvciBww6lyZGlkYSwgbWVub3IgZnJlc2N1cmEgY29ycmVsYWNpb25hZGEgYSBtYXlvciBww6lyZGlkYSwgZXRjLiBFeGlzdGUgdW5hIHZhcmlhYmxlIGRlIENhY2hhemEgZW4gQ2HDsWEgY3V5YSByZWxhY2nDs24gY29uIGxhIHDDqXJkaWRhIG5vIGVzIGxvIHF1ZSBpbnR1aXRpdmFtZW50ZSBzZSBlc3BlcmFyw61hLiBFc3RvIHJlcXVpZXJlIG1heW9yIGludmVzdGlnYWNpw7NuLiANCg0K