Teoria

Distribución normal de probabilidad

La Distribución de Probabilidad Continua pueden tomar varias formas, pero un gran número de variables aleatorias observadas en la naturaleza poseen una distribución de frecuencia, que como se diría en estadística, es aproximadamente una distribución normal de probabilidad.

Formula

ƀrea

El Ɣrea bajo la curva es igual a 1 Para variables aleatorias continuas, Ɣrea = probabilidad El Ɣrea a la izquierda de la media es igual a .5 El Ɣrea a la derecha de la media es igual a .5

Porcentaje

1-pnorm(30,25.5,4.5)
## [1] 0.1586553

X

qnorm(.95,25.5,4.5)
## [1] 32.90184

Ejercicio 4

Un estudio demostró que el uso de gasolina para autos compactos vendidos en Estados Unidos estÔ distribuido normalmente, con una media de 25.5 millas per gallón (mpg) y una desviación estÔndar de 45 mpg. ¿Qué porcentaje de autos recorre 30 mpg o mÔs?

(30-25.5)/4.5
## [1] 1
1-0.8413
## [1] 0.1587
#Representa el 15.9% de autos recorre 30 mpg o mƔs

Si un fabricante desea desarrollar un auto que supere el 95% de los compactos actuales. ĀæCual debe ser el rendimiento mpg?

25.5+1.645*4.5
## [1] 32.9025
#El auto compacto debe recorrer 32.9 mpg para superar el 95% de autos actuales

Ejercico 4.1

Suponga que los diÔmetros de tallos no soportados en la base, de una especie particular de girasol, tienen una distribución normal con un diÔmetro de 35 mm y una desviación estÔndar de 3 mm.

  1. ¿Cual es la probabilidad de que una planta de girasol tenga un diÔmetro de base de mÔs de 40 mm?
z41 <- (40-35)/3
z41
## [1] 1.666667
p41 <- 1-pnorm(40,35,3)
p41
## [1] 0.04779035

Funcion de densidad de probabilidad normal

x <- 40

promedio <- 35

desviacion_estandar <- 3

x_densidad <- seq(promedio-3*desviacion_estandar, promedio+3*desviacion_estandar, length=1000)

y_densidad <- dnorm(x_densidad,promedio,desviacion_estandar)

plot(x_densidad, y_densidad,type="l", lty=1, xlab="x", ylab= "f(x)",main="Función de Densidad de Probabilidad (Normal)", col="skyblue")

Función de distribución de probabilidad (normal)

x_distribucion <- seq(promedio-3*desviacion_estandar, promedio+3*desviacion_estandar, length=1000)
y_distribucion <- pnorm(x_distribucion,promedio,desviacion_estandar)
plot(x_distribucion, y_distribucion,type="l", lty=1, xlab="x", ylab= "f(x)",main="Función de Distribución de Probabilidad (Normal)", col="skyblue")

  1. Si 2 plantas de girasol se seleccionan al azar, ¿cual es la posibilidad de que ambas plantas tengan un diÔmetro de base sé mÔs de 40 mm?
p42 <- p41*p41
p42
## [1] 0.002283918
#(1-pnorm(40,35,3)) * (1-pnorm(40,35,3))
  1. ĀæDentro de que limites esperaria usted que se encuentren los diametros de base, con probabilidad de 0.95?
p43<- 35-(1.96*3)

p43<- 35+(1.96*3)
  1. ¿Que diametro representa el 90% de la distribución de diÔmetros?
p44<- qnorm(.90,35,3)
p44
## [1] 38.84465

Shiny App para visualización de grÔfica para distribución y densidad normal

Shiny applications not supported in static R Markdown documents

Ejercicio 5

Un nuevo proceso para producir diamantes sintƩticos es rentable solo si el peso de estos es mayor a 0.5 quilates para evaluarlo se generaron con los siguientes pesos: 0.46,0.61, 0.52,0.48,0.57,0.54. El proceso es rentable? 1)Ho: m >= 0.5 / H1= m > 0.5

  1. α= 0.05

  2. Zona de aceptación

4)Estadistica de prueba

peso_diamante<- c(0.46,0.61, 0.52,0.48,0.57,0.54)
peso_diamante
## [1] 0.46 0.61 0.52 0.48 0.57 0.54
promedio <- mean(peso_diamante)
promedio
## [1] 0.53
desviacion<- sqrt(var(peso_diamante))
desviacion
## [1] 0.05585696
n<- 6

miu <- 0.5

t1<- (promedio-miu)/(desviacion/sqrt(n))
t1
## [1] 1.315587
  1. No se rechaza H0, los datos no presentan suficiente evidencia para indicar que el peso medio de los diamantes exceda los 0.5 quilates

Graficas generales de t de Studen

Función de densidad de probabilidad (t de studen)

x_densidad2<- seq(-4,4,length=1000)
y_densidad2<- dt(x_densidad2, df=5)

plot(x_densidad2, y_densidad2,type="l", lty=1, xlab="t", ylab="f(t)" , main="Función de densidad de probabilidad(t de Student)")

Función de distribución de probabilidad (t de studen)

x_densidad3<- seq(-4,4,length=1000)
y_densidad3<- pt(x_densidad3, df=5)

plot(x_densidad3, y_densidad3,type="l", lty=1, xlab="t", ylab="f(t)" , main="Función de densidad de probabilidad(t de Student)")

Ejercicio 5.1

Los desechos industriales y residuales descargados en nuestros ríos y arroyos absorben oxígeno y, por tanto, reducen la cantidad de oxígeno disuelto disponible para peces y otras formas de fauna acuÔtica. Una agencia estatal requiere un mínimo de 5 partes por millón (ppm) de oxígeno disuelto para que el contenido de oxígeno sea suficiente para sostener vida acuÔtica. Seis especímenes de agua tomados de un río en un lugar específico durante la estación de aguas bajas (julio) dio lecturas de 4.9, 5.1, 4.9, 5, 5 y 4.7 de oxígeno disuelto. ¿Los datos dan suficiente evidencia para indicar que el contenido de oxígeno disuelto es menor a 5 ppm) Pruebe usando a=.05

  1. Ho: m >= 0.5 / H1: m > 0.5

    1. α= 0.05
  2. Zona de acceptación

  3. Estadistico de prueba t

oxigeno <- c(4.9, 5.1, 4.9, 5, 5, 4.7)

promedio1 <- mean(oxigeno)
promedio1
## [1] 4.933333
desviacion1<- sqrt(var(oxigeno))
desviacion1
## [1] 0.136626
n1<- 6

miu1 <- 5

t2<- (promedio1-miu1)/(desviacion1/sqrt(n1))
t2
## [1] -1.195229
  1. No se rechaza

Winsorization vs Trimming

error_peso_diamante<- c(0.46,0.61, 0.52,0.48,0.57,54)
boxplot(error_peso_diamante, horizontal=TRUE)
library(DescTools)

peso_diamante_winsorize <- Winsorize(error_peso_diamante, 0.10)
peso_diamante_winsorize
## [1]  0.4600  0.6100  0.5200  0.4800  0.5700 40.6525
peso_diamante_trim <- Trim(error_peso_diamante, 1)
peso_diamante_trim
## [1] 0.61 0.52 0.48 0.57
## attr(,"trim")
## [1] 1 6
LS0tCnRpdGxlOiAiQWN0aXZpZGFkIDMuMl9EaXN0cmlidWNpw7NuIE5vcm1hbCIKYXV0aG9yOiAiRmVybmFuZG8gTW9yYWxlcyBEaWFydGVfQTAxNzQwNTY3IgpkYXRlOiAiMjAyMy0wOC0yOCIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiAiY29zbW8iCi0tLQohW10oL1VzZXJzL3NwZWVkeW1kMjMvRGVza3RvcC9mb3Rvc19yL2Rpc3Rub3JtLmdpZikKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIyMgKipUZW9yaWEqKgojIyMgKipEaXN0cmlidWNpw7NuIG5vcm1hbCBkZSBwcm9iYWJpbGlkYWQqKgpMYSAqKkRpc3RyaWJ1Y2nDs24gZGUgUHJvYmFiaWxpZGFkIENvbnRpbnVhKiogcHVlZGVuIHRvbWFyIHZhcmlhcyBmb3JtYXMsIHBlcm8gdW4gZ3JhbiBuw7ptZXJvIGRlIHZhcmlhYmxlcyBhbGVhdG9yaWFzIG9ic2VydmFkYXMgZW4gbGEgbmF0dXJhbGV6YSBwb3NlZW4gdW5hIGRpc3RyaWJ1Y2nDs24gZGUgZnJlY3VlbmNpYSwgcXVlIGNvbW8gc2UgZGlyw61hIGVuIGVzdGFkw61zdGljYSwgZXMgYXByb3hpbWFkYW1lbnRlIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBkZSBwcm9iYWJpbGlkYWQuCgojIyMgKipGb3JtdWxhKioKIVtdKC9Vc2Vycy9zcGVlZHltZDIzL0Rlc2t0b3AvZm90b3Nfci9SZXYgQ2hpbCBBbmVzdCAyMDE0LmpwZWcpCgojIyMgKirDgHJlYSoqCkVsIMOhcmVhIGJham8gbGEgY3VydmEgZXMgaWd1YWwgYSAxClBhcmEgdmFyaWFibGVzIGFsZWF0b3JpYXMgY29udGludWFzLCDDoXJlYSA9IHByb2JhYmlsaWRhZApFbCDDoXJlYSBhIGxhIGl6cXVpZXJkYSBkZSBsYSBtZWRpYSBlcyBpZ3VhbCBhIC41CkVsIMOhcmVhIGEgbGEgZGVyZWNoYSBkZSBsYSBtZWRpYSBlcyBpZ3VhbCBhIC41CgohW10oL1VzZXJzL3NwZWVkeW1kMjMvRGVza3RvcC9mb3Rvc19yL0N1cnZhLmpwZWcpCgojIyMgKipQb3JjZW50YWplKioKYGBge3J9CjEtcG5vcm0oMzAsMjUuNSw0LjUpCmBgYAoKIyMjICoqWCoqCmBgYHtyfQpxbm9ybSguOTUsMjUuNSw0LjUpCmBgYAojIyAqKkVqZXJjaWNpbyA0KioKVW4gZXN0dWRpbyBkZW1vc3Ryw7MgcXVlIGVsIHVzbyBkZSBnYXNvbGluYSBwYXJhIGF1dG9zIGNvbXBhY3RvcyB2ZW5kaWRvcyBlbiBFc3RhZG9zIFVuaWRvcyBlc3TDoSBkaXN0cmlidWlkbyBub3JtYWxtZW50ZSwgY29uIHVuYSBtZWRpYSBkZSAyNS41IG1pbGxhcyBwZXIgZ2FsbMOzbiAobXBnKSB5IHVuYSBkZXN2aWFjacOzbiBlc3TDoW5kYXIgZGUgNDUgbXBnLiDCv1F1w6kgcG9yY2VudGFqZSBkZSBhdXRvcyByZWNvcnJlIDMwIG1wZyBvIG3DoXM/CmBgYHtyfQooMzAtMjUuNSkvNC41CjEtMC44NDEzCiNSZXByZXNlbnRhIGVsIDE1LjklIGRlIGF1dG9zIHJlY29ycmUgMzAgbXBnIG8gbcOhcwpgYGAKU2kgdW4gZmFicmljYW50ZSBkZXNlYSBkZXNhcnJvbGxhciB1biBhdXRvIHF1ZSBzdXBlcmUgZWwgOTUlIGRlIGxvcyBjb21wYWN0b3MgYWN0dWFsZXMuIMK/Q3VhbCBkZWJlIHNlciBlbCByZW5kaW1pZW50byBtcGc/CmBgYHtyfQoyNS41KzEuNjQ1KjQuNQoKI0VsIGF1dG8gY29tcGFjdG8gZGViZSByZWNvcnJlciAzMi45IG1wZyBwYXJhIHN1cGVyYXIgZWwgOTUlIGRlIGF1dG9zIGFjdHVhbGVzCmBgYAoKCiMjICoqRWplcmNpY28gNC4xKioKU3Vwb25nYSBxdWUgbG9zIGRpw6FtZXRyb3MgZGUgdGFsbG9zIG5vIHNvcG9ydGFkb3MgZW4gbGEgYmFzZSwgZGUgdW5hIGVzcGVjaWUgcGFydGljdWxhciBkZSBnaXJhc29sLCB0aWVuZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIGNvbiB1biBkacOhbWV0cm8gZGUgMzUgbW0geSB1bmEgZGVzdmlhY2nDs24gZXN0w6FuZGFyIGRlIDMgbW0uCgphKSDCv0N1YWwgZXMgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSB1bmEgcGxhbnRhIGRlIGdpcmFzb2wgdGVuZ2EgdW4gZGnDoW1ldHJvIGRlIGJhc2UgZGUgbcOhcyBkZSA0MCBtbT8KCmBgYHtyfQp6NDEgPC0gKDQwLTM1KS8zCno0MQpwNDEgPC0gMS1wbm9ybSg0MCwzNSwzKQpwNDEKYGBgCgojIyMgKipGdW5jaW9uIGRlIGRlbnNpZGFkIGRlIHByb2JhYmlsaWRhZCBub3JtYWwqKgpgYGB7cn0KeCA8LSA0MAoKcHJvbWVkaW8gPC0gMzUKCmRlc3ZpYWNpb25fZXN0YW5kYXIgPC0gMwoKeF9kZW5zaWRhZCA8LSBzZXEocHJvbWVkaW8tMypkZXN2aWFjaW9uX2VzdGFuZGFyLCBwcm9tZWRpbyszKmRlc3ZpYWNpb25fZXN0YW5kYXIsIGxlbmd0aD0xMDAwKQoKeV9kZW5zaWRhZCA8LSBkbm9ybSh4X2RlbnNpZGFkLHByb21lZGlvLGRlc3ZpYWNpb25fZXN0YW5kYXIpCgpwbG90KHhfZGVuc2lkYWQsIHlfZGVuc2lkYWQsdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ4IiwgeWxhYj0gImYoeCkiLG1haW49IkZ1bmNpw7NuIGRlIERlbnNpZGFkIGRlIFByb2JhYmlsaWRhZCAoTm9ybWFsKSIsIGNvbD0ic2t5Ymx1ZSIpCmBgYAoKCiMjIyAqKkZ1bmNpw7NuIGRlIGRpc3RyaWJ1Y2nDs24gZGUgcHJvYmFiaWxpZGFkIChub3JtYWwpKioKYGBge3J9CnhfZGlzdHJpYnVjaW9uIDwtIHNlcShwcm9tZWRpby0zKmRlc3ZpYWNpb25fZXN0YW5kYXIsIHByb21lZGlvKzMqZGVzdmlhY2lvbl9lc3RhbmRhciwgbGVuZ3RoPTEwMDApCnlfZGlzdHJpYnVjaW9uIDwtIHBub3JtKHhfZGlzdHJpYnVjaW9uLHByb21lZGlvLGRlc3ZpYWNpb25fZXN0YW5kYXIpCnBsb3QoeF9kaXN0cmlidWNpb24sIHlfZGlzdHJpYnVjaW9uLHR5cGU9ImwiLCBsdHk9MSwgeGxhYj0ieCIsIHlsYWI9ICJmKHgpIixtYWluPSJGdW5jacOzbiBkZSBEaXN0cmlidWNpw7NuIGRlIFByb2JhYmlsaWRhZCAoTm9ybWFsKSIsIGNvbD0ic2t5Ymx1ZSIpCmBgYAoKCmIpIFNpIDIgcGxhbnRhcyBkZSBnaXJhc29sIHNlIHNlbGVjY2lvbmFuIGFsIGF6YXIsIMK/Y3VhbCBlcyBsYSBwb3NpYmlsaWRhZCBkZSBxdWUgYW1iYXMgcGxhbnRhcyB0ZW5nYW4gdW4gZGnDoW1ldHJvIGRlIGJhc2Ugc8OpIG3DoXMgZGUgNDAgbW0/CmBgYHtyfQpwNDIgPC0gcDQxKnA0MQpwNDIKIygxLXBub3JtKDQwLDM1LDMpKSAqICgxLXBub3JtKDQwLDM1LDMpKQpgYGAKCmMpIMK/RGVudHJvIGRlIHF1ZSBsaW1pdGVzIGVzcGVyYXJpYSB1c3RlZCBxdWUgc2UgZW5jdWVudHJlbiBsb3MgZGlhbWV0cm9zIGRlIGJhc2UsIGNvbiBwcm9iYWJpbGlkYWQgZGUgMC45NT8KYGBge3J9CnA0MzwtIDM1LSgxLjk2KjMpCgpwNDM8LSAzNSsoMS45NiozKQpgYGAKCmQpIMK/UXVlIGRpYW1ldHJvIHJlcHJlc2VudGEgZWwgOTAlIGRlIGxhIGRpc3RyaWJ1Y2nDs24gZGUgZGnDoW1ldHJvcz8KYGBge3J9CnA0NDwtIHFub3JtKC45MCwzNSwzKQpwNDQKYGBgCgojIyAqKlNoaW55IEFwcCBwYXJhIHZpc3VhbGl6YWNpw7NuIGRlIGdyw6FmaWNhIHBhcmEgZGlzdHJpYnVjacOzbiB5IGRlbnNpZGFkIG5vcm1hbCoqCmBgYHtyLCBlY2hvPUZBTFNFfQpsaWJyYXJ5KHNoaW55KQpsaWJyYXJ5KHNoaW55dGhlbWVzKQpzaGlueUFwcCgKCnVpIDwtIGZsdWlkUGFnZSh0aGVtZSA9IHNoaW55dGhlbWUoImNlcnVsZWFuIiksCiAgICAgICAgICAgICAgICBuYXZiYXJQYWdlKCJBcGxpY2FjaW9uZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJQYW5lbCgiRGlzdHJpYnVjacOzbiBOb3JtYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGViYXJQYW5lbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MkaDMoIkluZ3Jlc2EgbG9zIHNpZ3VpZW50ZXMgZGF0b3M6IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljSW5wdXQoInhfZnVuY2lvbiIsIng6IiwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljSW5wdXQoInByb21lZGlvMSIsInByb21lZGlvOiIsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY0lucHV0KCJkZXNfZXN0IiwiRGVzdmlhY2nDs24gRXN0YW5kYXI6IiwgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluUGFuZWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSgiRnVuY2nDs24gZGUgRGlzdHJpYnVjacOzbiB5IERlbnNpZGFkIE5vcm1hbCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdE91dHB1dCgiZGVuc2lkYWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RPdXRwdXQoImRpc3RyaWJ1Y2lvbjEiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiUGFuZWwoIlRhYiAyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYlBhbmVsKCJUYWIgMyIpCiAgICAgICAgICAgICAgICApCiksICAgCnNlcnZlciA8LSBmdW5jdGlvbihpbnB1dCwgb3V0cHV0KSB7CiAgb3V0cHV0JGRlbnNpZGFkIDwtIHJlbmRlclBsb3QoewogICAgeF9kZW5zaWRhZDEgPC0gc2VxKGlucHV0JHByb21lZGlvMS0zKmlucHV0JGRlc19lc3QsIGlucHV0JHByb21lZGlvMSszKmlucHV0JGRlc19lc3QsIGxlbmd0aD0xMDAwKQogICAgeV9kZW5zaWRhZDEgPC0gZG5vcm0oeF9kZW5zaWRhZDEsaW5wdXQkcHJvbWVkaW8xLGlucHV0JGRlc19lc3QpCiAgICBkZW5zaWRhZDwtIHBsb3QoeF9kZW5zaWRhZDEsIHlfZGVuc2lkYWQxLHR5cGU9ImwiLCBsdHk9MSwgeGxhYj0ieCIsIHlsYWI9ICJmKHgpIixtYWluPSJGdW5jacOzbiBkZSBEZW5zaWRhZCBkZSBQcm9iYWJpbGlkYWQgKE5vcm1hbCkiLCBjb2w9InNreWJsdWUiKQogICAgfSkKICBvdXRwdXQkZGlzdHJpYnVjaW9uMSA8LSByZW5kZXJQbG90KHsKICAgIHhfZGlzdHJpYnVjaW9uMSA8LSBzZXEoaW5wdXQkcHJvbWVkaW8xLTMqaW5wdXQkZGVzX2VzdCwgaW5wdXQkcHJvbWVkaW8xKzMqaW5wdXQkZGVzX2VzdCwgbGVuZ3RoPTEwMDApCiAgICB5X2Rpc3RyaWJ1Y2lvbjEgPC0gcG5vcm0oeF9kaXN0cmlidWNpb24xLGlucHV0JHByb21lZGlvMSxpbnB1dCRkZXNfZXN0KQogICAgZGlzdHJpYnVjaW9uMSA8LXBsb3QoeF9kaXN0cmlidWNpb24xLCB5X2Rpc3RyaWJ1Y2lvbjEsdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ4IiwgeWxhYj0gImYoeCkiLG1haW49IkZ1bmNpw7NuIGRlIERpc3RyaWJ1Y2nDs24gZGUgUHJvYmFiaWxpZGFkIChOb3JtYWwpIiwgY29sPSJyZWQiKQogICAgCiAgfSkKfSkKYGBgCgojIyBFamVyY2ljaW8gNQpVbiBudWV2byBwcm9jZXNvIHBhcmEgcHJvZHVjaXIgZGlhbWFudGVzIHNpbnTDqXRpY29zIGVzIHJlbnRhYmxlIHNvbG8gc2kgZWwgcGVzbyBkZSBlc3RvcyBlcyBtYXlvciBhIDAuNSBxdWlsYXRlcyBwYXJhIGV2YWx1YXJsbyBzZSBnZW5lcmFyb24gY29uIGxvcyBzaWd1aWVudGVzIHBlc29zOiAwLjQ2LDAuNjEsIDAuNTIsMC40OCwwLjU3LDAuNTQuCkVsIHByb2Nlc28gZXMgcmVudGFibGU/CjEpSG86IG0gPj0gMC41IC8gSDE9IG0gPiAwLjUKCjIpIM6xPSAwLjA1CgozKSBab25hIGRlIGFjZXB0YWNpw7NuCiFbXSgvVXNlcnMvc3BlZWR5bWQyMy9EZXNrdG9wL0FuYWxpc2lzIGRlIGRhdG9zIC0gY29uY2VudHJhY2lvzIFuL01vZCAzL09uZVRhaWwuanBnKQoKNClFc3RhZGlzdGljYSBkZSBwcnVlYmEKYGBge3J9CnBlc29fZGlhbWFudGU8LSBjKDAuNDYsMC42MSwgMC41MiwwLjQ4LDAuNTcsMC41NCkKcGVzb19kaWFtYW50ZQpwcm9tZWRpbyA8LSBtZWFuKHBlc29fZGlhbWFudGUpCnByb21lZGlvCmRlc3ZpYWNpb248LSBzcXJ0KHZhcihwZXNvX2RpYW1hbnRlKSkKZGVzdmlhY2lvbgoKbjwtIDYKCm1pdSA8LSAwLjUKCnQxPC0gKHByb21lZGlvLW1pdSkvKGRlc3ZpYWNpb24vc3FydChuKSkKdDEKCmBgYAo1KSBObyBzZSByZWNoYXphIEgwLCBsb3MgZGF0b3Mgbm8gcHJlc2VudGFuIHN1ZmljaWVudGUgZXZpZGVuY2lhIHBhcmEgaW5kaWNhciBxdWUgZWwgcGVzbyBtZWRpbyBkZSBsb3MgZGlhbWFudGVzIGV4Y2VkYSBsb3MgMC41IHF1aWxhdGVzCgojIyBHcmFmaWNhcyBnZW5lcmFsZXMgZGUgdCBkZSBTdHVkZW4KIyMjIEZ1bmNpw7NuIGRlIGRlbnNpZGFkIGRlIHByb2JhYmlsaWRhZCAodCBkZSBzdHVkZW4pCmBgYHtyfQp4X2RlbnNpZGFkMjwtIHNlcSgtNCw0LGxlbmd0aD0xMDAwKQp5X2RlbnNpZGFkMjwtIGR0KHhfZGVuc2lkYWQyLCBkZj01KQoKcGxvdCh4X2RlbnNpZGFkMiwgeV9kZW5zaWRhZDIsdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ0IiwgeWxhYj0iZih0KSIgLCBtYWluPSJGdW5jacOzbiBkZSBkZW5zaWRhZCBkZSBwcm9iYWJpbGlkYWQodCBkZSBTdHVkZW50KSIpCmBgYAoKIyMjIEZ1bmNpw7NuIGRlIGRpc3RyaWJ1Y2nDs24gZGUgcHJvYmFiaWxpZGFkICh0IGRlIHN0dWRlbikKYGBge3J9CnhfZGVuc2lkYWQzPC0gc2VxKC00LDQsbGVuZ3RoPTEwMDApCnlfZGVuc2lkYWQzPC0gcHQoeF9kZW5zaWRhZDMsIGRmPTUpCgpwbG90KHhfZGVuc2lkYWQzLCB5X2RlbnNpZGFkMyx0eXBlPSJsIiwgbHR5PTEsIHhsYWI9InQiLCB5bGFiPSJmKHQpIiAsIG1haW49IkZ1bmNpw7NuIGRlIGRlbnNpZGFkIGRlIHByb2JhYmlsaWRhZCh0IGRlIFN0dWRlbnQpIikKYGBgCgojIyMgRWplcmNpY2lvIDUuMQpMb3MgZGVzZWNob3MgaW5kdXN0cmlhbGVzIHkgcmVzaWR1YWxlcyBkZXNjYXJnYWRvcyBlbiBudWVzdHJvcyByw61vcyB5IGFycm95b3MgYWJzb3JiZW4gb3jDrWdlbm8geSwgcG9yIHRhbnRvLCByZWR1Y2VuIGxhIGNhbnRpZGFkIGRlIG94w61nZW5vIGRpc3VlbHRvIGRpc3BvbmlibGUgcGFyYSBwZWNlcyB5IG90cmFzIGZvcm1hcyBkZSBmYXVuYSBhY3XDoXRpY2EuIFVuYSBhZ2VuY2lhIGVzdGF0YWwgcmVxdWllcmUgdW4gbcOtbmltbyBkZSA1IHBhcnRlcyBwb3IgbWlsbMOzbiAocHBtKSBkZSBveMOtZ2VubyBkaXN1ZWx0byBwYXJhIHF1ZSBlbCBjb250ZW5pZG8gZGUgb3jDrWdlbm8gc2VhIHN1ZmljaWVudGUgcGFyYSBzb3N0ZW5lciB2aWRhIGFjdcOhdGljYS4gU2VpcyBlc3BlY8OtbWVuZXMgZGUgYWd1YSB0b21hZG9zIGRlIHVuIHLDrW8gZW4gdW4gbHVnYXIgZXNwZWPDrWZpY28gZHVyYW50ZSBsYSBlc3RhY2nDs24gZGUgYWd1YXMgYmFqYXMgKGp1bGlvKSBkaW8gbGVjdHVyYXMgZGUgNC45LCA1LjEsIDQuOSwgNSwgNSB5IDQuNyBkZSBveMOtZ2VubyBkaXN1ZWx0by4gwr9Mb3MgZGF0b3MgZGFuIHN1ZmljaWVudGUgZXZpZGVuY2lhIHBhcmEgaW5kaWNhciBxdWUgZWwgY29udGVuaWRvIGRlIG94w61nZW5vIGRpc3VlbHRvIGVzIG1lbm9yIGEgNSBwcG0pIFBydWViZSB1c2FuZG8gYT0uMDUKCjEpIEhvOiBtID49IDAuNSAvIEgxOiBtID4gMC41CgoyKSAyKSDOsT0gMC4wNQoKMykgWm9uYSBkZSBhY2NlcHRhY2nDs24KIVtdKC9Vc2Vycy9zcGVlZHltZDIzL0Rlc2t0b3AvQW5hbGlzaXMgZGUgZGF0b3MgLSBjb25jZW50cmFjaW/MgW4vTW9kIDMvT25lVGFpbC5qcGcpCgo0KSBFc3RhZGlzdGljbyBkZSBwcnVlYmEgdApgYGB7cn0Kb3hpZ2VubyA8LSBjKDQuOSwgNS4xLCA0LjksIDUsIDUsIDQuNykKCnByb21lZGlvMSA8LSBtZWFuKG94aWdlbm8pCnByb21lZGlvMQpkZXN2aWFjaW9uMTwtIHNxcnQodmFyKG94aWdlbm8pKQpkZXN2aWFjaW9uMQpuMTwtIDYKCm1pdTEgPC0gNQoKdDI8LSAocHJvbWVkaW8xLW1pdTEpLyhkZXN2aWFjaW9uMS9zcXJ0KG4xKSkKdDIKYGBgCgo1KSBObyBzZSByZWNoYXphCgojIyBXaW5zb3JpemF0aW9uIHZzIFRyaW1taW5nCmBgYHtyfQplcnJvcl9wZXNvX2RpYW1hbnRlPC0gYygwLjQ2LDAuNjEsIDAuNTIsMC40OCwwLjU3LDU0KQpib3hwbG90KGVycm9yX3Blc29fZGlhbWFudGUsIGhvcml6b250YWw9VFJVRSkKbGlicmFyeShEZXNjVG9vbHMpCgpwZXNvX2RpYW1hbnRlX3dpbnNvcml6ZSA8LSBXaW5zb3JpemUoZXJyb3JfcGVzb19kaWFtYW50ZSwgMC4xMCkKcGVzb19kaWFtYW50ZV93aW5zb3JpemUKCnBlc29fZGlhbWFudGVfdHJpbSA8LSBUcmltKGVycm9yX3Blc29fZGlhbWFudGUsIDEpCnBlc29fZGlhbWFudGVfdHJpbQpgYGAKCgo=