1. Introducción

Con base en la base de datos disponible en el siguiente enlace: https://www.datos.gov.co/Agricultura-y-Desarrollo-Rural/Evaluaciones-Agropecuarias-Municipales-EVA/2pnw-mmge/data, se presentan estadísticas plurianuales sobre la producción agrícola en Colombia, abarcando el periodo 2007-2018. Este conjunto de datos, proporcionado por el Ministerio de Agricultura y Desarrollo Rural, permite analizar diversos indicadores, como área cosechada, área sembrada, producción total y especies cultivadas, para diferentes departamentos y municipios.

En este análisis, nos enfocaremos en el departamento del Putumayo, ilustrando cómo varían los criterios de producción entre municipios, los grupos de cultivos más representativos, las especies predominantes, y otros factores relacionados con el desempeño agrícola. Mediante tablas y gráficos informativos, se busca destacar tendencias clave que contribuyen a entender el panorama agrícola de la región y su impacto en el desarrollo rural.

2. Conjunto de datos EVA plurianual para el departamento del Putumayo

Se seleccionó la base de datos de las Evaluaciones Agropecuarias Municipales (EVA) debido a que constituye una recopilación integral y específica de información agrícola de Colombia, lo que permite trabajar directamente con datos relevantes para el contexto nacional. Su estructura facilita regular y organizar los datos de acuerdo con los criterios necesarios para este análisis, como producción por grupos de cultivos, especies agrícolas, área cosechada y producida, entre otros indicadores clave.

Además, al tratarse de una base de datos de acceso libre al público, se convierte en una herramienta sumamente valiosa para realizar investigaciones y proyectos enfocados en temas agronómicos o agropecuarios. Su disponibilidad fomenta la transparencia y el acceso equitativo a información de gran relevancia.

Finalmente, el uso de R como herramienta principal para la manipulación y análisis de datos proporciona un enfoque eficiente y reproducible, permitiendo transformar esta información en tablas y gráficas informativas que facilitan una comprensión más profunda del comportamiento agrícola en regiones como el Putumayo.

3. Lectura de la base de datos EVA

(eva = read_csv("C:/Users/gutie/Music/Evaluaciones_Agropecuarias_Municipales_EVA.csv", col_names = TRUE,show_col_types = FALSE))

La tabla obtenida de la base de datos incluye información clave como el código del municipio, el nombre del departamento, el nombre de los municipios, el grupo y subgrupo de cultivo, el tipo de cultivo, la desagregación regional y/o sistema productivo, así como datos específicos relacionados con el año, el periodo, el área sembrada y cosechada (en hectáreas), la producción (en toneladas), el rendimiento (en toneladas por hectárea) y el estado físico de la producción. Estos criterios son fundamentales para el estudio y análisis del sector agrícola, ya que permiten una visión detallada de la distribución y desempeño de los cultivos en diferentes regiones.

Facilitan la identificación de patrones productivos, la evaluación del rendimiento agrícola y el impacto de variables geográficas y climáticas en la producción. Además, esta información resulta esencial para la planificación estratégica, la formulación de políticas públicas, la optimización de recursos y el diseño de sistemas productivos sostenibles adaptados a las características específicas de cada región.

4. Limpieza del conjunto de datos de EVA

names(eva)
 [1] "CÓD. \nDEP."                                   "DEPARTAMENTO"                                 
 [3] "CÓD. MUN."                                     "MUNICIPIO"                                    
 [5] "GRUPO \nDE CULTIVO"                            "SUBGRUPO \nDE CULTIVO"                        
 [7] "CULTIVO"                                       "DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO"
 [9] "AÑO"                                           "PERIODO"                                      
[11] "Área Sembrada\n(ha)"                           "Área Cosechada\n(ha)"                         
[13] "Producción\n(t)"                               "Rendimiento\n(t/ha)"                          
[15] "ESTADO FISICO PRODUCCION"                      "NOMBRE \nCIENTIFICO"                          
[17] "CICLO DE CULTIVO"                             
eva.tmp
eva.tmp %>%  dplyr::rename('Cod_Mun' = 'CÓD. MUN.','Grupo' = 'GRUPO \nDE CULTIVO','Subgrupo' = 'SUBGRUPO \nDE CULTIVO', 'Year' = 'AÑO','AreaSembrada' = 'Área Sembrada\n(ha)','AreaCosechada' = 'Área Sembrada\n(ha)','Produccion' ='Producción\n(t)','Rendimiento' =  'Rendimiento\n(t/ha)','Sistema' = 'DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO','Estado' = 'ESTADO FISICO PRODUCCION') -> new_eva
new_eva

4. Análisis de la base de datos EVA, para el departamento del Putumayo

La tabla de datos nos permite reconocer la variabilidad de los grupos de cultivos mayormente cultivados en el departamento del Putumayo, entre los que se encuentran cereales, frutales, leguminosas, hortalizas, forestales, tubérculos y plátanos, oleaginosas, flores y follajes. Esta diversidad agrícola se debe principalmente a las características climáticas y edáficas de la región. El Putumayo cuenta con un clima cálido-húmedo tropical y una abundante precipitación anual, condiciones ideales para el cultivo de plátano, yuca y otros tubérculos que requieren suelos ricos en materia orgánica y bien drenados (Universidad Tecnologíca de Pereira, 2023). Asimismo, suelos aluviales y de alta fertilidad favorecen el desarrollo de cultivos como frutales tropicales y oleaginosas, mientras que las temperaturas constantes y la alta humedad son ideales para el crecimiento de flores y follajes de exportación (Ministerio de Agricultura, 2020).

El uso de esta información permite identificar las ventajas productivas de la región y fomentar prácticas agrícolas sostenibles que maximicen el rendimiento de los cultivos tradicionales, al tiempo que se exploran nuevas oportunidades para diversificar la oferta agrícola, fortaleciendo la economía local. Este análisis detallado apoya la toma de decisiones estratégicas en el sector agrícola, desde políticas públicas hasta inversiones privadas.

4.1. Los cultivos más importantes entre 2007 y 2018

new_eva %>%
  ##filter(Produccion > 0) %>%
  group_by(Grupo) %>%
  summarize(total_produccion = sum(Produccion)) %>% 
  arrange(desc(total_produccion)) 
new_eva %>%
  group_by(Grupo) %>%
  summarize(total_produccion = sum(Produccion)) -> PT 
PT %>% 
  filter(total_produccion > 1000) -> main.groups

Resultado del total de producción en el Putumayo

El valor total de la producción en el departamento del Putumayo, correspondiente a la cifra de 1,177,717, refleja el volumen total de la producción agrícola registrado para la región durante el período analizado. Este dato es clave para evaluar el desempeño y la productividad de los cultivos en Putumayo, proporcionando una base sólida para el análisis y la toma de decisiones sobre el sector agrícola en la región.

(value = sum(main.groups$total_produccion))
[1] 1177717
main.groups$percent = main.groups$total_produccion/value

Gráfico acerca del porcentaje entre grupo y producción en el Putumayo

# Barplot
bp<- ggplot(main.groups, aes(x="", y=percent, fill=Grupo))+
geom_bar(width = 1, stat = "identity")
# Piechart
pie <- bp + coord_polar("y", start=0)
pie

El gráfico circular evidencia la predominancia de los tubérculos y plátanos en la agricultura del Putumayo, ocupando la mitad de la producción total. Esta concentración se explica por las condiciones agroclimáticas favorables y la arraigada tradición agrícola. Si bien estos cultivos son fundamentales, el gráfico también revela una diversidad productiva, incluyendo cereales, forestales, frutales, hortalizas, leguminosas, oleaginosas, otras permanentes y plantas aromáticas. Esta variedad responde a las necesidades alimentarias y económicas de la región, aunque la proporción de cada grupo sugiere áreas de oportunidad para la diversificación y el desarrollo agrícola.

new_eva %>%
  group_by(Grupo, MUNICIPIO) %>%
  summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
  slice(which.max(total_prod))  %>%
  arrange(desc(total_prod))
`summarise()` has grouped output by 'Grupo'. You can override using the `.groups` argument.
new_eva %>%
  group_by(Grupo, MUNICIPIO) %>%
  summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
  slice(which.max(total_prod))  -> leaders
`summarise()` has grouped output by 'Grupo'. You can override using the `.groups` argument.
leaders
leaders %>% 
  filter(total_prod > 50) -> main.leaders

Gráfico acerca de la producción en municipios del Putumayo

# Basic barplot
p<-ggplot(data=main.leaders, aes(x=MUNICIPIO, y=total_prod)) +
  geom_bar(stat="identity")
p

El presente gráfico evidencia una marcada disparidad en la producción total entre los municipios del Putumayo, con Puerto Guzmán destacando como el principal productor. Esta concentración podría atribuirse a diversos factores como condiciones agroclimáticas más favorables, mayor inversión en infraestructura, tipo de cultivos predominantes, tamaño de las explotaciones o políticas públicas que favorecen determinadas zonas. Orito, aunque en menor medida, también presenta un nivel de producción considerable. En contraste, Mocoa, Puerto Caicedo, Sibundoy y Valle del Guamuez muestran cifras de producción significativamente menores. Esta disparidad sugiere la necesidad de analizar a fondo las características específicas de cada municipio, incluyendo aspectos como la calidad de los suelos, el acceso a mercados, las políticas de apoyo al sector agrícola y los desafíos que enfrentan los productores locales. Un análisis más detallado permitiría identificar las causas de estas diferencias y diseñar estrategias para promover un desarrollo agrícola más equitativo y sostenible en toda la región.

4.2. Dinámica del cultivo con mayor producción en el Putumayo entre 2007 y 2018

eva %>% 
  filter(MUNICIPIO=="PUERTO GUZMAN" & CULTIVO=="PLATANO") %>% 
  group_by(AÑO, CULTIVO) %>%
  select(MUNICIPIO, CULTIVO, `Producción
(t)`, AÑO) ->  puertoguzman_platano
puertoguzman_platano
g <- ggplot(aes(x=AÑO, y= `Producción
(t)`/1000), data = puertoguzman_platano) + geom_bar(stat='identity') + labs(y='Produccion de Platano [Ton x 1000]')

Gráfico acerca de la evolución de la producción de platano en Puerto Guzman desde 2007 hasta 2018

g + ggtitle("Evolucion de la Produccion de platano en Puerto Guzman desde 2007 hasta 2018") + labs(caption= "Based on EVA data (Minagricultura, 2020)")

El gráfico de la producción de plátano en Puerto Guzmán entre 2007 y 2018 revela una tendencia interesante. Inicialmente, entre 2007 y 2010, se observa un crecimiento sostenido en la producción, alcanzando un pico máximo alrededor de 2010. Sin embargo, a partir de este punto, la producción se estabiliza, fluctuando levemente en torno a un valor promedio. Hacia el final del período analizado, entre 2017 y 2018, se aprecia una ligera disminución en la producción, aunque se mantiene en niveles relativamente altos. Esta evolución podría explicarse por diversos factores, como la madurez del cultivo, las condiciones climáticas, la dinámica del mercado y los cambios en las prácticas agrícolas. La estabilidad general de la producción sugiere que el cultivo de plátano se ha consolidado como una actividad económica importante en Puerto Guzmán, aunque las fluctuaciones anuales y la reciente disminución indican la necesidad de un monitoreo continuo y la implementación de estrategias para garantizar su sostenibilidad a largo plazo.

5. Bibliográfia

Lizarazo, I., 2022. Entendiendo la productividad dinámica de los cultivos. Disponible en https://rpubs.com/ials2un/production_dyn_v1.

Ministerio de agricultura, 2020. Plan departamental de extensión agropecuaria departamento de Putumayo. Gobernación putumayo. Disponible en https://repository.agrosavia.co/handle/20.500.12324/37136

Universidad tecnologíca de Pereira, 2023. Practícas agroecológicas para suelos resistentes. Disponible en https://epseaweb.utp.edu.co/wp-content/uploads/2024/02/Putumayo-suelos-resistentes.pdf

sessionInfo()
R version 4.3.3 (2024-02-29 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 11 x64 (build 22631)

Matrix products: default


locale:
[1] LC_COLLATE=Spanish_Spain.utf8  LC_CTYPE=Spanish_Spain.utf8    LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C                  
[5] LC_TIME=Spanish_Spain.utf8    

time zone: America/Bogota
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] lubridate_1.9.3 forcats_1.0.0   stringr_1.5.1   purrr_1.0.2     readr_2.1.5     tidyr_1.3.1     tibble_3.2.1    ggplot2_3.5.0  
 [9] tidyverse_2.0.0 dplyr_1.1.4    

loaded via a namespace (and not attached):
 [1] sass_0.4.8        utf8_1.2.4        generics_0.1.3    stringi_1.8.3     hms_1.1.3         digest_0.6.34     magrittr_2.0.3   
 [8] evaluate_0.23     grid_4.3.3        timechange_0.3.0  fastmap_1.1.1     jsonlite_1.8.8    fansi_1.0.6       scales_1.3.0     
[15] jquerylib_0.1.4   cli_3.6.2         crayon_1.5.2      rlang_1.1.3       bit64_4.0.5       munsell_0.5.0     withr_3.0.0      
[22] cachem_1.0.8      yaml_2.3.8        tools_4.3.3       tzdb_0.4.0        colorspace_2.1-0  vctrs_0.6.5       R6_2.5.1         
[29] lifecycle_1.0.4   bit_4.0.5         vroom_1.6.5       pkgconfig_2.0.3   pillar_1.9.0      bslib_0.6.1       gtable_0.3.4     
[36] rsconnect_1.3.3   glue_1.7.0        xfun_0.42         tidyselect_1.2.0  rstudioapi_0.15.0 knitr_1.45        farver_2.1.1     
[43] htmltools_0.5.7   rmarkdown_2.26    labeling_0.4.3    compiler_4.3.3   
LS0tDQp0aXRsZTogIlBhcmNpYWwgTm8uMSAtIEV2YWx1YWNpb25lcyBhZ3JvcGVjdWFyaWFzIGRlbCBkZXBhcnRhbWVudG8gZGVsIFB1dHVtYXlvIGRlc2RlDQogIDIwMDcgYSAyMDE4Ig0KYXV0aG9yOiAiTHVpc2EgQWxlamFuZHJhIEd1dGllcnJleiBIaWd1ZXJhIg0KZGF0ZTogIjIwLjEyLjIwMjQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyMgMS4gSW50cm9kdWNjacOzbg0KQ29uIGJhc2UgZW4gbGEgYmFzZSBkZSBkYXRvcyBkaXNwb25pYmxlIGVuIGVsIHNpZ3VpZW50ZSBlbmxhY2U6IGh0dHBzOi8vd3d3LmRhdG9zLmdvdi5jby9BZ3JpY3VsdHVyYS15LURlc2Fycm9sbG8tUnVyYWwvRXZhbHVhY2lvbmVzLUFncm9wZWN1YXJpYXMtTXVuaWNpcGFsZXMtRVZBLzJwbnctbW1nZS9kYXRhLCBzZSBwcmVzZW50YW4gZXN0YWTDrXN0aWNhcyBwbHVyaWFudWFsZXMgc29icmUgbGEgcHJvZHVjY2nDs24gYWdyw61jb2xhIGVuIENvbG9tYmlhLCBhYmFyY2FuZG8gZWwgcGVyaW9kbyAyMDA3LTIwMTguIEVzdGUgY29uanVudG8gZGUgZGF0b3MsIHByb3BvcmNpb25hZG8gcG9yIGVsIE1pbmlzdGVyaW8gZGUgQWdyaWN1bHR1cmEgeSBEZXNhcnJvbGxvIFJ1cmFsLCBwZXJtaXRlIGFuYWxpemFyIGRpdmVyc29zIGluZGljYWRvcmVzLCBjb21vIMOhcmVhIGNvc2VjaGFkYSwgw6FyZWEgc2VtYnJhZGEsIHByb2R1Y2Npw7NuIHRvdGFsIHkgZXNwZWNpZXMgY3VsdGl2YWRhcywgcGFyYSBkaWZlcmVudGVzIGRlcGFydGFtZW50b3MgeSBtdW5pY2lwaW9zLg0KDQpFbiBlc3RlIGFuw6FsaXNpcywgbm9zIGVuZm9jYXJlbW9zIGVuIGVsIGRlcGFydGFtZW50byBkZWwgUHV0dW1heW8sIGlsdXN0cmFuZG8gY8OzbW8gdmFyw61hbiBsb3MgY3JpdGVyaW9zIGRlIHByb2R1Y2Npw7NuIGVudHJlIG11bmljaXBpb3MsIGxvcyBncnVwb3MgZGUgY3VsdGl2b3MgbcOhcyByZXByZXNlbnRhdGl2b3MsIGxhcyBlc3BlY2llcyBwcmVkb21pbmFudGVzLCB5IG90cm9zIGZhY3RvcmVzIHJlbGFjaW9uYWRvcyBjb24gZWwgZGVzZW1wZcOxbyBhZ3LDrWNvbGEuIE1lZGlhbnRlIHRhYmxhcyB5IGdyw6FmaWNvcyBpbmZvcm1hdGl2b3MsIHNlIGJ1c2NhIGRlc3RhY2FyIHRlbmRlbmNpYXMgY2xhdmUgcXVlIGNvbnRyaWJ1eWVuIGEgZW50ZW5kZXIgZWwgcGFub3JhbWEgYWdyw61jb2xhIGRlIGxhIHJlZ2nDs24geSBzdSBpbXBhY3RvIGVuIGVsIGRlc2Fycm9sbG8gcnVyYWwuDQoNCg0KIyMgMi4gQ29uanVudG8gZGUgZGF0b3MgRVZBIHBsdXJpYW51YWwgcGFyYSBlbCBkZXBhcnRhbWVudG8gZGVsIFB1dHVtYXlvDQpTZSBzZWxlY2Npb27DsyBsYSBiYXNlIGRlIGRhdG9zIGRlIGxhcyBFdmFsdWFjaW9uZXMgQWdyb3BlY3VhcmlhcyBNdW5pY2lwYWxlcyAoRVZBKSBkZWJpZG8gYSBxdWUgY29uc3RpdHV5ZSB1bmEgcmVjb3BpbGFjacOzbiBpbnRlZ3JhbCB5IGVzcGVjw61maWNhIGRlIGluZm9ybWFjacOzbiBhZ3LDrWNvbGEgZGUgQ29sb21iaWEsIGxvIHF1ZSBwZXJtaXRlIHRyYWJhamFyIGRpcmVjdGFtZW50ZSBjb24gZGF0b3MgcmVsZXZhbnRlcyBwYXJhIGVsIGNvbnRleHRvIG5hY2lvbmFsLiBTdSBlc3RydWN0dXJhIGZhY2lsaXRhIHJlZ3VsYXIgeSBvcmdhbml6YXIgbG9zIGRhdG9zIGRlIGFjdWVyZG8gY29uIGxvcyBjcml0ZXJpb3MgbmVjZXNhcmlvcyBwYXJhIGVzdGUgYW7DoWxpc2lzLCBjb21vIHByb2R1Y2Npw7NuIHBvciBncnVwb3MgZGUgY3VsdGl2b3MsIGVzcGVjaWVzIGFncsOtY29sYXMsIMOhcmVhIGNvc2VjaGFkYSB5IHByb2R1Y2lkYSwgZW50cmUgb3Ryb3MgaW5kaWNhZG9yZXMgY2xhdmUuDQoNCkFkZW3DoXMsIGFsIHRyYXRhcnNlIGRlIHVuYSBiYXNlIGRlIGRhdG9zIGRlIGFjY2VzbyBsaWJyZSBhbCBww7pibGljbywgc2UgY29udmllcnRlIGVuIHVuYSBoZXJyYW1pZW50YSBzdW1hbWVudGUgdmFsaW9zYSBwYXJhIHJlYWxpemFyIGludmVzdGlnYWNpb25lcyB5IHByb3llY3RvcyBlbmZvY2Fkb3MgZW4gdGVtYXMgYWdyb27Ds21pY29zIG8gYWdyb3BlY3Vhcmlvcy4gU3UgZGlzcG9uaWJpbGlkYWQgZm9tZW50YSBsYSB0cmFuc3BhcmVuY2lhIHkgZWwgYWNjZXNvIGVxdWl0YXRpdm8gYSBpbmZvcm1hY2nDs24gZGUgZ3JhbiByZWxldmFuY2lhLg0KDQpGaW5hbG1lbnRlLCBlbCB1c28gZGUgUiBjb21vIGhlcnJhbWllbnRhIHByaW5jaXBhbCBwYXJhIGxhIG1hbmlwdWxhY2nDs24geSBhbsOhbGlzaXMgZGUgZGF0b3MgcHJvcG9yY2lvbmEgdW4gZW5mb3F1ZSBlZmljaWVudGUgeSByZXByb2R1Y2libGUsIHBlcm1pdGllbmRvIHRyYW5zZm9ybWFyIGVzdGEgaW5mb3JtYWNpw7NuIGVuIHRhYmxhcyB5IGdyw6FmaWNhcyBpbmZvcm1hdGl2YXMgcXVlIGZhY2lsaXRhbiB1bmEgY29tcHJlbnNpw7NuIG3DoXMgcHJvZnVuZGEgZGVsIGNvbXBvcnRhbWllbnRvIGFncsOtY29sYSBlbiByZWdpb25lcyBjb21vIGVsIFB1dHVtYXlvLg0KDQojIyAzLiBMZWN0dXJhIGRlIGxhIGJhc2UgZGUgZGF0b3MgRVZBDQpgYGB7cn0NCihldmEgPSByZWFkX2NzdigiQzovVXNlcnMvZ3V0aWUvTXVzaWMvRXZhbHVhY2lvbmVzX0Fncm9wZWN1YXJpYXNfTXVuaWNpcGFsZXNfRVZBLmNzdiIsIGNvbF9uYW1lcyA9IFRSVUUsc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkpDQpgYGANCg0KTGEgdGFibGEgb2J0ZW5pZGEgZGUgbGEgYmFzZSBkZSBkYXRvcyBpbmNsdXllIGluZm9ybWFjacOzbiBjbGF2ZSBjb21vIGVsIGPDs2RpZ28gZGVsIG11bmljaXBpbywgZWwgbm9tYnJlIGRlbCBkZXBhcnRhbWVudG8sIGVsIG5vbWJyZSBkZSBsb3MgbXVuaWNpcGlvcywgZWwgZ3J1cG8geSBzdWJncnVwbyBkZSBjdWx0aXZvLCBlbCB0aXBvIGRlIGN1bHRpdm8sIGxhIGRlc2FncmVnYWNpw7NuIHJlZ2lvbmFsIHkvbyBzaXN0ZW1hIHByb2R1Y3Rpdm8sIGFzw60gY29tbyBkYXRvcyBlc3BlY8OtZmljb3MgcmVsYWNpb25hZG9zIGNvbiBlbCBhw7FvLCBlbCBwZXJpb2RvLCBlbCDDoXJlYSBzZW1icmFkYSB5IGNvc2VjaGFkYSAoZW4gaGVjdMOhcmVhcyksIGxhIHByb2R1Y2Npw7NuIChlbiB0b25lbGFkYXMpLCBlbCByZW5kaW1pZW50byAoZW4gdG9uZWxhZGFzIHBvciBoZWN0w6FyZWEpIHkgZWwgZXN0YWRvIGbDrXNpY28gZGUgbGEgcHJvZHVjY2nDs24uIEVzdG9zIGNyaXRlcmlvcyBzb24gZnVuZGFtZW50YWxlcyBwYXJhIGVsIGVzdHVkaW8geSBhbsOhbGlzaXMgZGVsIHNlY3RvciBhZ3LDrWNvbGEsIHlhIHF1ZSBwZXJtaXRlbiB1bmEgdmlzacOzbiBkZXRhbGxhZGEgZGUgbGEgZGlzdHJpYnVjacOzbiB5IGRlc2VtcGXDsW8gZGUgbG9zIGN1bHRpdm9zIGVuIGRpZmVyZW50ZXMgcmVnaW9uZXMuIA0KDQpGYWNpbGl0YW4gbGEgaWRlbnRpZmljYWNpw7NuIGRlIHBhdHJvbmVzIHByb2R1Y3Rpdm9zLCBsYSBldmFsdWFjacOzbiBkZWwgcmVuZGltaWVudG8gYWdyw61jb2xhIHkgZWwgaW1wYWN0byBkZSB2YXJpYWJsZXMgZ2VvZ3LDoWZpY2FzIHkgY2xpbcOhdGljYXMgZW4gbGEgcHJvZHVjY2nDs24uIEFkZW3DoXMsIGVzdGEgaW5mb3JtYWNpw7NuIHJlc3VsdGEgZXNlbmNpYWwgcGFyYSBsYSBwbGFuaWZpY2FjacOzbiBlc3RyYXTDqWdpY2EsIGxhIGZvcm11bGFjacOzbiBkZSBwb2zDrXRpY2FzIHDDumJsaWNhcywgbGEgb3B0aW1pemFjacOzbiBkZSByZWN1cnNvcyB5IGVsIGRpc2XDsW8gZGUgc2lzdGVtYXMgcHJvZHVjdGl2b3Mgc29zdGVuaWJsZXMgYWRhcHRhZG9zIGEgbGFzIGNhcmFjdGVyw61zdGljYXMgZXNwZWPDrWZpY2FzIGRlIGNhZGEgcmVnacOzbi4NCg0KIyMgNC4gTGltcGllemEgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlIEVWQQ0KDQpgYGB7cn0NCm5hbWVzKGV2YSkNCmBgYA0KYGBge3J9DQpldmEudG1wDQpgYGANCg0KDQpgYGB7cn0NCmV2YS50bXAgJT4lICBkcGx5cjo6cmVuYW1lKCdDb2RfTXVuJyA9ICdDw5NELiBNVU4uJywnR3J1cG8nID0gJ0dSVVBPIFxuREUgQ1VMVElWTycsJ1N1YmdydXBvJyA9ICdTVUJHUlVQTyBcbkRFIENVTFRJVk8nLCAnWWVhcicgPSAnQcORTycsJ0FyZWFTZW1icmFkYScgPSAnw4FyZWEgU2VtYnJhZGFcbihoYSknLCdBcmVhQ29zZWNoYWRhJyA9ICfDgXJlYSBTZW1icmFkYVxuKGhhKScsJ1Byb2R1Y2Npb24nID0nUHJvZHVjY2nDs25cbih0KScsJ1JlbmRpbWllbnRvJyA9ICAnUmVuZGltaWVudG9cbih0L2hhKScsJ1Npc3RlbWEnID0gJ0RFU0FHUkVHQUNJw5NOIFJFR0lPTkFMIFkvTyBTSVNURU1BIFBST0RVQ1RJVk8nLCdFc3RhZG8nID0gJ0VTVEFETyBGSVNJQ08gUFJPRFVDQ0lPTicpIC0+IG5ld19ldmENCmBgYA0KDQpgYGB7cn0NCm5ld19ldmENCmBgYA0KDQojIyA0LiBBbsOhbGlzaXMgZGUgbGEgYmFzZSBkZSBkYXRvcyBFVkEsIHBhcmEgZWwgZGVwYXJ0YW1lbnRvIGRlbCBQdXR1bWF5bw0KDQpMYSB0YWJsYSBkZSBkYXRvcyBub3MgcGVybWl0ZSByZWNvbm9jZXIgbGEgdmFyaWFiaWxpZGFkIGRlIGxvcyBncnVwb3MgZGUgY3VsdGl2b3MgbWF5b3JtZW50ZSBjdWx0aXZhZG9zIGVuIGVsIGRlcGFydGFtZW50byBkZWwgUHV0dW1heW8sIGVudHJlIGxvcyBxdWUgc2UgZW5jdWVudHJhbiBjZXJlYWxlcywgZnJ1dGFsZXMsIGxlZ3VtaW5vc2FzLCBob3J0YWxpemFzLCBmb3Jlc3RhbGVzLCB0dWLDqXJjdWxvcyB5IHBsw6F0YW5vcywgb2xlYWdpbm9zYXMsIGZsb3JlcyB5IGZvbGxhamVzLiBFc3RhIGRpdmVyc2lkYWQgYWdyw61jb2xhIHNlIGRlYmUgcHJpbmNpcGFsbWVudGUgYSBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBjbGltw6F0aWNhcyB5IGVkw6FmaWNhcyBkZSBsYSByZWdpw7NuLiBFbCBQdXR1bWF5byBjdWVudGEgY29uIHVuIGNsaW1hIGPDoWxpZG8taMO6bWVkbyB0cm9waWNhbCB5IHVuYSBhYnVuZGFudGUgcHJlY2lwaXRhY2nDs24gYW51YWwsIGNvbmRpY2lvbmVzIGlkZWFsZXMgcGFyYSBlbCBjdWx0aXZvIGRlIHBsw6F0YW5vLCB5dWNhIHkgb3Ryb3MgdHViw6lyY3Vsb3MgcXVlIHJlcXVpZXJlbiBzdWVsb3Mgcmljb3MgZW4gbWF0ZXJpYSBvcmfDoW5pY2EgeSBiaWVuIGRyZW5hZG9zIChVbml2ZXJzaWRhZCBUZWNub2xvZ8OtY2EgZGUgUGVyZWlyYSwgMjAyMykuIEFzaW1pc21vLCBzdWVsb3MgYWx1dmlhbGVzIHkgZGUgYWx0YSBmZXJ0aWxpZGFkIGZhdm9yZWNlbiBlbCBkZXNhcnJvbGxvIGRlIGN1bHRpdm9zIGNvbW8gZnJ1dGFsZXMgdHJvcGljYWxlcyB5IG9sZWFnaW5vc2FzLCBtaWVudHJhcyBxdWUgbGFzIHRlbXBlcmF0dXJhcyBjb25zdGFudGVzIHkgbGEgYWx0YSBodW1lZGFkIHNvbiBpZGVhbGVzIHBhcmEgZWwgY3JlY2ltaWVudG8gZGUgZmxvcmVzIHkgZm9sbGFqZXMgZGUgZXhwb3J0YWNpw7NuIChNaW5pc3RlcmlvIGRlIEFncmljdWx0dXJhLCAyMDIwKS4NCg0KRWwgdXNvIGRlIGVzdGEgaW5mb3JtYWNpw7NuIHBlcm1pdGUgaWRlbnRpZmljYXIgbGFzIHZlbnRhamFzIHByb2R1Y3RpdmFzIGRlIGxhIHJlZ2nDs24geSBmb21lbnRhciBwcsOhY3RpY2FzIGFncsOtY29sYXMgc29zdGVuaWJsZXMgcXVlIG1heGltaWNlbiBlbCByZW5kaW1pZW50byBkZSBsb3MgY3VsdGl2b3MgdHJhZGljaW9uYWxlcywgYWwgdGllbXBvIHF1ZSBzZSBleHBsb3JhbiBudWV2YXMgb3BvcnR1bmlkYWRlcyBwYXJhIGRpdmVyc2lmaWNhciBsYSBvZmVydGEgYWdyw61jb2xhLCBmb3J0YWxlY2llbmRvIGxhIGVjb25vbcOtYSBsb2NhbC4gRXN0ZSBhbsOhbGlzaXMgZGV0YWxsYWRvIGFwb3lhIGxhIHRvbWEgZGUgZGVjaXNpb25lcyBlc3RyYXTDqWdpY2FzIGVuIGVsIHNlY3RvciBhZ3LDrWNvbGEsIGRlc2RlIHBvbMOtdGljYXMgcMO6YmxpY2FzIGhhc3RhIGludmVyc2lvbmVzIHByaXZhZGFzLg0KDQoNCiMjIDQuMS4gTG9zIGN1bHRpdm9zIG3DoXMgaW1wb3J0YW50ZXMgZW50cmUgMjAwNyB5IDIwMTgNCg0KYGBge3J9DQpuZXdfZXZhICU+JQ0KICAjI2ZpbHRlcihQcm9kdWNjaW9uID4gMCkgJT4lDQogIGdyb3VwX2J5KEdydXBvKSAlPiUNCiAgc3VtbWFyaXplKHRvdGFsX3Byb2R1Y2Npb24gPSBzdW0oUHJvZHVjY2lvbikpICU+JSANCiAgYXJyYW5nZShkZXNjKHRvdGFsX3Byb2R1Y2Npb24pKSANCmBgYA0KDQpgYGB7cn0NCm5ld19ldmEgJT4lDQogIGdyb3VwX2J5KEdydXBvKSAlPiUNCiAgc3VtbWFyaXplKHRvdGFsX3Byb2R1Y2Npb24gPSBzdW0oUHJvZHVjY2lvbikpIC0+IFBUIA0KYGBgDQoNCmBgYHtyfQ0KUFQgJT4lIA0KICBmaWx0ZXIodG90YWxfcHJvZHVjY2lvbiA+IDEwMDApIC0+IG1haW4uZ3JvdXBzDQpgYGANCg0KIyBSZXN1bHRhZG8gZGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuIGVuIGVsIFB1dHVtYXlvIA0KDQpFbCB2YWxvciB0b3RhbCBkZSBsYSBwcm9kdWNjacOzbiBlbiBlbCBkZXBhcnRhbWVudG8gZGVsIFB1dHVtYXlvLCBjb3JyZXNwb25kaWVudGUgYSBsYSBjaWZyYSBkZSAxLDE3Nyw3MTcsIHJlZmxlamEgZWwgdm9sdW1lbiB0b3RhbCBkZSBsYSBwcm9kdWNjacOzbiBhZ3LDrWNvbGEgcmVnaXN0cmFkbyBwYXJhIGxhIHJlZ2nDs24gZHVyYW50ZSBlbCBwZXLDrW9kbyBhbmFsaXphZG8uIEVzdGUgZGF0byBlcyBjbGF2ZSBwYXJhIGV2YWx1YXIgZWwgZGVzZW1wZcOxbyB5IGxhIHByb2R1Y3RpdmlkYWQgZGUgbG9zIGN1bHRpdm9zIGVuIFB1dHVtYXlvLCBwcm9wb3JjaW9uYW5kbyB1bmEgYmFzZSBzw7NsaWRhIHBhcmEgZWwgYW7DoWxpc2lzIHkgbGEgdG9tYSBkZSBkZWNpc2lvbmVzIHNvYnJlIGVsIHNlY3RvciBhZ3LDrWNvbGEgZW4gbGEgcmVnacOzbi4NCmBgYHtyfQ0KKHZhbHVlID0gc3VtKG1haW4uZ3JvdXBzJHRvdGFsX3Byb2R1Y2Npb24pKQ0KYGBgDQpgYGB7cn0NCm1haW4uZ3JvdXBzJHBlcmNlbnQgPSBtYWluLmdyb3VwcyR0b3RhbF9wcm9kdWNjaW9uL3ZhbHVlDQpgYGANCg0KIyBHcsOhZmljbyBhY2VyY2EgZGVsIHBvcmNlbnRhamUgZW50cmUgZ3J1cG8geSBwcm9kdWNjacOzbiBlbiBlbCBQdXR1bWF5bw0KYGBge3J9DQojIEJhcnBsb3QNCmJwPC0gZ2dwbG90KG1haW4uZ3JvdXBzLCBhZXMoeD0iIiwgeT1wZXJjZW50LCBmaWxsPUdydXBvKSkrDQpnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKQ0KIyBQaWVjaGFydA0KcGllIDwtIGJwICsgY29vcmRfcG9sYXIoInkiLCBzdGFydD0wKQ0KcGllDQpgYGANCg0KRWwgZ3LDoWZpY28gY2lyY3VsYXIgZXZpZGVuY2lhIGxhIHByZWRvbWluYW5jaWEgZGUgbG9zIHR1YsOpcmN1bG9zIHkgcGzDoXRhbm9zIGVuIGxhIGFncmljdWx0dXJhIGRlbCBQdXR1bWF5bywgb2N1cGFuZG8gbGEgbWl0YWQgZGUgbGEgcHJvZHVjY2nDs24gdG90YWwuIEVzdGEgY29uY2VudHJhY2nDs24gc2UgZXhwbGljYSBwb3IgbGFzIGNvbmRpY2lvbmVzIGFncm9jbGltw6F0aWNhcyBmYXZvcmFibGVzIHkgbGEgYXJyYWlnYWRhIHRyYWRpY2nDs24gYWdyw61jb2xhLiBTaSBiaWVuIGVzdG9zIGN1bHRpdm9zIHNvbiBmdW5kYW1lbnRhbGVzLCBlbCBncsOhZmljbyB0YW1iacOpbiByZXZlbGEgdW5hIGRpdmVyc2lkYWQgcHJvZHVjdGl2YSwgaW5jbHV5ZW5kbyBjZXJlYWxlcywgZm9yZXN0YWxlcywgZnJ1dGFsZXMsIGhvcnRhbGl6YXMsIGxlZ3VtaW5vc2FzLCBvbGVhZ2lub3Nhcywgb3RyYXMgcGVybWFuZW50ZXMgeSBwbGFudGFzIGFyb23DoXRpY2FzLiBFc3RhIHZhcmllZGFkIHJlc3BvbmRlIGEgbGFzIG5lY2VzaWRhZGVzIGFsaW1lbnRhcmlhcyB5IGVjb27Ds21pY2FzIGRlIGxhIHJlZ2nDs24sIGF1bnF1ZSBsYSBwcm9wb3JjacOzbiBkZSBjYWRhIGdydXBvIHN1Z2llcmUgw6FyZWFzIGRlIG9wb3J0dW5pZGFkIHBhcmEgbGEgZGl2ZXJzaWZpY2FjacOzbiB5IGVsIGRlc2Fycm9sbG8gYWdyw61jb2xhLg0KDQoNCmBgYHtyfQ0KbmV3X2V2YSAlPiUNCiAgZ3JvdXBfYnkoR3J1cG8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZSh0b3RhbF9wcm9kID0gc3VtKFByb2R1Y2Npb24sIG5hLnJtID0gVFJVRSkpICU+JQ0KICBzbGljZSh3aGljaC5tYXgodG90YWxfcHJvZCkpICAlPiUNCiAgYXJyYW5nZShkZXNjKHRvdGFsX3Byb2QpKQ0KYGBgDQoNCmBgYHtyfQ0KbmV3X2V2YSAlPiUNCiAgZ3JvdXBfYnkoR3J1cG8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZSh0b3RhbF9wcm9kID0gc3VtKFByb2R1Y2Npb24sIG5hLnJtID0gVFJVRSkpICU+JQ0KICBzbGljZSh3aGljaC5tYXgodG90YWxfcHJvZCkpICAtPiBsZWFkZXJzDQpgYGANCg0KYGBge3J9DQpsZWFkZXJzDQpgYGANCg0KYGBge3J9DQpsZWFkZXJzICU+JSANCiAgZmlsdGVyKHRvdGFsX3Byb2QgPiA1MCkgLT4gbWFpbi5sZWFkZXJzDQpgYGANCg0KIyBHcsOhZmljbyBhY2VyY2EgZGUgbGEgcHJvZHVjY2nDs24gZW4gbXVuaWNpcGlvcyBkZWwgUHV0dW1heW8gDQpgYGB7cn0NCiMgQmFzaWMgYmFycGxvdA0KcDwtZ2dwbG90KGRhdGE9bWFpbi5sZWFkZXJzLCBhZXMoeD1NVU5JQ0lQSU8sIHk9dG90YWxfcHJvZCkpICsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKQ0KcA0KYGBgDQoNCkVsIHByZXNlbnRlIGdyw6FmaWNvIGV2aWRlbmNpYSB1bmEgbWFyY2FkYSBkaXNwYXJpZGFkIGVuIGxhIHByb2R1Y2Npw7NuIHRvdGFsIGVudHJlIGxvcyBtdW5pY2lwaW9zIGRlbCBQdXR1bWF5bywgY29uIFB1ZXJ0byBHdXptw6FuIGRlc3RhY2FuZG8gY29tbyBlbCBwcmluY2lwYWwgcHJvZHVjdG9yLiBFc3RhIGNvbmNlbnRyYWNpw7NuIHBvZHLDrWEgYXRyaWJ1aXJzZSBhIGRpdmVyc29zIGZhY3RvcmVzIGNvbW8gY29uZGljaW9uZXMgYWdyb2NsaW3DoXRpY2FzIG3DoXMgZmF2b3JhYmxlcywgbWF5b3IgaW52ZXJzacOzbiBlbiBpbmZyYWVzdHJ1Y3R1cmEsIHRpcG8gZGUgY3VsdGl2b3MgcHJlZG9taW5hbnRlcywgdGFtYcOxbyBkZSBsYXMgZXhwbG90YWNpb25lcyBvIHBvbMOtdGljYXMgcMO6YmxpY2FzIHF1ZSBmYXZvcmVjZW4gZGV0ZXJtaW5hZGFzIHpvbmFzLiBPcml0bywgYXVucXVlIGVuIG1lbm9yIG1lZGlkYSwgdGFtYmnDqW4gcHJlc2VudGEgdW4gbml2ZWwgZGUgcHJvZHVjY2nDs24gY29uc2lkZXJhYmxlLiBFbiBjb250cmFzdGUsIE1vY29hLCBQdWVydG8gQ2FpY2VkbywgU2lidW5kb3kgeSBWYWxsZSBkZWwgR3VhbXVleiBtdWVzdHJhbiBjaWZyYXMgZGUgcHJvZHVjY2nDs24gc2lnbmlmaWNhdGl2YW1lbnRlIG1lbm9yZXMuIEVzdGEgZGlzcGFyaWRhZCBzdWdpZXJlIGxhIG5lY2VzaWRhZCBkZSBhbmFsaXphciBhIGZvbmRvIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGVzcGVjw61maWNhcyBkZSBjYWRhIG11bmljaXBpbywgaW5jbHV5ZW5kbyBhc3BlY3RvcyBjb21vIGxhIGNhbGlkYWQgZGUgbG9zIHN1ZWxvcywgZWwgYWNjZXNvIGEgbWVyY2Fkb3MsIGxhcyBwb2zDrXRpY2FzIGRlIGFwb3lvIGFsIHNlY3RvciBhZ3LDrWNvbGEgeSBsb3MgZGVzYWbDrW9zIHF1ZSBlbmZyZW50YW4gbG9zIHByb2R1Y3RvcmVzIGxvY2FsZXMuIFVuIGFuw6FsaXNpcyBtw6FzIGRldGFsbGFkbyBwZXJtaXRpcsOtYSBpZGVudGlmaWNhciBsYXMgY2F1c2FzIGRlIGVzdGFzIGRpZmVyZW5jaWFzIHkgZGlzZcOxYXIgZXN0cmF0ZWdpYXMgcGFyYSBwcm9tb3ZlciB1biBkZXNhcnJvbGxvIGFncsOtY29sYSBtw6FzIGVxdWl0YXRpdm8geSBzb3N0ZW5pYmxlIGVuIHRvZGEgbGEgcmVnacOzbi4NCg0KDQojIyA0LjIuIERpbsOhbWljYSBkZWwgY3VsdGl2byBjb24gbWF5b3IgcHJvZHVjY2nDs24gZW4gZWwgUHV0dW1heW8gZW50cmUgMjAwNyB5IDIwMTgNCg0KYGBge3J9DQpldmEgJT4lIA0KICBmaWx0ZXIoTVVOSUNJUElPPT0iUFVFUlRPIEdVWk1BTiIgJiBDVUxUSVZPPT0iUExBVEFOTyIpICU+JSANCiAgZ3JvdXBfYnkoQcORTywgQ1VMVElWTykgJT4lDQogIHNlbGVjdChNVU5JQ0lQSU8sIENVTFRJVk8sIGBQcm9kdWNjacOzbg0KKHQpYCwgQcORTykgLT4gIHB1ZXJ0b2d1em1hbl9wbGF0YW5vDQpgYGANCg0KYGBge3J9DQpwdWVydG9ndXptYW5fcGxhdGFubw0KYGBgDQoNCmBgYHtyfQ0KZyA8LSBnZ3Bsb3QoYWVzKHg9QcORTywgeT0gYFByb2R1Y2Npw7NuDQoodClgLzEwMDApLCBkYXRhID0gcHVlcnRvZ3V6bWFuX3BsYXRhbm8pICsgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknKSArIGxhYnMoeT0nUHJvZHVjY2lvbiBkZSBQbGF0YW5vIFtUb24geCAxMDAwXScpDQpgYGANCg0KIyBHcsOhZmljbyBhY2VyY2EgZGUgbGEgZXZvbHVjacOzbiBkZSBsYSBwcm9kdWNjacOzbiBkZSBwbGF0YW5vIGVuIFB1ZXJ0byBHdXptYW4gZGVzZGUgMjAwNyBoYXN0YSAyMDE4DQpgYGB7cn0NCmcgKyBnZ3RpdGxlKCJFdm9sdWNpb24gZGUgbGEgUHJvZHVjY2lvbiBkZSBwbGF0YW5vIGVuIFB1ZXJ0byBHdXptYW4gZGVzZGUgMjAwNyBoYXN0YSAyMDE4IikgKyBsYWJzKGNhcHRpb249ICJCYXNlZCBvbiBFVkEgZGF0YSAoTWluYWdyaWN1bHR1cmEsIDIwMjApIikNCmBgYA0KDQpFbCBncsOhZmljbyBkZSBsYSBwcm9kdWNjacOzbiBkZSBwbMOhdGFubyBlbiBQdWVydG8gR3V6bcOhbiBlbnRyZSAyMDA3IHkgMjAxOCByZXZlbGEgdW5hIHRlbmRlbmNpYSBpbnRlcmVzYW50ZS4gSW5pY2lhbG1lbnRlLCBlbnRyZSAyMDA3IHkgMjAxMCwgc2Ugb2JzZXJ2YSB1biBjcmVjaW1pZW50byBzb3N0ZW5pZG8gZW4gbGEgcHJvZHVjY2nDs24sIGFsY2FuemFuZG8gdW4gcGljbyBtw6F4aW1vIGFscmVkZWRvciBkZSAyMDEwLiBTaW4gZW1iYXJnbywgYSBwYXJ0aXIgZGUgZXN0ZSBwdW50bywgbGEgcHJvZHVjY2nDs24gc2UgZXN0YWJpbGl6YSwgZmx1Y3R1YW5kbyBsZXZlbWVudGUgZW4gdG9ybm8gYSB1biB2YWxvciBwcm9tZWRpby4gSGFjaWEgZWwgZmluYWwgZGVsIHBlcsOtb2RvIGFuYWxpemFkbywgZW50cmUgMjAxNyB5IDIwMTgsIHNlIGFwcmVjaWEgdW5hIGxpZ2VyYSBkaXNtaW51Y2nDs24gZW4gbGEgcHJvZHVjY2nDs24sIGF1bnF1ZSBzZSBtYW50aWVuZSBlbiBuaXZlbGVzIHJlbGF0aXZhbWVudGUgYWx0b3MuIEVzdGEgZXZvbHVjacOzbiBwb2Ryw61hIGV4cGxpY2Fyc2UgcG9yIGRpdmVyc29zIGZhY3RvcmVzLCBjb21vIGxhIG1hZHVyZXogZGVsIGN1bHRpdm8sIGxhcyBjb25kaWNpb25lcyBjbGltw6F0aWNhcywgbGEgZGluw6FtaWNhIGRlbCBtZXJjYWRvIHkgbG9zIGNhbWJpb3MgZW4gbGFzIHByw6FjdGljYXMgYWdyw61jb2xhcy4gTGEgZXN0YWJpbGlkYWQgZ2VuZXJhbCBkZSBsYSBwcm9kdWNjacOzbiBzdWdpZXJlIHF1ZSBlbCBjdWx0aXZvIGRlIHBsw6F0YW5vIHNlIGhhIGNvbnNvbGlkYWRvIGNvbW8gdW5hIGFjdGl2aWRhZCBlY29uw7NtaWNhIGltcG9ydGFudGUgZW4gUHVlcnRvIEd1em3DoW4sIGF1bnF1ZSBsYXMgZmx1Y3R1YWNpb25lcyBhbnVhbGVzIHkgbGEgcmVjaWVudGUgZGlzbWludWNpw7NuIGluZGljYW4gbGEgbmVjZXNpZGFkIGRlIHVuIG1vbml0b3JlbyBjb250aW51byB5IGxhIGltcGxlbWVudGFjacOzbiBkZSBlc3RyYXRlZ2lhcyBwYXJhIGdhcmFudGl6YXIgc3Ugc29zdGVuaWJpbGlkYWQgYSBsYXJnbyBwbGF6by4NCg0KIyMgNS4gQmlibGlvZ3LDoWZpYQ0KDQpMaXphcmF6bywgSS4sIDIwMjIuIEVudGVuZGllbmRvIGxhIHByb2R1Y3RpdmlkYWQgZGluw6FtaWNhIGRlIGxvcyBjdWx0aXZvcy4gRGlzcG9uaWJsZSBlbiBodHRwczovL3JwdWJzLmNvbS9pYWxzMnVuL3Byb2R1Y3Rpb25fZHluX3YxLg0KDQpNaW5pc3RlcmlvIGRlIGFncmljdWx0dXJhLCAyMDIwLiBQbGFuIGRlcGFydGFtZW50YWwgZGUgZXh0ZW5zacOzbiBhZ3JvcGVjdWFyaWEgZGVwYXJ0YW1lbnRvIGRlIFB1dHVtYXlvLiBHb2Jlcm5hY2nDs24gcHV0dW1heW8uIERpc3BvbmlibGUgZW4NCmh0dHBzOi8vcmVwb3NpdG9yeS5hZ3Jvc2F2aWEuY28vaGFuZGxlLzIwLjUwMC4xMjMyNC8zNzEzNg0KDQpVbml2ZXJzaWRhZCB0ZWNub2xvZ8OtY2EgZGUgUGVyZWlyYSwgMjAyMy4gUHJhY3TDrWNhcyBhZ3JvZWNvbMOzZ2ljYXMgcGFyYSBzdWVsb3MgcmVzaXN0ZW50ZXMuIERpc3BvbmlibGUgZW4NCmh0dHBzOi8vZXBzZWF3ZWIudXRwLmVkdS5jby93cC1jb250ZW50L3VwbG9hZHMvMjAyNC8wMi9QdXR1bWF5by1zdWVsb3MtcmVzaXN0ZW50ZXMucGRmDQoNCmBgYHtyfQ0Kc2Vzc2lvbkluZm8oKQ0KYGBgDQoNCg==