En febrero de 1898, hubo una fuerte tormenta de invierno con lluvia, aguanieve y nieve cerca de Providence, RI (Rhode Island). Ciento treinta y seis gorriones ingleses fueron encontrados congelados y llevados al laboratorio del Dr. Bumpus en la Universidad Brown. De ellos, 72 sobrevivieron y 64 murieron. Bumpus aprovechó la oportunidad de estudiar un episodio de selección natural. Midió una serie de características de las aves y las analizó para encontrar diferencias entre los sobrevivientes y los que perecieron.

Las variables (características) son la base de datos que está disponible y tiene 56 registros de los Machos. Columna 1 (survive): 1 Sobreviviente y 0 No sobreviviente Columna 2 (length): Longitud total Columna 3 (alar): extensión Alar; Columna 4 (weight): peso Columna 5 (lbh): longitud del pico y la cabeza; Columna 6 (lh): longitud del húmero; Columna 7 (lfemur): longitud del femur Columna 8 (ltibio): longitud del tibiotarso; Columna 9 (wSkull): ancho del cráneo y Columna 10 (kL): longitud de la quilla del esternón “Solucion Taller”

datos<- read.table( "https://richardlent.github.io/datasets/bumpus.dat.txt",header=T)
datos
  1. CLASIFICACIÓN DE LAS VARIABLES DE ESTE ESTUDIO

Survive: Variable binaria asimetrica de caracter cualitativo (categorica) 1 corresponde a sobreviviente y 0 a no sobreviente

Length (Longitud total): Variable cuantitativa continua.

Alar (Extensión alar): Variable cuantitativa continua.

Weight(Peso): Variable cuantitativa continua

Lbh (Longitud del pico y la cabeza): Variable cuantitativa continua.

eLhum (Longitud del humero): Variable cuantitativa continua

Lfem (Longitud del femur): Variable cuantitativa continua)b

Ltibio (Longitud del tibiotarso): Variable cuantitativa continua

Wskull (Ancho del craneo): Variable cuantitativa continua

Kl(Longitud de la quilla del esternón): Variable cuantitativa continua

  1. ANALISIS DE VALIDEZ DE VARIABLES MORFOLÓGICAS

Las caracteristicas basadas en datos morfologicos en machos de acuerdo con el articulo en estudio( Johnston, Niles & Rohwer, 1972) que discriminan o separan a sobrevivientes de no sobrevivientes, se han obtenido de la tabla 3(Secondary sexual dimorphism assessed by character-state “means for three groupings of Bumpus sparrow), donde podemos encontrar diferencia de medias de estas caracteristicas correspondientes a muestras masculinas de sobrevivientes y no sobrevivientes. Los resultados fueron:

Length (Longitud total): 159,25 Sobrevientes; 162,08 No sobreviviente

Alar (Extensión alar):247,41 sobrevivientes; 247,56 No sobreviviente

Weight(Peso): 2,95 sobrevivientes; 2,98 No sobrevivientes

Lbh (Longitud del pico y craneo): 37,70 sobrevivientes; 31,56 no sobrevivientes

Lhum (Longitud del humero): 18,76 sobrevivientes; 18,55 no sobrevivientes

Lfem (Longitud del femur): 18,21 sobrevivientes; 18,01 no sobrevivientes

Ltibio (Longitud del tibiotarso): 28,84 sobrevivientes; 28.61 No sobrevivientes

Wskull (Ancho del craneo): 15,35 sobrevivientes; 15,29 No sobrevivientes

Kl(Longitud de la quilla del esternón): 21,76 sobrevivientes 21,46 no sobrevivientes

Basandonos en estos resultados, las variables morofoligicas mas discriminativas de sobrevivientes y no sobrevivientes son la longitud total de los machos 159,25 Sobrevientes; 162,08 No sobrevivientes. y la longitud del pico y la cabeza 37,70 sobrevivientes; 31,56 no sobrevivientes.

3). ¿Considera que la variable Peso es válida en este estudio, dado que los sobrevivientes durante el estudio pueden variar su peso?

No es válida porque Bumpus no dio detalles del tratamiento que le dio a los gorriones que sobrevivieron, en lo referente a los momentos de alimentación. No se sabe si los alimentó antes de pesarlos o después de pesarlos, pero lo mas probable es que los haya alimentado al momento de llevarlos a su laboratorio. Por otra parte no se debe tener en cuenta esta variable que muestra mayor peso en los que murieron, ya que el peso no tiene nada que ver con la selección de la tormenta puesto que, los sobrevivientes habrían seguido procesando la comida en el tracto digestivo y evacuando desechos frecuentemente, tal como lo hacen los gorriones. También para los sobrevivientes el estar sobreviviendo al estres de la temperatura por el frío de la tormenta, más que los que murieron implicaba un gasto de energía continuo, que finalmente se reflejaría en una perdida de masa corporal.

  1. ANALISIS EXPLORATORIO DE LOS DATOS
  1. Determine las estadísticas descriptivas básicas e interprete para la muestra total Summary(datos) e interprete cada una de las anteriores medidas
summary(datos)
    survive           length           alar           weight     
 Min.   :0.0000   Min.   :153.0   Min.   :39.00   Min.   :3.000  
 1st Qu.:0.0000   1st Qu.:158.8   1st Qu.:44.75   1st Qu.:4.875  
 Median :1.0000   Median :160.0   Median :47.00   Median :5.750  
 Mean   :0.5893   Mean   :160.0   Mean   :46.98   Mean   :5.764  
 3rd Qu.:1.0000   3rd Qu.:161.0   3rd Qu.:50.00   3rd Qu.:6.500  
 Max.   :1.0000   Max.   :166.0   Max.   :53.00   Max.   :8.300  
      lbh             lhum             lfem            ltibio     
 Min.   :30.00   Min.   :0.6590   Min.   :0.6580   Min.   :1.000  
 1st Qu.:30.30   1st Qu.:0.7080   1st Qu.:0.7000   1st Qu.:1.103  
 Median :31.00   Median :0.7360   Median :0.7090   Median :1.117  
 Mean   :30.96   Mean   :0.7291   Mean   :0.7105   Mean   :1.123  
 3rd Qu.:31.50   3rd Qu.:0.7460   3rd Qu.:0.7180   3rd Qu.:1.150  
 Max.   :31.90   Max.   :0.7800   Max.   :0.7650   Max.   :1.197  
     wskull           lkeel       
 Min.   :0.5700   Min.   :0.7880  
 1st Qu.:0.5940   1st Qu.:0.8300  
 Median :0.6000   Median :0.8500  
 Mean   :0.6012   Mean   :0.8506  
 3rd Qu.:0.6082   3rd Qu.:0.8795  
 Max.   :0.6330   Max.   :0.9160  

INTERPRETACIÓN DE LAS ESTADISTICAS DESCRIPTIVAS BÁSICAS: Se interpretaran las estadisticas para las nueve variables estudiadas.

Longitud total: El gorrión con menor longitud mide 153 mm (Min). El 25% de las longitudes de los datos tomados para machos es menor o igual a 158.8 mm (1st Qu). El valor longitudinal que se encuentra en toda la mitad de los datos al jerarquizar las observaciones es 160 mm (Median). El valor promedio longitudinal de todos los gorriones es de 160 mm (mean) . La longitud máxima alcanzada es de 166 mm (Max). El 75% de las longitudes son menores o iguales a 161 mm.

Extención alar: La menor extensión alar de la muestra de gorriones es 39.00 mm (min). El 25% de las extenciones alares de los datos es menor o igual a 44,75 mm (1st Qu), El valor de extensión alar ubicado en la mitad de todos los datos al ser jerarquizados es 47 mm (Median). El promedio de extensión alar de gorriones machos es 46,98. El 75% de los valores de extensión alar son menores o iguales a 50 mm. La máxima extensión alar en machos es 53 (Max).

Peso: El peso minimo es de 3 (min). El 25% de los gorriones pesa menos o igual a 4.875 (1st Qu), el peso ubicado en la mitad de los datos es 5.750 (Median). Los gorriones machos pesan en promedio 5,764; el 75% del total de los datos de peso es menor o igual a 6,5 (3rd Qu). El gorrión más pesado pesa 8,3.

Longitud del pico y craneo: La menor longitud de esta variable es 30 mm. el 25% de las longitudes de pico y craneo son menores o iguales a 30.3mm. El valor de la mitad al jerarquizarse los datos es 31 mm. El 75% de los datos es menor o igual a 31.50 mm (3rd Qu). El promedio de longitud de pico y craneo en gorriones machos es 30.96 y la máxima longitud alcanzada para esta variable es 31,90 mm.

Longitud del húmero: La menor longitud del húmero fue 0,659. el 25% de las longitudes de húmero son menores o iguales a 0,7080. al ordenarse los datos, el valor de la mitad es 0,7360. la longitud promedio de esta variable es 0,7291. El 75% de los datos es menor o igual a 0,7460 y el valor maximo de la longitud del húmero llegó hasta 0,78.

Longitud del fémur: La mínima longitud del fémur es 0,6580, el 25% de las longitudes de fémur es menor o igual a 0,7. el valor que se encuentra en la mitad al jerarquizarse el orden de todos los datos es 0.7090 y el valor promedio de longitud de femur de la especie es 0.7105. 75% de los datos es menor o igual a 0,7180 y el femur más largo mide 0.7650.

Longitud del tibiotarso: La longitud más corta es 1 y el 25% de los datos es menor o igual a 1.103. La mediana nos dice que el valor de la mitad al ordenarse los datos de menor a mayor es 1.117. En promedio, la longitud del tibiotarso de gorriones es 1.123. El 75% de los datos es menor o igual a 1.150, la longitud máxima alcanzada en el tibiotarso por la muestra de gorriones es 1,197.

Ancho del craneo: El ancho de craneo de menor valor es 0,57, el 25% de los datos de ancho de craneo es menor 0 igual a 0,5940. Al jerarquizarse los datos, el valor que se encuentra en la mitad de este orden es 0.6 y el promedio de ancho de craneo en gorriones machos es 0.6082. El valor máximo alcanzado en esta variable es 0,6330.

Longitud de la quilla del esternón: La menor longitud en esta variable fue 0.7880. 25% de las longitudes de la quilla son menores o iguales a 0.83. El valor de la mitad al ordenarse los datos de menor a mayor es 0.85 y el promedio de la longitud de la quilla del esternón es 0,8506. 75% de las longitudes de la quilla del esternon, son valores menores o iguales a 0,8795

2). Determine otros estadísticos como percentiles, varianza, moda, asimetría y discuta como estos le pueden ayudar a describir mejor la muestra

MODA

library(modeest) 
mfv(datos$length) #Moda longitud total 
[1] 160
mfv(datos$alar)  # Moda extensión alar
[1] 47
mfv(datos$weight) #Moda del peso
[1] 6
mfv(datos$lbh) #Moda de longitud del pico y el craneo
[1] 30
mfv(datos$lhum) #Moda de longitud del húmero
[1] 0.709 0.741 0.750
mfv(datos$lfem) #Moda de la longitud del femur
[1] 0.709 0.718
mfv(datos$ltibio) #Moda de la longitud del tibiotarso
[1] 1.109
mfv(datos$wskull) #Moda del ancho del craneo
[1] 0.6
mfv(datos$lkeel) #Moda de la longitud de quilla del esternon
[1] 0.803

La moda nos ayudará a ver cuales son los valores que se repiten con más frecuencia dentro de los datos tomados. Podremos ver si es solo uno o otros mas valoreslos que se están repitiendo. Dependiendo del número de modas que encontremos en los datos, su distribución se podría clasicar en bimodal, trimodal,etc

PERCENTILES

library(fmsb)
quantile(datos$length, probs = c(0.15, 0.25, 0.35, 0.50)) #Percentiles longitud total
   15%    25%    35%    50% 
157.25 158.75 160.00 160.00 
quantile(datos$alar, probs = c(0.15, 0.25, 0.35, 0.50)) #Percentiles extensión alar
  15%   25%   35%   50% 
43.00 44.75 46.00 47.00 
quantile(datos$weight, probs = c(0.15, 0.25, 0.35, 0.50))# Percentiles peso
  15%   25%   35%   50% 
4.600 4.875 5.425 5.750 
quantile(datos$lbh, probs= c(0.15, 0.25, 0.35, 0.50))# percentiles longitud del pico y el craneo
   15%    25%    35%    50% 
30.025 30.300 30.500 31.000 
quantile(datos$lhum, probs = c(0.15, 0.25, 0.35, 0.50)) #Percentiles longitud del húmero
  15%   25%   35%   50% 
0.703 0.708 0.710 0.736 
quantile(datos$lfem, probs = c(0.15, 0.25, 0.35, 0.50)) #Percentiles longitud del femur
    15%     25%     35%     50% 
0.69175 0.70000 0.70425 0.70900 
quantile(datos$ltibio, probs = c(0.15, 0.25, 0.35, 0.50)) #Percentiles longitud del tibiotarso
    15%     25%     35%     50% 
1.09125 1.10325 1.10800 1.11750 
quantile(datos$wskull, probs = c(0.15, 0.25, 0.35, 0.50 )) #Percentiles ancho del craneo
  15%   25%   35%   50% 
0.590 0.594 0.600 0.600 
quantile(datos$lkeel, probs = c(0.15, 0.25, 0.35, 0.50)) #Percentiles longitud de la quilla del esternon
    15%     25%     35%     50% 
0.80350 0.83000 0.83925 0.85000 

Los percentiles nos permitiran saber el valor por debajo del cual cae un porcentaje dado de observaciones en un grupo de observaciones.

VARIANZA

var(datos$length)# varianza longitud total
[1] 8.580519
var(datos$alar)# varianza extensión del ala
[1] 14.52695
var(datos$weight) #Varianza peso
[1] 1.408883
var(datos$lbh) #Varianza longitud del craneo
[1] 0.4399481
var(datos$lhum)#Varianza Humero
[1] 0.0006177974
var(datos$lfem)# Varianza femur
[1] 0.0004491273
var(datos$ltibio)#Varianza tibiotarso
[1] 0.001485018
var(datos$wskull)#Varianza ancho del craneo
[1] 0.0001543789
var(datos$lkeel)# longitud de la quilla del esternón
[1] 0.001203325

La varianza me ayudará a ver qué tan dispersos están los datos alrededor de su media. Mientras mayor sea la varianza, mayor será la dispersión de los datos.

ASIMETRÍA

library(moments)
skewness(datos$length)# Asimentría longitud total leptocurtica
[1] 0.02669076
skewness(datos$alar)# Asimetría longitud total platicurtica
[1] -0.2724359
skewness(datos$weight)# Asimetría peso leptocurtica
[1] 0.1321639
skewness(datos$lbh)# Asimetría longitud del craneo y el pico platicurtica
[1] -0.15721
skewness(datos$lhum)# Asimetría de longitud humero platicurtica
[1] -0.2892139
skewness(datos$lfem) # Asimetría de longitud femur leptocurtica
[1] 0.02356955
skewness(datos$ltibio)# Asimetría de la longitud del tibiotarso platicurtica
[1] -0.6207288
skewness(datos$wskull)# Asimetría del ancho del craneo leptocurtica
[1] 0.08320313
skewness(datos$lkeel)# Asimetría de la longitud de la quilla del esternón platicurtica
[1] -0.1473232

La asimetría es un estadistico que representa la asimetria de la distribución. Si este coeficiente es nulo, la distribucion será normal (similar a la distribucion normal de Gauss) y recibe el nombre de mesocurtica. Si el coeficiente es positivo, la distribucion se llama leptocurtica, hay una mayor concentracion de los datos en torno a la media. Si el coeficiente es negativo, la distribucion se llama platicurtica y hay una menor concentracion de datos en torno a la media.

3)Determine las estadísticas para cada grupo (sobreviviente, no sobreviviente)

install.packages("dplyr")
Error in install.packages : Updating loaded packages
library(dplyr)
sobre<- filter(datos, survive=='1')
sobre
nosobre<- filter(datos, survive=='0')
nosobre
summary(sobre)
    survive      length         alar           weight           lbh       
 Min.   :1   Min.   :153   Min.   :40.00   Min.   :3.000   Min.   :30.00  
 1st Qu.:1   1st Qu.:158   1st Qu.:45.00   1st Qu.:4.600   1st Qu.:30.30  
 Median :1   Median :159   Median :47.00   Median :5.700   Median :31.30  
 Mean   :1   Mean   :159   Mean   :47.27   Mean   :5.555   Mean   :30.97  
 3rd Qu.:1   3rd Qu.:160   3rd Qu.:50.00   3rd Qu.:6.500   3rd Qu.:31.60  
 Max.   :1   Max.   :166   Max.   :53.00   Max.   :8.000   Max.   :31.90  
      lhum             lfem           ltibio          wskull      
 Min.   :0.6870   Min.   :0.668   Min.   :1.000   Min.   :0.5750  
 1st Qu.:0.7090   1st Qu.:0.703   1st Qu.:1.108   1st Qu.:0.5900  
 Median :0.7390   Median :0.711   Median :1.135   Median :0.6000  
 Mean   :0.7343   Mean   :0.716   Mean   :1.128   Mean   :0.6006  
 3rd Qu.:0.7500   3rd Qu.:0.736   3rd Qu.:1.153   3rd Qu.:0.6090  
 Max.   :0.7800   Max.   :0.765   Max.   :1.190   Max.   :0.6330  
     lkeel       
 Min.   :0.7880  
 1st Qu.:0.8390  
 Median :0.8600  
 Mean   :0.8566  
 3rd Qu.:0.8860  
 Max.   :0.9070  
summary(nosobre)
    survive      length           alar           weight           lbh       
 Min.   :0   Min.   :156.0   Min.   :39.00   Min.   :4.600   Min.   :30.00  
 1st Qu.:0   1st Qu.:160.0   1st Qu.:44.50   1st Qu.:5.300   1st Qu.:30.45  
 Median :0   Median :161.0   Median :47.00   Median :6.000   Median :31.00  
 Mean   :0   Mean   :161.3   Mean   :46.57   Mean   :6.065   Mean   :30.93  
 3rd Qu.:0   3rd Qu.:163.0   3rd Qu.:49.50   3rd Qu.:6.500   3rd Qu.:31.45  
 Max.   :0   Max.   :166.0   Max.   :53.00   Max.   :8.300   Max.   :31.90  
      lhum             lfem            ltibio          wskull      
 Min.   :0.6590   Min.   :0.6580   Min.   :1.040   Min.   :0.5700  
 1st Qu.:0.7045   1st Qu.:0.6935   1st Qu.:1.093   1st Qu.:0.5985  
 Median :0.7310   Median :0.7090   Median :1.108   Median :0.6060  
 Mean   :0.7217   Mean   :0.7027   Mean   :1.114   Mean   :0.6021  
 3rd Qu.:0.7410   3rd Qu.:0.7120   3rd Qu.:1.141   3rd Qu.:0.6075  
 Max.   :0.7540   Max.   :0.7310   Max.   :1.197   Max.   :0.6310  
     lkeel       
 Min.   :0.7950  
 1st Qu.:0.8095  
 Median :0.8400  
 Mean   :0.8420  
 3rd Qu.:0.8630  
 Max.   :0.9160  
LS0tDQp0aXRsZTogIlRhbGxlciAxIFN0ZXBoYW5pZSBOafFvIEJlbHRy4W4iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQogDQoNCkVuIGZlYnJlcm8gZGUgMTg5OCwgaHVibyB1bmEgZnVlcnRlIHRvcm1lbnRhIGRlIGludmllcm5vIGNvbiBsbHV2aWEsIGFndWFuaWV2ZSB5IG5pZXZlIGNlcmNhIGRlDQpQcm92aWRlbmNlLCBSSSAoUmhvZGUgSXNsYW5kKS4gQ2llbnRvIHRyZWludGEgeSBzZWlzIGdvcnJpb25lcyBpbmdsZXNlcyBmdWVyb24gZW5jb250cmFkb3MgY29uZ2VsYWRvcw0KeSBsbGV2YWRvcyBhbCBsYWJvcmF0b3JpbyBkZWwgRHIuIEJ1bXB1cyBlbiBsYSBVbml2ZXJzaWRhZCBCcm93bi4gRGUgZWxsb3MsIDcyIHNvYnJldml2aWVyb24geSA2NA0KbXVyaWVyb24uIEJ1bXB1cyBhcHJvdmVjaPMgbGEgb3BvcnR1bmlkYWQgZGUgZXN0dWRpYXIgdW4gZXBpc29kaW8gZGUgc2VsZWNjafNuIG5hdHVyYWwuIE1pZGnzIHVuYQ0Kc2VyaWUgZGUgY2FyYWN0ZXLtc3RpY2FzIGRlIGxhcyBhdmVzIHkgbGFzIGFuYWxpevMgcGFyYSBlbmNvbnRyYXIgZGlmZXJlbmNpYXMgZW50cmUgbG9zIHNvYnJldml2aWVudGVzIHkNCmxvcyBxdWUgcGVyZWNpZXJvbi4gDQoNCkxhcyB2YXJpYWJsZXMgKGNhcmFjdGVy7XN0aWNhcykgc29uIGxhIGJhc2UgZGUgZGF0b3MgcXVlIGVzdOEgZGlzcG9uaWJsZSB5IHRpZW5lIDU2IHJlZ2lzdHJvcw0KZGUgbG9zIE1hY2hvcy4NCkNvbHVtbmEgMSAoc3Vydml2ZSk6IDEgU29icmV2aXZpZW50ZSB5IDAgTm8gc29icmV2aXZpZW50ZQ0KQ29sdW1uYSAyIChsZW5ndGgpOiBMb25naXR1ZCB0b3RhbA0KQ29sdW1uYSAzIChhbGFyKTogZXh0ZW5zafNuIEFsYXI7DQpDb2x1bW5hIDQgKHdlaWdodCk6IHBlc28NCkNvbHVtbmEgNSAobGJoKTogbG9uZ2l0dWQgZGVsIHBpY28geSBsYSBjYWJlemE7DQpDb2x1bW5hIDYgKGxoKTogbG9uZ2l0dWQgZGVsIGj6bWVybzsNCkNvbHVtbmEgNyAobGZlbXVyKTogbG9uZ2l0dWQgZGVsIGZlbXVyDQpDb2x1bW5hIDggKGx0aWJpbyk6IGxvbmdpdHVkIGRlbCB0aWJpb3RhcnNvOw0KQ29sdW1uYSA5ICh3U2t1bGwpOiBhbmNobyBkZWwgY3LhbmVvIHkNCkNvbHVtbmEgMTAgKGtMKTogbG9uZ2l0dWQgZGUgbGEgcXVpbGxhIGRlbCBlc3Rlcm7zbiANCiJTb2x1Y2lvbiBUYWxsZXIiDQoNCg0KYGBge3IsZWNobz1UfQ0KZGF0b3M8LSByZWFkLnRhYmxlKCAiaHR0cHM6Ly9yaWNoYXJkbGVudC5naXRodWIuaW8vZGF0YXNldHMvYnVtcHVzLmRhdC50eHQiLGhlYWRlcj1UKQ0KZGF0b3MNCmBgYA0KMSkgICBDTEFTSUZJQ0FDSdNOIERFIExBUyBWQVJJQUJMRVMgREUgRVNURSBFU1RVRElPDQoNClN1cnZpdmU6IFZhcmlhYmxlIGJpbmFyaWEgYXNpbWV0cmljYSBkZSBjYXJhY3RlciBjdWFsaXRhdGl2byAoY2F0ZWdvcmljYSkNCjEgY29ycmVzcG9uZGUgYSBzb2JyZXZpdmllbnRlIHkgMCBhIG5vIHNvYnJldmllbnRlDQoNCkxlbmd0aCAoTG9uZ2l0dWQgdG90YWwpOiBWYXJpYWJsZSBjdWFudGl0YXRpdmEgY29udGludWEuDQoNCkFsYXIgKEV4dGVuc2nzbiBhbGFyKTogVmFyaWFibGUgY3VhbnRpdGF0aXZhIGNvbnRpbnVhLg0KDQpXZWlnaHQoUGVzbyk6IFZhcmlhYmxlIGN1YW50aXRhdGl2YSBjb250aW51YQ0KDQpMYmggKExvbmdpdHVkIGRlbCBwaWNvIHkgbGEgY2FiZXphKTogVmFyaWFibGUgY3VhbnRpdGF0aXZhIGNvbnRpbnVhLg0KDQplTGh1bSAoTG9uZ2l0dWQgZGVsIGh1bWVybyk6IFZhcmlhYmxlIGN1YW50aXRhdGl2YSBjb250aW51YQ0KDQpMZmVtIChMb25naXR1ZCBkZWwgZmVtdXIpOiBWYXJpYWJsZSBjdWFudGl0YXRpdmEgY29udGludWEpYg0KDQpMdGliaW8gKExvbmdpdHVkIGRlbCB0aWJpb3RhcnNvKTogVmFyaWFibGUgY3VhbnRpdGF0aXZhIGNvbnRpbnVhDQoNCldza3VsbCAoQW5jaG8gZGVsIGNyYW5lbyk6IFZhcmlhYmxlIGN1YW50aXRhdGl2YSBjb250aW51YQ0KDQpLbChMb25naXR1ZCBkZSBsYSBxdWlsbGEgZGVsIGVzdGVybvNuKTogVmFyaWFibGUgY3VhbnRpdGF0aXZhIGNvbnRpbnVhDQoNCg0KMikgQU5BTElTSVMgREUgVkFMSURFWiBERSBWQVJJQUJMRVMgTU9SRk9M00dJQ0FTDQoNCkxhcyBjYXJhY3RlcmlzdGljYXMgYmFzYWRhcyBlbiBkYXRvcyBtb3Jmb2xvZ2ljb3MgZW4gbWFjaG9zIGRlIGFjdWVyZG8gY29uIGVsIGFydGljdWxvIGVuIGVzdHVkaW8oIEpvaG5zdG9uLCBOaWxlcyAmIFJvaHdlciwgMTk3MikgcXVlIGRpc2NyaW1pbmFuIG8gc2VwYXJhbiBhIHNvYnJldml2aWVudGVzIGRlIG5vIHNvYnJldml2aWVudGVzLCBzZSBoYW4gb2J0ZW5pZG8gZGUgbGEgdGFibGEgMyhTZWNvbmRhcnkgc2V4dWFsIGRpbW9ycGhpc20gYXNzZXNzZWQgYnkgY2hhcmFjdGVyLXN0YXRlICJtZWFucyBmb3IgdGhyZWUgZ3JvdXBpbmdzIG9mIEJ1bXB1cyBzcGFycm93KSwgZG9uZGUgcG9kZW1vcyBlbmNvbnRyYXIgZGlmZXJlbmNpYSBkZSBtZWRpYXMgZGUgZXN0YXMgY2FyYWN0ZXJpc3RpY2FzIGNvcnJlc3BvbmRpZW50ZXMgYSBtdWVzdHJhcyBtYXNjdWxpbmFzIGRlIHNvYnJldml2aWVudGVzIHkgbm8gc29icmV2aXZpZW50ZXMuIExvcyByZXN1bHRhZG9zIGZ1ZXJvbjogDQoNCkxlbmd0aCAoTG9uZ2l0dWQgdG90YWwpOiAxNTksMjUgU29icmV2aWVudGVzOyAxNjIsMDggTm8gc29icmV2aXZpZW50ZQ0KDQpBbGFyIChFeHRlbnNp824gYWxhcik6MjQ3LDQxIHNvYnJldml2aWVudGVzOyAyNDcsNTYgTm8gc29icmV2aXZpZW50ZQ0KDQpXZWlnaHQoUGVzbyk6IDIsOTUgc29icmV2aXZpZW50ZXM7IDIsOTggTm8gc29icmV2aXZpZW50ZXMNCg0KTGJoIChMb25naXR1ZCBkZWwgcGljbyB5IGNyYW5lbyk6IDM3LDcwIHNvYnJldml2aWVudGVzOyAzMSw1NiBubyBzb2JyZXZpdmllbnRlcw0KDQpMaHVtIChMb25naXR1ZCBkZWwgaHVtZXJvKTogMTgsNzYgc29icmV2aXZpZW50ZXM7IDE4LDU1IG5vIHNvYnJldml2aWVudGVzDQoNCkxmZW0gKExvbmdpdHVkIGRlbCBmZW11cik6IDE4LDIxIHNvYnJldml2aWVudGVzOyAxOCwwMSBubyBzb2JyZXZpdmllbnRlcw0KDQpMdGliaW8gKExvbmdpdHVkIGRlbCB0aWJpb3RhcnNvKTogMjgsODQgc29icmV2aXZpZW50ZXM7IDI4LjYxIE5vIHNvYnJldml2aWVudGVzDQoNCldza3VsbCAoQW5jaG8gZGVsIGNyYW5lbyk6IDE1LDM1IHNvYnJldml2aWVudGVzOyAxNSwyOSBObyBzb2JyZXZpdmllbnRlcw0KDQpLbChMb25naXR1ZCBkZSBsYSBxdWlsbGEgZGVsIGVzdGVybvNuKTogMjEsNzYgc29icmV2aXZpZW50ZXMgMjEsNDYgbm8gc29icmV2aXZpZW50ZXMNCg0KQmFzYW5kb25vcyBlbiBlc3RvcyByZXN1bHRhZG9zLCBsYXMgdmFyaWFibGVzIG1vcm9mb2xpZ2ljYXMgbWFzIGRpc2NyaW1pbmF0aXZhcyBkZSBzb2JyZXZpdmllbnRlcyB5IG5vIHNvYnJldml2aWVudGVzIHNvbiBsYSBsb25naXR1ZCB0b3RhbCBkZSBsb3MgbWFjaG9zICAxNTksMjUgU29icmV2aWVudGVzOyAxNjIsMDggTm8gc29icmV2aXZpZW50ZXMuIHkgbGEgbG9uZ2l0dWQgZGVsIHBpY28geSBsYSBjYWJlemEgMzcsNzAgc29icmV2aXZpZW50ZXM7IDMxLDU2IG5vIHNvYnJldml2aWVudGVzLg0KDQozKS4gv0NvbnNpZGVyYSBxdWUgbGEgdmFyaWFibGUgUGVzbyBlcyB24WxpZGEgZW4gZXN0ZSBlc3R1ZGlvLCBkYWRvIHF1ZSBsb3Mgc29icmV2aXZpZW50ZXMgZHVyYW50ZSBlbA0KZXN0dWRpbyBwdWVkZW4gdmFyaWFyIHN1IHBlc28/DQoNCk5vIGVzIHbhbGlkYSBwb3JxdWUgQnVtcHVzIG5vIGRpbyBkZXRhbGxlcyBkZWwgdHJhdGFtaWVudG8gcXVlIGxlIGRpbyBhIGxvcyBnb3JyaW9uZXMgcXVlIHNvYnJldml2aWVyb24sIGVuIGxvIHJlZmVyZW50ZSBhIGxvcyBtb21lbnRvcyBkZSBhbGltZW50YWNp824uIE5vIHNlIHNhYmUgc2kgbG9zIGFsaW1lbnTzIGFudGVzIGRlIHBlc2FybG9zIG8gZGVzcHXpcyBkZSBwZXNhcmxvcywgcGVybyBsbyBtYXMgcHJvYmFibGUgZXMgcXVlIGxvcyBoYXlhIGFsaW1lbnRhZG8gYWwgbW9tZW50byBkZSBsbGV2YXJsb3MgYSBzdSBsYWJvcmF0b3Jpby4gUG9yIG90cmEgcGFydGUgbm8gc2UgZGViZSB0ZW5lciBlbiBjdWVudGEgZXN0YSB2YXJpYWJsZSBxdWUgbXVlc3RyYSBtYXlvciBwZXNvIGVuIGxvcyBxdWUgbXVyaWVyb24sIHlhIHF1ZSBlbCBwZXNvIG5vIHRpZW5lIG5hZGEgcXVlIHZlciBjb24gbGEgc2VsZWNjafNuIGRlIGxhIHRvcm1lbnRhIHB1ZXN0byBxdWUsIGxvcyBzb2JyZXZpdmllbnRlcyBoYWJy7WFuIHNlZ3VpZG8gcHJvY2VzYW5kbyBsYSBjb21pZGEgZW4gZWwgdHJhY3RvIGRpZ2VzdGl2byB5IGV2YWN1YW5kbyBkZXNlY2hvcyBmcmVjdWVudGVtZW50ZSwgdGFsIGNvbW8gbG8gaGFjZW4gbG9zIGdvcnJpb25lcy4gVGFtYmnpbiBwYXJhIGxvcyBzb2JyZXZpdmllbnRlcyBlbCBlc3RhciBzb2JyZXZpdmllbmRvIGFsIGVzdHJlcyBkZSBsYSB0ZW1wZXJhdHVyYSBwb3IgZWwgZnLtbyBkZSBsYSB0b3JtZW50YSwgbeFzIHF1ZSBsb3MgcXVlIG11cmllcm9uIGltcGxpY2FiYSB1biBnYXN0byBkZSBlbmVyZ+1hIGNvbnRpbnVvLCBxdWUgZmluYWxtZW50ZSBzZSByZWZsZWphcu1hIGVuIHVuYSBwZXJkaWRhIGRlIG1hc2EgY29ycG9yYWwuDQoNCg0KSUkpIEFOQUxJU0lTIEVYUExPUkFUT1JJTyBERSBMT1MgREFUT1MNCg0KMSkgRGV0ZXJtaW5lIGxhcyBlc3RhZO1zdGljYXMgZGVzY3JpcHRpdmFzIGLhc2ljYXMgZSBpbnRlcnByZXRlIHBhcmEgbGEgbXVlc3RyYSB0b3RhbCBTdW1tYXJ5KGRhdG9zKSBlIGludGVycHJldGUgY2FkYSB1bmEgZGUgbGFzIGFudGVyaW9yZXMgbWVkaWRhcw0KDQpgYGB7cixlY2hvPVR9DQpzdW1tYXJ5KGRhdG9zKQ0KDQpgYGANCg0KSU5URVJQUkVUQUNJ004gREUgTEFTIEVTVEFESVNUSUNBUyBERVNDUklQVElWQVMgQsFTSUNBUzoNClNlIGludGVycHJldGFyYW4gbGFzIGVzdGFkaXN0aWNhcyBwYXJhIGxhcyBudWV2ZSB2YXJpYWJsZXMgZXN0dWRpYWRhcy4NCg0KTG9uZ2l0dWQgdG90YWw6IEVsIGdvcnJp824gY29uIG1lbm9yIGxvbmdpdHVkIG1pZGUgMTUzIG1tIChNaW4pLiBFbCAyNSUgZGUgbGFzIGxvbmdpdHVkZXMgZGUgbG9zIGRhdG9zIHRvbWFkb3MgcGFyYSBtYWNob3MgZXMgbWVub3IgbyBpZ3VhbCBhIDE1OC44IG1tICgxc3QgUXUpLiBFbCB2YWxvciBsb25naXR1ZGluYWwgcXVlIHNlIGVuY3VlbnRyYSBlbiB0b2RhIGxhIG1pdGFkIGRlIGxvcyBkYXRvcyBhbCBqZXJhcnF1aXphciBsYXMgb2JzZXJ2YWNpb25lcyBlcyAxNjAgbW0gKE1lZGlhbikuIEVsIHZhbG9yIHByb21lZGlvIGxvbmdpdHVkaW5hbCBkZSB0b2RvcyBsb3MgZ29ycmlvbmVzIGVzIGRlIDE2MCBtbSAobWVhbikgLiBMYSBsb25naXR1ZCBt4XhpbWEgYWxjYW56YWRhIGVzIGRlIDE2NiBtbSAoTWF4KS4gRWwgNzUlIGRlIGxhcyBsb25naXR1ZGVzIHNvbiBtZW5vcmVzIG8gaWd1YWxlcyBhIDE2MSBtbS4NCg0KRXh0ZW5jafNuIGFsYXI6IExhIG1lbm9yIGV4dGVuc2nzbiBhbGFyIGRlIGxhIG11ZXN0cmEgZGUgZ29ycmlvbmVzIGVzIDM5LjAwIG1tIChtaW4pLiBFbCAyNSUgZGUgbGFzIGV4dGVuY2lvbmVzIGFsYXJlcyBkZSBsb3MgZGF0b3MgZXMgbWVub3IgbyBpZ3VhbCBhIDQ0LDc1IG1tICgxc3QgUXUpLCBFbCB2YWxvciBkZSBleHRlbnNp824gYWxhciB1YmljYWRvIGVuIGxhIG1pdGFkIGRlIHRvZG9zIGxvcyBkYXRvcyBhbCBzZXIgamVyYXJxdWl6YWRvcyBlcyA0NyBtbSAoTWVkaWFuKS4gRWwgcHJvbWVkaW8gZGUgZXh0ZW5zafNuIGFsYXIgZGUgZ29ycmlvbmVzIG1hY2hvcyBlcyA0Niw5OC4gRWwgNzUlIGRlIGxvcyB2YWxvcmVzIGRlIGV4dGVuc2nzbiBhbGFyIHNvbiBtZW5vcmVzIG8gaWd1YWxlcyBhIDUwIG1tLiBMYSBt4XhpbWEgZXh0ZW5zafNuIGFsYXIgZW4gbWFjaG9zIGVzIDUzIChNYXgpLg0KDQpQZXNvOiBFbCBwZXNvIG1pbmltbyBlcyBkZSAzIChtaW4pLiBFbCAyNSUgZGUgbG9zIGdvcnJpb25lcyBwZXNhIG1lbm9zIG8gaWd1YWwgYSA0Ljg3NSAoMXN0IFF1KSwgZWwgcGVzbyB1YmljYWRvIGVuIGxhIG1pdGFkIGRlIGxvcyBkYXRvcyBlcyA1Ljc1MCAoTWVkaWFuKS4gTG9zIGdvcnJpb25lcyBtYWNob3MgcGVzYW4gZW4gcHJvbWVkaW8gNSw3NjQ7IGVsIDc1JSBkZWwgdG90YWwgZGUgbG9zIGRhdG9zIGRlIHBlc28gZXMgbWVub3IgbyBpZ3VhbCBhIDYsNSAoM3JkIFF1KS4gRWwgZ29ycmnzbiBt4XMgcGVzYWRvIHBlc2EgOCwzLg0KDQpMb25naXR1ZCBkZWwgcGljbyB5IGNyYW5lbzogTGEgbWVub3IgbG9uZ2l0dWQgZGUgZXN0YSB2YXJpYWJsZSBlcyAzMCBtbS4gZWwgMjUlIGRlIGxhcyBsb25naXR1ZGVzIGRlIHBpY28geSBjcmFuZW8gc29uIG1lbm9yZXMgbyBpZ3VhbGVzIGEgMzAuM21tLiBFbCB2YWxvciBkZSBsYSBtaXRhZCBhbCBqZXJhcnF1aXphcnNlIGxvcyBkYXRvcyBlcyAzMSBtbS4gRWwgNzUlIGRlIGxvcyBkYXRvcyBlcyBtZW5vciBvIGlndWFsIGEgMzEuNTAgbW0gKDNyZCBRdSkuIEVsIHByb21lZGlvIGRlIGxvbmdpdHVkIGRlIHBpY28geSBjcmFuZW8gZW4gZ29ycmlvbmVzIG1hY2hvcyBlcyAzMC45NiB5IGxhIG3heGltYSBsb25naXR1ZCBhbGNhbnphZGEgcGFyYSBlc3RhIHZhcmlhYmxlIGVzIDMxLDkwIG1tLg0KDQpMb25naXR1ZCBkZWwgaPptZXJvOiBMYSBtZW5vciBsb25naXR1ZCBkZWwgaPptZXJvIGZ1ZSAwLDY1OS4gZWwgMjUlIGRlIGxhcyBsb25naXR1ZGVzIGRlIGj6bWVybyBzb24gbWVub3JlcyBvIGlndWFsZXMgYSAwLDcwODAuIGFsIG9yZGVuYXJzZSBsb3MgZGF0b3MsIGVsIHZhbG9yIGRlIGxhIG1pdGFkIGVzIDAsNzM2MC4gbGEgbG9uZ2l0dWQgcHJvbWVkaW8gZGUgZXN0YSB2YXJpYWJsZSBlcyAwLDcyOTEuIEVsIDc1JSBkZSBsb3MgZGF0b3MgZXMgbWVub3IgbyBpZ3VhbCBhIDAsNzQ2MCB5IGVsIHZhbG9yIG1heGltbyBkZSBsYSBsb25naXR1ZCBkZWwgaPptZXJvIGxsZWfzIGhhc3RhIDAsNzguDQoNCkxvbmdpdHVkIGRlbCBm6W11cjogTGEgbe1uaW1hIGxvbmdpdHVkIGRlbCBm6W11ciBlcyAwLDY1ODAsIGVsIDI1JSBkZSBsYXMgbG9uZ2l0dWRlcyBkZSBm6W11ciBlcyBtZW5vciBvIGlndWFsIGEgMCw3LiBlbCB2YWxvciBxdWUgc2UgZW5jdWVudHJhIGVuIGxhIG1pdGFkIGFsIGplcmFycXVpemFyc2UgZWwgb3JkZW4gZGUgdG9kb3MgbG9zIGRhdG9zIGVzIDAuNzA5MCB5IGVsIHZhbG9yIHByb21lZGlvIGRlIGxvbmdpdHVkIGRlIGZlbXVyIGRlIGxhIGVzcGVjaWUgZXMgMC43MTA1LiA3NSUgZGUgbG9zIGRhdG9zIGVzIG1lbm9yIG8gaWd1YWwgYSAwLDcxODAgeSBlbCBmZW11ciBt4XMgbGFyZ28gbWlkZSAwLjc2NTAuDQoNCkxvbmdpdHVkIGRlbCB0aWJpb3RhcnNvOiBMYSBsb25naXR1ZCBt4XMgY29ydGEgZXMgMSB5IGVsIDI1JSBkZSBsb3MgZGF0b3MgZXMgbWVub3IgbyBpZ3VhbCBhIDEuMTAzLiBMYSBtZWRpYW5hIG5vcyBkaWNlIHF1ZSBlbCB2YWxvciBkZSBsYSBtaXRhZCBhbCBvcmRlbmFyc2UgbG9zIGRhdG9zIGRlIG1lbm9yIGEgbWF5b3IgZXMgMS4xMTcuIEVuIHByb21lZGlvLCBsYSBsb25naXR1ZCBkZWwgdGliaW90YXJzbyBkZSBnb3JyaW9uZXMgZXMgMS4xMjMuIEVsIDc1JSBkZSBsb3MgZGF0b3MgZXMgbWVub3IgbyBpZ3VhbCBhIDEuMTUwLCBsYSBsb25naXR1ZCBt4XhpbWEgYWxjYW56YWRhIGVuIGVsIHRpYmlvdGFyc28gcG9yIGxhIG11ZXN0cmEgZGUgZ29ycmlvbmVzIGVzIDEsMTk3Lg0KDQpBbmNobyBkZWwgY3JhbmVvOiBFbCBhbmNobyBkZSBjcmFuZW8gZGUgbWVub3IgdmFsb3IgZXMgMCw1NywgZWwgMjUlIGRlIGxvcyBkYXRvcyBkZSBhbmNobyBkZSBjcmFuZW8gZXMgbWVub3IgMCBpZ3VhbCBhIDAsNTk0MC4gQWwgamVyYXJxdWl6YXJzZSBsb3MgZGF0b3MsIGVsIHZhbG9yIHF1ZSBzZSBlbmN1ZW50cmEgZW4gbGEgbWl0YWQgZGUgZXN0ZSBvcmRlbiBlcyAwLjYgeSBlbCBwcm9tZWRpbyBkZSBhbmNobyBkZSBjcmFuZW8gZW4gZ29ycmlvbmVzIG1hY2hvcyBlcyAwLjYwODIuIEVsIHZhbG9yIG3heGltbyBhbGNhbnphZG8gZW4gZXN0YSB2YXJpYWJsZSBlcyAwLDYzMzAuDQoNCkxvbmdpdHVkIGRlIGxhIHF1aWxsYSBkZWwgZXN0ZXJu8246IExhIG1lbm9yIGxvbmdpdHVkIGVuIGVzdGEgdmFyaWFibGUgZnVlIDAuNzg4MC4gMjUlIGRlIGxhcyBsb25naXR1ZGVzIGRlIGxhIHF1aWxsYSBzb24gbWVub3JlcyBvIGlndWFsZXMgYSAwLjgzLiBFbCB2YWxvciBkZSBsYSBtaXRhZCBhbCBvcmRlbmFyc2UgbG9zIGRhdG9zIGRlIG1lbm9yIGEgbWF5b3IgZXMgMC44NSB5IGVsIHByb21lZGlvIGRlIGxhIGxvbmdpdHVkIGRlIGxhIHF1aWxsYSBkZWwgZXN0ZXJu824gZXMgMCw4NTA2LiA3NSUgZGUgbGFzIGxvbmdpdHVkZXMgZGUgbGEgcXVpbGxhIGRlbCBlc3Rlcm5vbiwgc29uIHZhbG9yZXMgbWVub3JlcyBvIGlndWFsZXMgYSAwLDg3OTUNCg0KDQoyKS4gRGV0ZXJtaW5lIG90cm9zIGVzdGFk7XN0aWNvcyBjb21vIHBlcmNlbnRpbGVzLCB2YXJpYW56YSwgbW9kYSwgYXNpbWV0cu1hIHkgZGlzY3V0YSBjb21vIGVzdG9zIGxlIHB1ZWRlbiBheXVkYXIgYSBkZXNjcmliaXIgbWVqb3IgbGEgbXVlc3RyYQ0KDQpNT0RBDQpgYGB7cixlY2hvPVR9DQpsaWJyYXJ5KG1vZGVlc3QpIA0KbWZ2KGRhdG9zJGxlbmd0aCkgI01vZGEgbG9uZ2l0dWQgdG90YWwgDQptZnYoZGF0b3MkYWxhcikgICMgTW9kYSBleHRlbnNp824gYWxhcg0KbWZ2KGRhdG9zJHdlaWdodCkgI01vZGEgZGVsIHBlc28NCm1mdihkYXRvcyRsYmgpICNNb2RhIGRlIGxvbmdpdHVkIGRlbCBwaWNvIHkgZWwgY3JhbmVvDQptZnYoZGF0b3MkbGh1bSkgI01vZGEgZGUgbG9uZ2l0dWQgZGVsIGj6bWVybw0KbWZ2KGRhdG9zJGxmZW0pICNNb2RhIGRlIGxhIGxvbmdpdHVkIGRlbCBmZW11cg0KbWZ2KGRhdG9zJGx0aWJpbykgI01vZGEgZGUgbGEgbG9uZ2l0dWQgZGVsIHRpYmlvdGFyc28NCm1mdihkYXRvcyR3c2t1bGwpICNNb2RhIGRlbCBhbmNobyBkZWwgY3JhbmVvDQptZnYoZGF0b3MkbGtlZWwpICNNb2RhIGRlIGxhIGxvbmdpdHVkIGRlIHF1aWxsYSBkZWwgZXN0ZXJub24NCmBgYA0KTGEgbW9kYSBub3MgYXl1ZGFy4SBhIHZlciBjdWFsZXMgc29uIGxvcyB2YWxvcmVzIHF1ZSBzZSByZXBpdGVuIGNvbiBt4XMgZnJlY3VlbmNpYSBkZW50cm8gZGUgbG9zIGRhdG9zIHRvbWFkb3MuIFBvZHJlbW9zIHZlciBzaSBlcyBzb2xvIHVubyBvIG90cm9zIG1hcyB2YWxvcmVzbG9zIHF1ZSBzZSBlc3ThbiByZXBpdGllbmRvLiBEZXBlbmRpZW5kbyBkZWwgbvptZXJvIGRlIG1vZGFzIHF1ZSBlbmNvbnRyZW1vcyBlbiBsb3MgZGF0b3MsIHN1IGRpc3RyaWJ1Y2nzbiBzZSBwb2Ry7WEgY2xhc2ljYXIgZW4gYmltb2RhbCwgdHJpbW9kYWwsZXRjDQoNClBFUkNFTlRJTEVTDQpgYGB7cixlY2hvPVR9DQpsaWJyYXJ5KGZtc2IpDQpxdWFudGlsZShkYXRvcyRsZW5ndGgsIHByb2JzID0gYygwLjE1LCAwLjI1LCAwLjM1LCAwLjUwKSkgI1BlcmNlbnRpbGVzIGxvbmdpdHVkIHRvdGFsDQpxdWFudGlsZShkYXRvcyRhbGFyLCBwcm9icyA9IGMoMC4xNSwgMC4yNSwgMC4zNSwgMC41MCkpICNQZXJjZW50aWxlcyBleHRlbnNp824gYWxhcg0KcXVhbnRpbGUoZGF0b3Mkd2VpZ2h0LCBwcm9icyA9IGMoMC4xNSwgMC4yNSwgMC4zNSwgMC41MCkpIyBQZXJjZW50aWxlcyBwZXNvDQpxdWFudGlsZShkYXRvcyRsYmgsIHByb2JzPSBjKDAuMTUsIDAuMjUsIDAuMzUsIDAuNTApKSMgcGVyY2VudGlsZXMgbG9uZ2l0dWQgZGVsIHBpY28geSBlbCBjcmFuZW8NCnF1YW50aWxlKGRhdG9zJGxodW0sIHByb2JzID0gYygwLjE1LCAwLjI1LCAwLjM1LCAwLjUwKSkgI1BlcmNlbnRpbGVzIGxvbmdpdHVkIGRlbCBo+m1lcm8NCnF1YW50aWxlKGRhdG9zJGxmZW0sIHByb2JzID0gYygwLjE1LCAwLjI1LCAwLjM1LCAwLjUwKSkgI1BlcmNlbnRpbGVzIGxvbmdpdHVkIGRlbCBmZW11cg0KcXVhbnRpbGUoZGF0b3MkbHRpYmlvLCBwcm9icyA9IGMoMC4xNSwgMC4yNSwgMC4zNSwgMC41MCkpICNQZXJjZW50aWxlcyBsb25naXR1ZCBkZWwgdGliaW90YXJzbw0KcXVhbnRpbGUoZGF0b3Mkd3NrdWxsLCBwcm9icyA9IGMoMC4xNSwgMC4yNSwgMC4zNSwgMC41MCApKSAjUGVyY2VudGlsZXMgYW5jaG8gZGVsIGNyYW5lbw0KcXVhbnRpbGUoZGF0b3MkbGtlZWwsIHByb2JzID0gYygwLjE1LCAwLjI1LCAwLjM1LCAwLjUwKSkgI1BlcmNlbnRpbGVzIGxvbmdpdHVkIGRlIGxhIHF1aWxsYSBkZWwgZXN0ZXJub24NCmBgYA0KTG9zIHBlcmNlbnRpbGVzIG5vcyBwZXJtaXRpcmFuIHNhYmVyIGVsIHZhbG9yIHBvciBkZWJham8gZGVsIGN1YWwgY2FlIHVuIHBvcmNlbnRhamUgZGFkbyBkZSBvYnNlcnZhY2lvbmVzIGVuIHVuIGdydXBvIGRlIG9ic2VydmFjaW9uZXMuDQoNClZBUklBTlpBDQpgYGB7ciwgZWNobz1UfQ0KdmFyKGRhdG9zJGxlbmd0aCkjIHZhcmlhbnphIGxvbmdpdHVkIHRvdGFsDQp2YXIoZGF0b3MkYWxhcikjIHZhcmlhbnphIGV4dGVuc2nzbiBkZWwgYWxhDQp2YXIoZGF0b3Mkd2VpZ2h0KSAjVmFyaWFuemEgcGVzbw0KdmFyKGRhdG9zJGxiaCkgI1ZhcmlhbnphIGxvbmdpdHVkIGRlbCBjcmFuZW8NCnZhcihkYXRvcyRsaHVtKSNWYXJpYW56YSBIdW1lcm8NCnZhcihkYXRvcyRsZmVtKSMgVmFyaWFuemEgZmVtdXINCnZhcihkYXRvcyRsdGliaW8pI1ZhcmlhbnphIHRpYmlvdGFyc28NCnZhcihkYXRvcyR3c2t1bGwpI1ZhcmlhbnphIGFuY2hvIGRlbCBjcmFuZW8NCnZhcihkYXRvcyRsa2VlbCkjIGxvbmdpdHVkIGRlIGxhIHF1aWxsYSBkZWwgZXN0ZXJu824NCmBgYA0KDQpMYSB2YXJpYW56YSBtZSBheXVkYXLhIGEgdmVyIHF16SB0YW4gZGlzcGVyc29zIGVzdOFuIGxvcyBkYXRvcyBhbHJlZGVkb3IgZGUgc3UgbWVkaWEuIE1pZW50cmFzIG1heW9yIHNlYSBsYSB2YXJpYW56YSwgbWF5b3Igc2Vy4SBsYSBkaXNwZXJzafNuIGRlIGxvcyBkYXRvcy4NCg0KQVNJTUVUUs1BDQpgYGB7ciwgZWNobz1UfQ0KbGlicmFyeShtb21lbnRzKQ0Kc2tld25lc3MoZGF0b3MkbGVuZ3RoKSMgQXNpbWVudHLtYSBsb25naXR1ZCB0b3RhbCBsZXB0b2N1cnRpY2ENCnNrZXduZXNzKGRhdG9zJGFsYXIpIyBBc2ltZXRy7WEgbG9uZ2l0dWQgdG90YWwgcGxhdGljdXJ0aWNhDQpza2V3bmVzcyhkYXRvcyR3ZWlnaHQpIyBBc2ltZXRy7WEgcGVzbyBsZXB0b2N1cnRpY2ENCnNrZXduZXNzKGRhdG9zJGxiaCkjIEFzaW1ldHLtYSBsb25naXR1ZCBkZWwgY3JhbmVvIHkgZWwgcGljbyBwbGF0aWN1cnRpY2ENCnNrZXduZXNzKGRhdG9zJGxodW0pIyBBc2ltZXRy7WEgZGUgbG9uZ2l0dWQgaHVtZXJvIHBsYXRpY3VydGljYQ0Kc2tld25lc3MoZGF0b3MkbGZlbSkgIyBBc2ltZXRy7WEgZGUgbG9uZ2l0dWQgZmVtdXIgbGVwdG9jdXJ0aWNhDQpza2V3bmVzcyhkYXRvcyRsdGliaW8pIyBBc2ltZXRy7WEgZGUgbGEgbG9uZ2l0dWQgZGVsIHRpYmlvdGFyc28gcGxhdGljdXJ0aWNhDQpza2V3bmVzcyhkYXRvcyR3c2t1bGwpIyBBc2ltZXRy7WEgZGVsIGFuY2hvIGRlbCBjcmFuZW8gbGVwdG9jdXJ0aWNhDQpza2V3bmVzcyhkYXRvcyRsa2VlbCkjIEFzaW1ldHLtYSBkZSBsYSBsb25naXR1ZCBkZSBsYSBxdWlsbGEgZGVsIGVzdGVybvNuIHBsYXRpY3VydGljYQ0KDQpgYGANCkxhIGFzaW1ldHLtYSBlcyB1biBlc3RhZGlzdGljbyBxdWUgcmVwcmVzZW50YSBsYSBhc2ltZXRyaWEgZGUgbGEgZGlzdHJpYnVjafNuLiBTaSBlc3RlIGNvZWZpY2llbnRlIGVzIG51bG8sIGxhIGRpc3RyaWJ1Y2lvbiBzZXLhIG5vcm1hbCAoc2ltaWxhciBhIGxhIGRpc3RyaWJ1Y2lvbiBub3JtYWwgZGUgR2F1c3MpIHkgcmVjaWJlIGVsIG5vbWJyZSBkZSBtZXNvY3VydGljYS4gU2kgZWwgY29lZmljaWVudGUgZXMgcG9zaXRpdm8sIGxhIGRpc3RyaWJ1Y2lvbiBzZSBsbGFtYSBsZXB0b2N1cnRpY2EsIGhheSB1bmEgbWF5b3IgY29uY2VudHJhY2lvbiBkZSBsb3MgZGF0b3MgZW4gdG9ybm8gYSBsYSBtZWRpYS4gU2kgZWwgY29lZmljaWVudGUgZXMgbmVnYXRpdm8sIGxhIGRpc3RyaWJ1Y2lvbiBzZSBsbGFtYSBwbGF0aWN1cnRpY2EgeSBoYXkgdW5hIG1lbm9yIGNvbmNlbnRyYWNpb24gZGUgZGF0b3MgZW4gdG9ybm8gYSBsYSBtZWRpYS4NCg0KDQozKURldGVybWluZSBsYXMgZXN0YWTtc3RpY2FzIHBhcmEgY2FkYSBncnVwbyAoc29icmV2aXZpZW50ZSwgbm8gc29icmV2aXZpZW50ZSkNCg0KYGBge3IsIGVjaG89VH0NCmluc3RhbGwucGFja2FnZXMoImRwbHlyIikNCmxpYnJhcnkoZHBseXIpDQoNCg0KDQoNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCnNvYnJlPC0gZmlsdGVyKGRhdG9zLCBzdXJ2aXZlPT0nMScpDQpzb2JyZQ0KYGBgDQoNCmBgYHtyfQ0Kbm9zb2JyZTwtIGZpbHRlcihkYXRvcywgc3Vydml2ZT09JzAnKQ0Kbm9zb2JyZQ0KYGBgDQoNCmBgYHtyLGVjaG89VH0NCnN1bW1hcnkoc29icmUpDQpgYGANCg0KYGBge3IsIGVjaG89VH0NCnN1bW1hcnkobm9zb2JyZSkNCg0KYGBgDQoNCg0KIA0KIA==