DESCRIPCION DE EJERCICIO
#Para la economía de los primigenios, en la ciudad de R'lyeh, el vector de rentas es (100,200,300,400,700), (en unidades monetarias: u.m.) el cual es ponderado por el siguiente vector de población (50,35,55,35,10) (en individuos)
#a) Calcule el coeficiente de Gini de la ciudad de R'lyeh
#b) El alcalde de R'lyeh el "Gran Primigenio Cthulhu" ha propuesto una transferencia del gobierno de 15% sobre el monto de las rentas de hasta 200 u.m. y un impuesto sobre la renta del 5% para las rentas superiores a las 200 u.m. ¿La desigualdad en R'lyeh aumenta o disminuye? argumente su respuesta con el nuevo coeficiente de Gini, para la distribución de la renta derivada de las políticas del primigenio alcalde, descritas en el literal b)
#c) La severidad de la pobreza (FGT2) aumenta o disminuye con la política del primigenio alcalde, descrita en el literal b), argumente su respuesta
#d) De acuerdo a al indicador de Kuznet, hay cambios evidentes entre el 10% más rico y el 40% más pobre de la ciudad de R'lyeh, con la implementación de la política del primigenio alcalde, ya descrita con anterioridad. Argumente su respuesta
a) Calcule el coeficiente de Gini de la ciudad de R’lyeh
options(scipen = 999999)
gini_debraj_ray <- function(vector_renta, vector_poblacion) {
# Generación del Dataframe para el cálculo
library(dplyr)
df_y <- expand.grid(vector_renta, vector_renta)
names(df_y) <- c("Yj", "Yk")
df_n <- expand.grid(vector_poblacion, vector_poblacion)
names(df_n) <- c("Nj", "Nk")
gini_data <- bind_cols(df_n, df_y)
# Cálculo del doble sumatorio
renta_media(vector_renta = vector_renta,
vector_poblacion=vector_poblacion)->mu
N<-sum(vector_poblacion)
gini_data %>% mutate(doble_sum = Nj * Nk * abs(Yj - Yk)) -> gini_data
gini_data %>% summarise(Gini=(1/(2*mu*N^2))*sum(doble_sum)) %>% select(Gini)->Gini
list(gini_data=gini_data,mu=mu,N=N,Gini=Gini[,1])
}
#Data original
g1<-gini_debraj_ray(vector_renta = y,vector_poblacion = n)
print(g1)
## $gini_data
## Nj Nk Yj Yk doble_sum
## 1 50 50 100 100 0
## 2 35 50 200 100 175000
## 3 55 50 300 100 550000
## 4 35 50 400 100 525000
## 5 10 50 700 100 300000
## 6 50 35 100 200 175000
## 7 35 35 200 200 0
## 8 55 35 300 200 192500
## 9 35 35 400 200 245000
## 10 10 35 700 200 175000
## 11 50 55 100 300 550000
## 12 35 55 200 300 192500
## 13 55 55 300 300 0
## 14 35 55 400 300 192500
## 15 10 55 700 300 220000
## 16 50 35 100 400 525000
## 17 35 35 200 400 245000
## 18 55 35 300 400 192500
## 19 35 35 400 400 0
## 20 10 35 700 400 105000
## 21 50 10 100 700 300000
## 22 35 10 200 700 175000
## 23 55 10 300 700 220000
## 24 35 10 400 700 105000
## 25 10 10 700 700 0
##
## $mu
## [1] 267.5676
##
## $N
## [1] 185
##
## $Gini
## [1] 0.2926563
b) El alcalde de R’lyeh el “Gran Primigenio Cthulhu” ha propuesto
una transferencia del gobierno de 15% sobre el monto de las rentas de
hasta 200 u.m. y un impuesto sobre la renta del 5% para las rentas
superiores a las 200 u.m. ¿La desigualdad en R’lyeh aumenta o disminuye?
argumente su respuesta con el nuevo coeficiente de Gini, para la
distribución de la renta derivada de las políticas del primigenio
alcalde, descritas en el literal b)
Se calcula nuevamente el GINI con las politicas del alcalde de
R’lyeh
options(scipen = 999999)
gini_debraj_ray <- function(vector_renta, vector_poblacion) {
# Generación del Dataframe para el cálculo
library(dplyr)
df_y <- expand.grid(vector_renta, vector_renta)
names(df_y) <- c("Yj", "Yk")
df_n <- expand.grid(vector_poblacion, vector_poblacion)
names(df_n) <- c("Nj", "Nk")
gini_data <- bind_cols(df_n, df_y)
# Cálculo del doble sumatorio
renta_media(vector_renta = vector_renta,
vector_poblacion=vector_poblacion)->mu
N<-sum(vector_poblacion)
gini_data %>% mutate(doble_sum = Nj * Nk * abs(Yj - Yk)) -> gini_data
gini_data %>% summarise(Gini=(1/(2*mu*N^2))*sum(doble_sum)) %>% select(Gini)->Gini
list(gini_data=gini_data,mu=mu,N=N,Gini=Gini[,1])
}
#Data original
g2<-gini_debraj_ray(vector_renta = y2,vector_poblacion = n2)
print(g2)
## $gini_data
## Nj Nk Yj Yk doble_sum
## 1 50 50 115.0000 115.0000 0.0
## 2 35 50 230.0000 115.0000 201250.0
## 3 55 50 285.7143 115.0000 469464.3
## 4 35 50 380.9524 115.0000 465416.7
## 5 10 50 666.6667 115.0000 275833.3
## 6 50 35 115.0000 230.0000 201250.0
## 7 35 35 230.0000 230.0000 0.0
## 8 55 35 285.7143 230.0000 107250.0
## 9 35 35 380.9524 230.0000 184916.7
## 10 10 35 666.6667 230.0000 152833.3
## 11 50 55 115.0000 285.7143 469464.3
## 12 35 55 230.0000 285.7143 107250.0
## 13 55 55 285.7143 285.7143 0.0
## 14 35 55 380.9524 285.7143 183333.3
## 15 10 55 666.6667 285.7143 209523.8
## 16 50 35 115.0000 380.9524 465416.7
## 17 35 35 230.0000 380.9524 184916.7
## 18 55 35 285.7143 380.9524 183333.3
## 19 35 35 380.9524 380.9524 0.0
## 20 10 35 666.6667 380.9524 100000.0
## 21 50 10 115.0000 666.6667 275833.3
## 22 35 10 230.0000 666.6667 152833.3
## 23 55 10 285.7143 666.6667 209523.8
## 24 35 10 380.9524 666.6667 100000.0
## 25 10 10 666.6667 666.6667 0.0
##
## $mu
## [1] 267.6448
##
## $N
## [1] 185
##
## $Gini
## [1] 0.2565267
#En este caso con la transferencia del gobierno del 15% a las rentas de hasta 200 u.m. y con el impuesto del 5% a las rentas superiores a las 200 u.m., se puede concluir que la desigualdad ha disminuido en la ciudad de R'lyeh, es decir, ahora es mas equitativo la distribución del ingres ya que se pasa de un Gini de 0.2926563 a 0.2565267.
c) La severidad de la pobreza (FGT2) aumenta o disminuye con la
política del primigenio alcalde, descrita en el literal b), argumente su
respuesta
Sin politicas de redistribucion del ingreso
Kuznets.X.Y <- function(vector_renta,
vector_poblacion = 1,
cuantil_x,
cuantil_y) {
library(purrr)
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(cuantil_x)) -> Pob.X
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(1-cuantil_y)) -> Pob.Y
list(Kuznets.indice=unname(Pob.Y/Pob.X),Pob.X=Pob.X,Pob.Y=Pob.Y)
}
# Ejemplo de uso
Kuznets.X.Y(vector_renta = y,vector_poblacion = n,cuantil_x = 0.2,cuantil_y =0.2)
## $Kuznets.indice
## [1] 4
##
## $Pob.X
## 20%
## 100
##
## $Pob.Y
## 80%
## 400
Con politicas de redistribucion del ingreso
Kuznets.X.Y <- function(vector_renta,
vector_poblacion = 1,
cuantil_x,
cuantil_y) {
library(purrr)
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(cuantil_x)) -> Pob.X
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(1-cuantil_y)) -> Pob.Y
list(Kuznets.indice=unname(Pob.Y/Pob.X),Pob.X=Pob.X,Pob.Y=Pob.Y)
}
# Ejemplo de uso
Kuznets.X.Y(vector_renta = y2,vector_poblacion = n2,cuantil_x = 0.2,cuantil_y =0.2)
## $Kuznets.indice
## [1] 3.312629
##
## $Pob.X
## 20%
## 115
##
## $Pob.Y
## 80%
## 380.9524
#En este punto se puede argumentar que la severidad de la pobreza disminuye ya que en el primer caso, cuando no se han aplicado las politicas de redistribucion del ingreso por cada u.m. que recibe el 20% mas pobre, le ingresan 3.47 u.m. al 20% mas rico.
#posterior a la aplicación de las politicas de redistribucion del ingreso se tiene que por cada u.m. que recibe el 20% mas pobre, le ingresan 3.3126 u.m. al 20% mas rico.
d) De acuerdo a al indicador de Kuznet, hay cambios evidentes entre
el 10% más rico y el 40% más pobre de la ciudad de R’lyeh, con la
implementación de la política del primigenio alcalde, ya descrita con
anterioridad. Argumente su respuesta
Sin la politica del alcalde de R’lyeh
Kuznets.X.Y <- function(vector_renta,
vector_poblacion = 1,
cuantil_x,
cuantil_y) {
library(purrr)
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(cuantil_x)) -> Pob.X
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(1-cuantil_y)) -> Pob.Y
list(Kuznets.indice=unname(Pob.Y/Pob.X),Pob.X=Pob.X,Pob.Y=Pob.Y)
}
# Ejemplo de uso
Kuznets.X.Y(vector_renta = y,vector_poblacion = n,cuantil_x = 0.4,cuantil_y =0.1)
## $Kuznets.indice
## [1] 2
##
## $Pob.X
## 40%
## 200
##
## $Pob.Y
## 90%
## 400
Con la politica del alcalde de R’lyeh
Kuznets.X.Y <- function(vector_renta,
vector_poblacion = 1,
cuantil_x,
cuantil_y) {
library(purrr)
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(cuantil_x)) -> Pob.X
map2(vector_renta, vector_poblacion, .f = rep) %>%
unlist() %>% quantile(probs = c(1-cuantil_y)) -> Pob.Y
list(Kuznets.indice=unname(Pob.Y/Pob.X),Pob.X=Pob.X,Pob.Y=Pob.Y)
}
# Ejemplo de uso
Kuznets.X.Y(vector_renta = y2,vector_poblacion = n2,cuantil_x = 0.4,cuantil_y =0.1)
## $Kuznets.indice
## [1] 1.656315
##
## $Pob.X
## 40%
## 230
##
## $Pob.Y
## 90%
## 380.9524
#En este punto se puede argumentar que hay un mejor balance en el ingreso, ya que sin la politca del alcalde por cada u.m. que recibe el 40% mas pobre, le ingresan 2 u.m. al 10% mas rico.
#Ya con la implementacion de la politica del alcalde por cada u.m. que recibe el 40% mas pobre, la cantidad que recibe el 10% mas rico disminuye de 2 a 1.65 u.m., haciendo mas equitativo la distribucion del ingreso.
LS0tDQp0aXRsZTogIkVqZXJjaWNpbyBQcsOhY3RpY28gRUREIg0KYXV0aG9yOiAiSm9zdcOpIE5haHVtIEFtYXlhIEZsb3JlcyBBRjE2MDEwIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCi0tLQ0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmBgYA0KDQojIyBERVNDUklQQ0lPTiBERSBFSkVSQ0lDSU8NCmBgYHtyfQ0KI1BhcmEgbGEgZWNvbm9tw61hIGRlIGxvcyBwcmltaWdlbmlvcywgZW4gbGEgY2l1ZGFkIGRlIFInbHllaCwgIGVsIHZlY3RvciBkZSByZW50YXMgZXMgKDEwMCwyMDAsMzAwLDQwMCw3MDApLCAoZW4gdW5pZGFkZXMgbW9uZXRhcmlhczogdS5tLikgZWwgY3VhbCBlcyBwb25kZXJhZG8gcG9yIGVsIHNpZ3VpZW50ZSB2ZWN0b3IgZGUgcG9ibGFjacOzbiAoNTAsMzUsNTUsMzUsMTApIChlbiBpbmRpdmlkdW9zKQ0KDQojYSkgQ2FsY3VsZSBlbCBjb2VmaWNpZW50ZSBkZSBHaW5pIGRlIGxhIGNpdWRhZCBkZSBSJ2x5ZWgNCg0KI2IpIEVsIGFsY2FsZGUgZGUgUidseWVoICBlbCAiR3JhbiAgUHJpbWlnZW5pbyBDdGh1bGh1IiBoYSBwcm9wdWVzdG8gdW5hIHRyYW5zZmVyZW5jaWEgZGVsIGdvYmllcm5vIGRlIDE1JSBzb2JyZSBlbCBtb250byBkZSBsYXMgcmVudGFzIGRlIGhhc3RhIDIwMCB1Lm0uIHkgdW4gaW1wdWVzdG8gc29icmUgbGEgcmVudGEgZGVsIDUlIHBhcmEgbGFzIHJlbnRhcyBzdXBlcmlvcmVzIGEgbGFzIDIwMCB1Lm0uIMK/TGEgZGVzaWd1YWxkYWQgZW4gUidseWVoICBhdW1lbnRhIG8gZGlzbWludXllPyBhcmd1bWVudGUgc3UgcmVzcHVlc3RhIGNvbiBlbCBudWV2byBjb2VmaWNpZW50ZSBkZSBHaW5pLCBwYXJhIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgcmVudGEgIGRlcml2YWRhIGRlIGxhcyBwb2zDrXRpY2FzIGRlbCBwcmltaWdlbmlvIGFsY2FsZGUsIGRlc2NyaXRhcyBlbiBlbCBsaXRlcmFsIGIpDQoNCiNjKSBMYSBzZXZlcmlkYWQgZGUgbGEgcG9icmV6YSAoRkdUMikgYXVtZW50YSBvIGRpc21pbnV5ZSBjb24gbGEgcG9sw610aWNhIGRlbCBwcmltaWdlbmlvIGFsY2FsZGUsIGRlc2NyaXRhIGVuIGVsIGxpdGVyYWwgYiksIGFyZ3VtZW50ZSBzdSByZXNwdWVzdGEgDQoNCg0KI2QpIERlIGFjdWVyZG8gYSBhbCBpbmRpY2Fkb3IgZGUgS3V6bmV0LCBoYXkgY2FtYmlvcyBldmlkZW50ZXMgZW50cmUgZWwgMTAlIG3DoXMgcmljbyB5IGVsIDQwJSBtw6FzIHBvYnJlIGRlIGxhIGNpdWRhZCBkZSBSJ2x5ZWgsIGNvbiBsYSBpbXBsZW1lbnRhY2nDs24gZGUgbGEgcG9sw610aWNhIGRlbCBwcmltaWdlbmlvIGFsY2FsZGUsIHlhIGRlc2NyaXRhIGNvbiBhbnRlcmlvcmlkYWQuIEFyZ3VtZW50ZSBzdSByZXNwdWVzdGENCg0KDQpgYGANCg0KIyMjIyBDYWxjdWxvIGRlIGxhIFJlbnRhIG1lZGlhDQoNCmBgYHtyfQ0KeSA8LSBjKDEwMCwgMjAwLCAzMDAsIDQwMCw3MDApDQpuIDwtIGMoNTAsIDM1LCA1NSwgMzUsMTApDQojQ8OhbGN1bG8gZGUgbGEgcmVudGEgbWVkaWENCnJlbnRhX21lZGlhIDwtIGZ1bmN0aW9uKHZlY3Rvcl9yZW50YSwgdmVjdG9yX3BvYmxhY2lvbikgew0KICBhcy52ZWN0b3IoY3Jvc3Nwcm9kKHZlY3Rvcl9yZW50YSwgdmVjdG9yX3BvYmxhY2lvbikgLyBzdW0odmVjdG9yX3BvYmxhY2lvbikpDQp9DQpyZW50YV9tZWRpYSh2ZWN0b3JfcmVudGEgPSB5LCB2ZWN0b3JfcG9ibGFjaW9uID0gbikNCg0KDQpgYGANCg0KIyMjIGEpIENhbGN1bGUgZWwgY29lZmljaWVudGUgZGUgR2luaSBkZSBsYSBjaXVkYWQgZGUgUidseWVoDQoNCmBgYHtyfQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OTk5OTkpDQpnaW5pX2RlYnJhal9yYXkgPC0gZnVuY3Rpb24odmVjdG9yX3JlbnRhLCB2ZWN0b3JfcG9ibGFjaW9uKSB7DQogICMgR2VuZXJhY2nDs24gZGVsIERhdGFmcmFtZSBwYXJhIGVsIGPDoWxjdWxvDQogIGxpYnJhcnkoZHBseXIpDQogIGRmX3kgPC0gZXhwYW5kLmdyaWQodmVjdG9yX3JlbnRhLCB2ZWN0b3JfcmVudGEpDQogIG5hbWVzKGRmX3kpIDwtIGMoIllqIiwgIllrIikNCiAgZGZfbiA8LSBleHBhbmQuZ3JpZCh2ZWN0b3JfcG9ibGFjaW9uLCB2ZWN0b3JfcG9ibGFjaW9uKQ0KICBuYW1lcyhkZl9uKSA8LSBjKCJOaiIsICJOayIpDQogIGdpbmlfZGF0YSA8LSBiaW5kX2NvbHMoZGZfbiwgZGZfeSkNCiAgIyBDw6FsY3VsbyBkZWwgZG9ibGUgc3VtYXRvcmlvDQogIHJlbnRhX21lZGlhKHZlY3Rvcl9yZW50YSA9IHZlY3Rvcl9yZW50YSwNCiAgICAgICAgICAgICAgdmVjdG9yX3BvYmxhY2lvbj12ZWN0b3JfcG9ibGFjaW9uKS0+bXUNCiAgIE48LXN1bSh2ZWN0b3JfcG9ibGFjaW9uKQ0KICBnaW5pX2RhdGEgJT4lIG11dGF0ZShkb2JsZV9zdW0gPSBOaiAqIE5rICogYWJzKFlqIC0gWWspKSAtPiBnaW5pX2RhdGENCiAgZ2luaV9kYXRhICU+JSBzdW1tYXJpc2UoR2luaT0oMS8oMiptdSpOXjIpKSpzdW0oZG9ibGVfc3VtKSkgJT4lIHNlbGVjdChHaW5pKS0+R2luaQ0KICBsaXN0KGdpbmlfZGF0YT1naW5pX2RhdGEsbXU9bXUsTj1OLEdpbmk9R2luaVssMV0pDQp9DQoNCiNEYXRhIG9yaWdpbmFsDQpnMTwtZ2luaV9kZWJyYWpfcmF5KHZlY3Rvcl9yZW50YSA9IHksdmVjdG9yX3BvYmxhY2lvbiA9IG4pDQpwcmludChnMSkNCmBgYA0KDQoNCiMjIyBiKSBFbCBhbGNhbGRlIGRlIFInbHllaCAgZWwgIkdyYW4gIFByaW1pZ2VuaW8gQ3RodWxodSIgaGEgcHJvcHVlc3RvIHVuYSB0cmFuc2ZlcmVuY2lhIGRlbCBnb2JpZXJubyBkZSAxNSUgc29icmUgZWwgbW9udG8gZGUgbGFzIHJlbnRhcyBkZSBoYXN0YSAyMDAgdS5tLiB5IHVuIGltcHVlc3RvIHNvYnJlIGxhIHJlbnRhIGRlbCA1JSBwYXJhIGxhcyByZW50YXMgc3VwZXJpb3JlcyBhIGxhcyAyMDAgdS5tLiDCv0xhIGRlc2lndWFsZGFkIGVuIFInbHllaCAgYXVtZW50YSBvIGRpc21pbnV5ZT8gYXJndW1lbnRlIHN1IHJlc3B1ZXN0YSBjb24gZWwgbnVldm8gY29lZmljaWVudGUgZGUgR2luaSwgcGFyYSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIHJlbnRhICBkZXJpdmFkYSBkZSBsYXMgcG9sw610aWNhcyBkZWwgcHJpbWlnZW5pbyBhbGNhbGRlLCBkZXNjcml0YXMgZW4gZWwgbGl0ZXJhbCBiKQ0KDQojIyMjIFNlIGNhbGN1bGEgbnVldmFtZW50ZSBsYSByZW50YSBtZWRpYSBjb24gbGFzIHBvbGl0aWNhcyBkZWwgYWxjYWxkZSBkZSBSJ2x5ZWgNCg0KYGBge3J9DQoNCnkyIDwtIGMoMTAwKigxLjE1KSwgMjAwKigxLjE1KSwgMzAwLygxLjA1KSwgNDAwLygxLjA1KSw3MDAvKDEuMDUpKQ0KbjIgPC0gYyg1MCwgMzUsIDU1LCAzNSwxMCkNCg0KI0PDoWxjdWxvIGRlIGxhIHJlbnRhIG1lZGlhDQpyZW50YV9tZWRpYSA8LSBmdW5jdGlvbih2ZWN0b3JfcmVudGEsIHZlY3Rvcl9wb2JsYWNpb24pIHsNCiAgYXMudmVjdG9yKGNyb3NzcHJvZCh2ZWN0b3JfcmVudGEsIHZlY3Rvcl9wb2JsYWNpb24pIC8gc3VtKHZlY3Rvcl9wb2JsYWNpb24pKQ0KfQ0KcmVudGFfbWVkaWEodmVjdG9yX3JlbnRhID0geTIsIHZlY3Rvcl9wb2JsYWNpb24gPSBuMikNCg0KDQpgYGANCiMjIyMgU2UgY2FsY3VsYSBudWV2YW1lbnRlIGVsIEdJTkkgY29uIGxhcyBwb2xpdGljYXMgZGVsIGFsY2FsZGUgZGUgUidseWVoDQoNCmBgYHtyfQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OTk5OTkpDQpnaW5pX2RlYnJhal9yYXkgPC0gZnVuY3Rpb24odmVjdG9yX3JlbnRhLCB2ZWN0b3JfcG9ibGFjaW9uKSB7DQogICMgR2VuZXJhY2nDs24gZGVsIERhdGFmcmFtZSBwYXJhIGVsIGPDoWxjdWxvDQogIGxpYnJhcnkoZHBseXIpDQogIGRmX3kgPC0gZXhwYW5kLmdyaWQodmVjdG9yX3JlbnRhLCB2ZWN0b3JfcmVudGEpDQogIG5hbWVzKGRmX3kpIDwtIGMoIllqIiwgIllrIikNCiAgZGZfbiA8LSBleHBhbmQuZ3JpZCh2ZWN0b3JfcG9ibGFjaW9uLCB2ZWN0b3JfcG9ibGFjaW9uKQ0KICBuYW1lcyhkZl9uKSA8LSBjKCJOaiIsICJOayIpDQogIGdpbmlfZGF0YSA8LSBiaW5kX2NvbHMoZGZfbiwgZGZfeSkNCiAgIyBDw6FsY3VsbyBkZWwgZG9ibGUgc3VtYXRvcmlvDQogIHJlbnRhX21lZGlhKHZlY3Rvcl9yZW50YSA9IHZlY3Rvcl9yZW50YSwNCiAgICAgICAgICAgICAgdmVjdG9yX3BvYmxhY2lvbj12ZWN0b3JfcG9ibGFjaW9uKS0+bXUNCiAgIE48LXN1bSh2ZWN0b3JfcG9ibGFjaW9uKQ0KICBnaW5pX2RhdGEgJT4lIG11dGF0ZShkb2JsZV9zdW0gPSBOaiAqIE5rICogYWJzKFlqIC0gWWspKSAtPiBnaW5pX2RhdGENCiAgZ2luaV9kYXRhICU+JSBzdW1tYXJpc2UoR2luaT0oMS8oMiptdSpOXjIpKSpzdW0oZG9ibGVfc3VtKSkgJT4lIHNlbGVjdChHaW5pKS0+R2luaQ0KICBsaXN0KGdpbmlfZGF0YT1naW5pX2RhdGEsbXU9bXUsTj1OLEdpbmk9R2luaVssMV0pDQp9DQoNCiNEYXRhIG9yaWdpbmFsDQpnMjwtZ2luaV9kZWJyYWpfcmF5KHZlY3Rvcl9yZW50YSA9IHkyLHZlY3Rvcl9wb2JsYWNpb24gPSBuMikNCnByaW50KGcyKQ0KDQojRW4gZXN0ZSBjYXNvIGNvbiBsYSB0cmFuc2ZlcmVuY2lhIGRlbCBnb2JpZXJubyBkZWwgMTUlIGEgbGFzIHJlbnRhcyBkZSBoYXN0YSAyMDAgdS5tLiB5IGNvbiBlbCBpbXB1ZXN0byBkZWwgNSUgYSBsYXMgcmVudGFzIHN1cGVyaW9yZXMgYSBsYXMgMjAwIHUubS4sIHNlIHB1ZWRlIGNvbmNsdWlyIHF1ZSBsYSBkZXNpZ3VhbGRhZCBoYSBkaXNtaW51aWRvIGVuIGxhIGNpdWRhZCBkZSBSJ2x5ZWgsIGVzIGRlY2lyLCBhaG9yYSBlcyBtYXMgZXF1aXRhdGl2byBsYSBkaXN0cmlidWNpw7NuIGRlbCBpbmdyZXMgeWEgcXVlIHNlIHBhc2EgZGUgdW4gR2luaSBkZSAwLjI5MjY1NjMgYSAwLjI1NjUyNjcuDQoNCmBgYA0KDQojIyMgYykgTGEgc2V2ZXJpZGFkIGRlIGxhIHBvYnJlemEgKEZHVDIpIGF1bWVudGEgbyBkaXNtaW51eWUgY29uIGxhIHBvbMOtdGljYSBkZWwgcHJpbWlnZW5pbyBhbGNhbGRlLCBkZXNjcml0YSBlbiBlbCBsaXRlcmFsIGIpLCBhcmd1bWVudGUgc3UgcmVzcHVlc3RhDQoNCiMjIyMgU2luIHBvbGl0aWNhcyBkZSByZWRpc3RyaWJ1Y2lvbiBkZWwgaW5ncmVzbw0KDQpgYGB7cn0NCkt1em5ldHMuWC5ZIDwtIGZ1bmN0aW9uKHZlY3Rvcl9yZW50YSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvcl9wb2JsYWNpb24gPSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgY3VhbnRpbF94LA0KICAgICAgICAgICAgICAgICAgICAgICAgY3VhbnRpbF95KSB7DQogIGxpYnJhcnkocHVycnIpDQogIG1hcDIodmVjdG9yX3JlbnRhLCB2ZWN0b3JfcG9ibGFjaW9uLCAuZiA9IHJlcCkgJT4lDQogICAgdW5saXN0KCkgJT4lIHF1YW50aWxlKHByb2JzID0gYyhjdWFudGlsX3gpKSAtPiBQb2IuWA0KICBtYXAyKHZlY3Rvcl9yZW50YSwgdmVjdG9yX3BvYmxhY2lvbiwgLmYgPSByZXApICU+JSANCiAgICB1bmxpc3QoKSAlPiUgcXVhbnRpbGUocHJvYnMgPSBjKDEtY3VhbnRpbF95KSkgLT4gUG9iLlkNCiAgbGlzdChLdXpuZXRzLmluZGljZT11bm5hbWUoUG9iLlkvUG9iLlgpLFBvYi5YPVBvYi5YLFBvYi5ZPVBvYi5ZKQ0KfQ0KIyBFamVtcGxvIGRlIHVzbw0KS3V6bmV0cy5YLlkodmVjdG9yX3JlbnRhID0geSx2ZWN0b3JfcG9ibGFjaW9uID0gbixjdWFudGlsX3ggPSAwLjIsY3VhbnRpbF95ID0wLjIpDQpgYGANCg0KIyMjIyBDb24gcG9saXRpY2FzIGRlIHJlZGlzdHJpYnVjaW9uIGRlbCBpbmdyZXNvDQoNCmBgYHtyfQ0KS3V6bmV0cy5YLlkgPC0gZnVuY3Rpb24odmVjdG9yX3JlbnRhLA0KICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yX3BvYmxhY2lvbiA9IDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjdWFudGlsX3gsDQogICAgICAgICAgICAgICAgICAgICAgICBjdWFudGlsX3kpIHsNCiAgbGlicmFyeShwdXJycikNCiAgbWFwMih2ZWN0b3JfcmVudGEsIHZlY3Rvcl9wb2JsYWNpb24sIC5mID0gcmVwKSAlPiUNCiAgICB1bmxpc3QoKSAlPiUgcXVhbnRpbGUocHJvYnMgPSBjKGN1YW50aWxfeCkpIC0+IFBvYi5YDQogIG1hcDIodmVjdG9yX3JlbnRhLCB2ZWN0b3JfcG9ibGFjaW9uLCAuZiA9IHJlcCkgJT4lIA0KICAgIHVubGlzdCgpICU+JSBxdWFudGlsZShwcm9icyA9IGMoMS1jdWFudGlsX3kpKSAtPiBQb2IuWQ0KICBsaXN0KEt1em5ldHMuaW5kaWNlPXVubmFtZShQb2IuWS9Qb2IuWCksUG9iLlg9UG9iLlgsUG9iLlk9UG9iLlkpDQp9DQojIEVqZW1wbG8gZGUgdXNvDQpLdXpuZXRzLlguWSh2ZWN0b3JfcmVudGEgPSB5Mix2ZWN0b3JfcG9ibGFjaW9uID0gbjIsY3VhbnRpbF94ID0gMC4yLGN1YW50aWxfeSA9MC4yKQ0KDQojRW4gZXN0ZSBwdW50byBzZSBwdWVkZSBhcmd1bWVudGFyIHF1ZSBsYSBzZXZlcmlkYWQgZGUgbGEgcG9icmV6YSBkaXNtaW51eWUgeWEgcXVlIGVuIGVsIHByaW1lciBjYXNvLCBjdWFuZG8gbm8gc2UgaGFuIGFwbGljYWRvIGxhcyBwb2xpdGljYXMgZGUgcmVkaXN0cmlidWNpb24gZGVsIGluZ3Jlc28gcG9yIGNhZGEgdS5tLiBxdWUgcmVjaWJlIGVsIDIwJSBtYXMgcG9icmUsIGxlIGluZ3Jlc2FuIDMuNDcgdS5tLiBhbCAyMCUgbWFzIHJpY28uDQoNCiNwb3N0ZXJpb3IgYSBsYSBhcGxpY2FjacOzbiBkZSBsYXMgcG9saXRpY2FzIGRlIHJlZGlzdHJpYnVjaW9uIGRlbCBpbmdyZXNvIHNlIHRpZW5lIHF1ZSBwb3IgY2FkYSB1Lm0uIHF1ZSByZWNpYmUgZWwgMjAlIG1hcyBwb2JyZSwgbGUgaW5ncmVzYW4gMy4zMTI2IHUubS4gYWwgMjAlIG1hcyByaWNvLiANCmBgYA0KDQojIyMgZCkgRGUgYWN1ZXJkbyBhIGFsIGluZGljYWRvciBkZSBLdXpuZXQsIGhheSBjYW1iaW9zIGV2aWRlbnRlcyBlbnRyZSBlbCAxMCUgbcOhcyByaWNvIHkgZWwgNDAlIG3DoXMgcG9icmUgZGUgbGEgY2l1ZGFkIGRlIFInbHllaCwgY29uIGxhIGltcGxlbWVudGFjacOzbiBkZSBsYSBwb2zDrXRpY2EgZGVsIHByaW1pZ2VuaW8gYWxjYWxkZSwgeWEgZGVzY3JpdGEgY29uIGFudGVyaW9yaWRhZC4gQXJndW1lbnRlIHN1IHJlc3B1ZXN0YQ0KDQojIyMjIFNpbiBsYSBwb2xpdGljYSBkZWwgYWxjYWxkZSBkZSBSJ2x5ZWgNCg0KYGBge3J9DQpLdXpuZXRzLlguWSA8LSBmdW5jdGlvbih2ZWN0b3JfcmVudGEsDQogICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3JfcG9ibGFjaW9uID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1YW50aWxfeCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1YW50aWxfeSkgew0KICBsaWJyYXJ5KHB1cnJyKQ0KICBtYXAyKHZlY3Rvcl9yZW50YSwgdmVjdG9yX3BvYmxhY2lvbiwgLmYgPSByZXApICU+JQ0KICAgIHVubGlzdCgpICU+JSBxdWFudGlsZShwcm9icyA9IGMoY3VhbnRpbF94KSkgLT4gUG9iLlgNCiAgbWFwMih2ZWN0b3JfcmVudGEsIHZlY3Rvcl9wb2JsYWNpb24sIC5mID0gcmVwKSAlPiUgDQogICAgdW5saXN0KCkgJT4lIHF1YW50aWxlKHByb2JzID0gYygxLWN1YW50aWxfeSkpIC0+IFBvYi5ZDQogIGxpc3QoS3V6bmV0cy5pbmRpY2U9dW5uYW1lKFBvYi5ZL1BvYi5YKSxQb2IuWD1Qb2IuWCxQb2IuWT1Qb2IuWSkNCn0NCiMgRWplbXBsbyBkZSB1c28NCkt1em5ldHMuWC5ZKHZlY3Rvcl9yZW50YSA9IHksdmVjdG9yX3BvYmxhY2lvbiA9IG4sY3VhbnRpbF94ID0gMC40LGN1YW50aWxfeSA9MC4xKQ0KDQpgYGANCg0KIyMjIyBDb24gbGEgcG9saXRpY2EgZGVsIGFsY2FsZGUgZGUgUidseWVoDQoNCmBgYHtyfQ0KDQpLdXpuZXRzLlguWSA8LSBmdW5jdGlvbih2ZWN0b3JfcmVudGEsDQogICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3JfcG9ibGFjaW9uID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1YW50aWxfeCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1YW50aWxfeSkgew0KICBsaWJyYXJ5KHB1cnJyKQ0KICBtYXAyKHZlY3Rvcl9yZW50YSwgdmVjdG9yX3BvYmxhY2lvbiwgLmYgPSByZXApICU+JQ0KICAgIHVubGlzdCgpICU+JSBxdWFudGlsZShwcm9icyA9IGMoY3VhbnRpbF94KSkgLT4gUG9iLlgNCiAgbWFwMih2ZWN0b3JfcmVudGEsIHZlY3Rvcl9wb2JsYWNpb24sIC5mID0gcmVwKSAlPiUgDQogICAgdW5saXN0KCkgJT4lIHF1YW50aWxlKHByb2JzID0gYygxLWN1YW50aWxfeSkpIC0+IFBvYi5ZDQogIGxpc3QoS3V6bmV0cy5pbmRpY2U9dW5uYW1lKFBvYi5ZL1BvYi5YKSxQb2IuWD1Qb2IuWCxQb2IuWT1Qb2IuWSkNCn0NCiMgRWplbXBsbyBkZSB1c28NCkt1em5ldHMuWC5ZKHZlY3Rvcl9yZW50YSA9IHkyLHZlY3Rvcl9wb2JsYWNpb24gPSBuMixjdWFudGlsX3ggPSAwLjQsY3VhbnRpbF95ID0wLjEpDQoNCiNFbiBlc3RlIHB1bnRvIHNlIHB1ZWRlIGFyZ3VtZW50YXIgcXVlIGhheSB1biBtZWpvciBiYWxhbmNlIGVuIGVsIGluZ3Jlc28sIHlhIHF1ZSBzaW4gbGEgcG9saXRjYSBkZWwgYWxjYWxkZSBwb3IgY2FkYSB1Lm0uIHF1ZSByZWNpYmUgZWwgNDAlIG1hcyBwb2JyZSwgbGUgaW5ncmVzYW4gMiB1Lm0uIGFsIDEwJSBtYXMgcmljby4NCg0KI1lhIGNvbiBsYSBpbXBsZW1lbnRhY2lvbiBkZSBsYSBwb2xpdGljYSBkZWwgYWxjYWxkZSBwb3IgY2FkYSB1Lm0uIHF1ZSByZWNpYmUgZWwgNDAlIG1hcyBwb2JyZSwgbGEgY2FudGlkYWQgcXVlIHJlY2liZSBlbCAxMCUgbWFzIHJpY28gZGlzbWludXllIGRlIDIgYSAxLjY1IHUubS4sIGhhY2llbmRvIG1hcyBlcXVpdGF0aXZvIGxhIGRpc3RyaWJ1Y2lvbiBkZWwgaW5ncmVzby4NCmBgYA0KDQo=