Análisis de la Polación de estados de Estados Unidos.

Equipo 7

Tania Ortega
Humberto Mena
Ares Meléndez
Llamado de librerías
library(readr)
library(maps)
library(gplots)
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess
library(plm)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ purrr     1.0.1
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::between() masks plm::between()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks plm::lag(), stats::lag()
## ✖ dplyr::lead()    masks plm::lead()
## ✖ purrr::map()     masks maps::map()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(dplyr)
library(readxl)
library(ggplot2)
library(sf)
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(viridis)
## Loading required package: viridisLite
## 
## Attaching package: 'viridis'
## 
## The following object is masked from 'package:maps':
## 
##     unemp
library(dplyr)
library(maps)

Obtención de los datos

population <- read_csv("USA_Population.csv")
## Rows: 6020 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): State
## dbl (2): Year, Population
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Selección de 5 estados

California (CA)
Arizona (AZ)
Inidiana (IN)
Montana (MT)
Maine (ME)
CA <- population[population$State == "CA",]
AZ <- population[population$State == "AZ",]
IN <- population[population$State == "IN",]
MT <- population[population$State == "MT",]
ME <- population[population$State == "ME",]

Serie de tiempo de la población y estado

ts_CA <- ts(data=CA$Population, start = c(1900,1))
ts_CA
## Time Series:
## Start = 1900 
## End = 2019 
## Frequency = 1 
##   [1]  1490000  1550000  1623000  1702000  1792000  1893000  1976000  2054000
##   [9]  2161000  2282000  2406000  2534000  2668000  2811000  2934000  3008000
##  [17]  3071000  3171000  3262000  3339000  3554000  3795000  3991000  4270000
##  [25]  4541000  4730000  4929000  5147000  5344000  5531000  5711000  5824000
##  [33]  5894000  5963000  6060000  6175000  6341000  6528000  6656000  6785000
##  [41]  6950000  7237000  7735000  8506000  8945000  9344000  9559000  9832000
##  [49] 10064000 10337000 10677000 11134000 11635000 12251000 12746000 13133000
##  [57] 13713000 14264000 14880000 15467000 15870000 16497000 17072000 17668000
##  [65] 18151000 18585000 18858000 19176000 19394000 19711000 19971069 20345939
##  [73] 20585469 20868728 21173865 21537849 21935909 22352396 22835958 23256880
##  [81] 23800800 24285933 24820009 25360026 25844393 26441109 27102237 27777158
##  [89] 28464249 29218164 29950111 30414114 30875920 31147208 31317179 31493525
##  [97] 31780829 32217708 32682794 33145121 33987977 34479458 34871843 35253159
## [105] 35574576 35827943 36021202 36250311 36604337 36961229 37319502 37638369
## [113] 37948800 38260787 38596972 38918045 39167117 39358497 39461588 39512223
ts_AZ <- ts(data=AZ$Population, start = c(1900,1))
ts_AZ
## Time Series:
## Start = 1900 
## End = 2019 
## Frequency = 1 
##   [1]  124000  131000  138000  144000  151000  158000  167000  176000  186000
##  [10]  196000  206000  212000  217000  236000  253000  263000  282000  311000
##  [19]  320000  329000  340000  351000  360000  371000  382000  393000  403000
##  [28]  414000  422000  430000  434000  429000  426000  426000  428000  434000
##  [37]  443000  453000  466000  484000  499000  490000  524000  692000  610000
##  [46]  594000  616000  653000  690000  714000  756000  785000  842000  894000
##  [55]  933000  987000 1053000 1125000 1193000 1261000 1321000 1407000 1471000
##  [64] 1521000 1556000 1584000 1614000 1646000 1682000 1737000 1775399 1895814
##  [73] 2008291 2124438 2223196 2284847 2346157 2425197 2515316 2635571 2737774
##  [82] 2810107 2889861 2968925 3067135 3183538 3308262 3437103 3535183 3622185
##  [91] 3679056 3762394 3867333 3993390 4147561 4306908 4432308 4552207 4667277
## [100] 4778332 5160586 5273477 5396255 5510364 5652404 5839077 6029141 6167681
## [109] 6280362 6343154 6407172 6472643 6554978 6632764 6730413 6829676 6941072
## [118] 7044008 7158024 7278717
ts_IN <- ts(data=IN$Population, start = c(1900,1))
ts_IN
## Time Series:
## Start = 1900 
## End = 2019 
## Frequency = 1 
##   [1] 2518000 2541000 2567000 2594000 2614000 2635000 2663000 2679000 2677000
##  [10] 2678000 2713000 2751000 2785000 2824000 2857000 2873000 2897000 2910000
##  [19] 2880000 2906000 2947000 2976000 2965000 3042000 3086000 3119000 3148000
##  [28] 3191000 3212000 3226000 3242000 3257000 3281000 3304000 3319000 3332000
##  [37] 3348000 3374000 3386000 3403000 3433000 3483000 3507000 3449000 3440000
##  [46] 3427000 3702000 3779000 3877000 3958000 3967000 4096000 4148000 4182000
##  [55] 4264000 4363000 4458000 4529000 4583000 4613000 4674000 4730000 4736000
##  [64] 4799000 4856000 4922000 4999000 5053000 5093000 5143000 5195392 5253396
##  [73] 5302435 5338277 5361890 5365766 5389088 5425638 5470214 5501174 5490721
##  [82] 5480435 5467922 5450395 5458322 5459211 5454108 5473012 5491735 5523693
##  [91] 5555097 5602062 5648649 5701965 5745626 5791819 5834908 5872370 5907617
## [100] 5942901 6091866 6127760 6155967 6196638 6233007 6278616 6332669 6379599
## [109] 6424806 6459325 6490432 6516528 6537703 6568713 6593644 6608422 6634304
## [118] 6658078 6695497 6732219
ts_MT <- ts(data=MT$Population, start = c(1900,1))
ts_MT
## Time Series:
## Start = 1900 
## End = 2019 
## Frequency = 1 
##   [1]  245000  261000  270000  282000  293000  305000  322000  332000  346000
##  [10]  363000  380000  397000  414000  433000  452000  469000  487000  505000
##  [19]  501000  534000  543000  546000  543000  538000  538000  535000  531000
##  [28]  527000  541000  524000  539000  540000  540000  541000  545000  550000
##  [37]  554000  554000  552000  555000  558000  543000  518000  485000  469000
##  [46]  477000  514000  531000  542000  569000  593000  596000  602000  616000
##  [55]  624000  636000  656000  667000  666000  669000  679000  696000  698000
##  [64]  703000  706000  706000  707000  701000  700000  694000  694409  710814
##  [73]  718732  726798  736419  748208  757317  769953  782317  787305  788752
##  [82]  795328  803986  814031  820905  822320  813739  805063  800202  799636
##  [91]  799824  807837  822436  839876  854923  868522  876656  878706  879533
## [100]  882779  903773  906961  911667  919630  930009  940102  952692  964706
## [109]  976415  983982  990697  997316 1003783 1013569 1021869 1030475 1040859
## [118] 1052482 1060665 1068778
ts_ME <- ts(data=ME$Population, start = c(1900,1))
ts_ME
## Time Series:
## Start = 1900 
## End = 2019 
## Frequency = 1 
##   [1]  695000  699000  703000  709000  719000  723000  729000  731000  735000
##  [10]  740000  745000  751000  753000  763000  772000  774000  775000  777000
##  [19]  760000  762000  771000  775000  778000  781000  788000  792000  793000
##  [28]  796000  797000  797000  800000  807000  815000  821000  829000  836000
##  [37]  840000  842000  843000  846000  849000  852000  839000  806000  801000
##  [46]  800000  832000  854000  878000  903000  917000  916000  915000  913000
##  [55]  927000  934000  938000  943000  944000  957000  975000  995000  994000
##  [64]  993000  993000  997000  999000 1004000  994000  992000  993722 1015390
##  [73] 1034292 1045655 1059040 1071995 1088412 1103578 1113566 1122563 1126860
##  [82] 1133033 1136684 1144772 1155635 1162936 1170126 1184574 1203840 1219961
##  [91] 1231296 1235439 1235748 1238256 1237687 1237438 1241436 1245215 1247554
## [100] 1253040 1277072 1285692 1295960 1306513 1313688 1318787 1323619 1327040
## [109] 1330509 1329590 1327629 1328284 1327729 1328009 1330513 1328262 1331317
## [118] 1334612 1339057 1344212

Aplicación de ARIMA

arima1 <- auto.arima(ts_CA, D=1)
summary(arima1)
## Series: ts_CA 
## ARIMA(0,2,0) 
## 
## sigma^2 = 9.971e+09:  log likelihood = -1525.79
## AIC=3053.57   AICc=3053.61   BIC=3056.34
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set -88.02939 99017.45 65793.72 0.06388803 0.560492 0.2059178
##                    ACF1
## Training set -0.1174913
arima2 <- auto.arima(ts_AZ, D=1)
summary(arima2)
## Series: ts_AZ 
## ARIMA(0,2,1) 
## 
## Coefficients:
##           ma1
##       -0.7815
## s.e.   0.0620
## 
## sigma^2 = 1.504e+09:  log likelihood = -1414.15
## AIC=2832.3   AICc=2832.4   BIC=2837.84
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
## Training set 3812.388 38291.02 20396.69 0.3291156 1.521771 0.3286796 0.04665136
arima3 <- auto.arima(ts_IN, D=1)
summary(arima3)
## Series: ts_IN 
## ARIMA(1,1,1) with drift 
## 
## Coefficients:
##          ar1      ma1      drift
##       0.8402  -0.6540  35005.847
## s.e.  0.1209   0.1717   6586.586
## 
## sigma^2 = 1.188e+09:  log likelihood = -1410.69
## AIC=2829.37   AICc=2829.72   BIC=2840.49
## 
## Training set error measures:
##                    ME     RMSE      MAE         MPE      MAPE      MASE
## Training set 196.8848 33881.45 18351.97 -0.01160382 0.4553768 0.4776668
##                    ACF1
## Training set 0.03082154
arima4 <- auto.arima(ts_MT, D=1)
summary(arima4)
## Series: ts_MT 
## ARIMA(1,1,0) with drift 
## 
## Coefficients:
##          ar1     drift
##       0.5308  7017.935
## s.e.  0.0772  1636.222
## 
## sigma^2 = 72671363:  log likelihood = -1245.05
## AIC=2496.09   AICc=2496.3   BIC=2504.43
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE    MAPE      MASE
## Training set -48.99213 8417.516 5757.345 0.03315024 1.01426 0.5910594
##                     ACF1
## Training set -0.04391617
arima5 <- auto.arima(ts_ME, D=1)
summary(arima5)
## Series: ts_ME 
## ARIMA(0,1,2) with drift 
## 
## Coefficients:
##          ma1     ma2    drift
##       0.5693  0.3749  5449.97
## s.e.  0.0821  0.0864  1163.30
## 
## sigma^2 = 44209727:  log likelihood = -1215.04
## AIC=2438.08   AICc=2438.43   BIC=2449.2
## 
## Training set error measures:
##                    ME     RMSE      MAE          MPE      MAPE      MASE
## Training set 9.981606 6537.283 4235.301 -0.007616192 0.4497604 0.6027132
##                    ACF1
## Training set 0.02999791

Pronósticos dentro de las siguientes 5 décadas

Pronóstico California

pronostico_CA5 <- forecast(arima1, level =c(50), h=50)
pronostico_CA5
##      Point Forecast    Lo 50    Hi 50
## 2020       39562858 39495508 39630208
## 2021       39613493 39462894 39764092
## 2022       39664128 39412128 39916128
## 2023       39714763 39345873 40083653
## 2024       39765398 39265918 40264878
## 2025       39816033 39173556 40458510
## 2026       39866668 39069774 40663562
## 2027       39917303 38955355 40879251
## 2028       39967938 38830942 41104934
## 2029       40018573 38697073 41340073
## 2030       40069208 38554210 41584206
## 2031       40119843 38402752 41836934
## 2032       40170478 38243048 42097908
## 2033       40221113 38075409 42366817
## 2034       40271748 37900115 42643381
## 2035       40322383 37717414 42927352
## 2036       40373018 37527536 43218500
## 2037       40423653 37330688 43516618
## 2038       40474288 37127061 43821515
## 2039       40524923 36916831 44133015
## 2040       40575558 36700160 44450956
## 2041       40626193 36477201 44775185
## 2042       40676828 36248095 45105561
## 2043       40727463 36012973 45441953
## 2044       40778098 35771960 45784236
## 2045       40828733 35525172 46132294
## 2046       40879368 35272720 46486016
## 2047       40930003 35014707 46845299
## 2048       40980638 34751231 47210045
## 2049       41031273 34482387 47580159
## 2050       41081908 34208262 47955554
## 2051       41132543 33928941 48336145
## 2052       41183178 33644505 48721851
## 2053       41233813 33355031 49112595
## 2054       41284448 33060592 49508304
## 2055       41335083 32761258 49908908
## 2056       41385718 32457098 50314338
## 2057       41436353 32148175 50724531
## 2058       41486988 31834552 51139424
## 2059       41537623 31516290 51558956
## 2060       41588258 31193445 51983071
## 2061       41638893 30866073 52411713
## 2062       41689528 30534228 52844828
## 2063       41740163 30197961 53282365
## 2064       41790798 29857323 53724273
## 2065       41841433 29512361 54170505
## 2066       41892068 29163123 54621013
## 2067       41942703 28809653 55075753
## 2068       41993338 28451996 55534680
## 2069       42043973 28090194 55997752
plot(pronostico_CA5)

Pronóstico Arizona

pronostico_AZ5 <- forecast(arima2, level =c(50), h=50)
pronostico_AZ5
##      Point Forecast    Lo 50    Hi 50
## 2020        7385734  7359578  7411890
## 2021        7492750  7451520  7533980
## 2022        7599767  7543975  7655559
## 2023        7706783  7636159  7777408
## 2024        7813800  7727831  7899769
## 2025        7920817  7818902  8022731
## 2026        8027833  7909340  8146327
## 2027        8134850  7999135  8270565
## 2028        8241866  8088291  8395442
## 2029        8348883  8176817  8520949
## 2030        8455900  8264725  8647074
## 2031        8562916  8352028  8773804
## 2032        8669933  8438740  8901126
## 2033        8776949  8524873  9029025
## 2034        8883966  8610442  9157490
## 2035        8990982  8695458  9286507
## 2036        9097999  8779933  9416065
## 2037        9205016  8863878  9546153
## 2038        9312032  8947306  9676759
## 2039        9419049  9030225  9807872
## 2040        9526065  9112646  9939485
## 2041        9633082  9194579 10071586
## 2042        9740099  9276031 10204167
## 2043        9847115  9357011 10337219
## 2044        9954132  9437528 10470735
## 2045       10061148  9517590 10604707
## 2046       10168165  9597202 10739128
## 2047       10275182  9676374 10873989
## 2048       10382198  9755110 11009286
## 2049       10489215  9833419 11145011
## 2050       10596231  9911305 11281158
## 2051       10703248  9988775 11417721
## 2052       10810265 10065834 11554695
## 2053       10917281 10142488 11692074
## 2054       11024298 10218742 11829853
## 2055       11131314 10294602 11968027
## 2056       11238331 10370072 12106590
## 2057       11345348 10445156 12245539
## 2058       11452364 10519860 12384869
## 2059       11559381 10594187 12524574
## 2060       11666397 10668142 12664652
## 2061       11773414 10741730 12805098
## 2062       11880431 10814953 12945908
## 2063       11987447 10887817 13087078
## 2064       12094464 10960324 13228604
## 2065       12201480 11032478 13370483
## 2066       12308497 11104283 13512711
## 2067       12415513 11175742 13655285
## 2068       12522530 11246858 13798202
## 2069       12629547 11317635 13941458
plot(pronostico_AZ5)

Pronóstico Indiana

pronostico_IN5 <- forecast(arima3, level =c(50), h=50)
pronostico_IN5
##      Point Forecast   Lo 50   Hi 50
## 2020        6765351 6742107 6788594
## 2021        6798782 6762721 6834844
## 2022        6832465 6784775 6880155
## 2023        6866359 6807637 6925082
## 2024        6900431 6831115 6969748
## 2025        6934652 6855124 7014181
## 2026        6968999 6879616 7058382
## 2027        7003451 6904555 7102347
## 2028        7037991 6929910 7146072
## 2029        7072606 6955655 7189557
## 2030        7107283 6981765 7232802
## 2031        7142013 7008214 7275812
## 2032        7176787 7034982 7318592
## 2033        7211598 7062045 7361151
## 2034        7246440 7089385 7403495
## 2035        7281308 7116982 7445634
## 2036        7316199 7144820 7487577
## 2037        7351107 7172883 7529332
## 2038        7386032 7201154 7570909
## 2039        7420969 7229622 7612316
## 2040        7455917 7258272 7653562
## 2041        7490875 7287094 7694655
## 2042        7525840 7316077 7735603
## 2043        7560811 7345210 7776412
## 2044        7595789 7374485 7817092
## 2045        7630770 7403894 7857647
## 2046        7665756 7433428 7898084
## 2047        7700745 7463080 7938410
## 2048        7735736 7492844 7978629
## 2049        7770730 7522714 8018746
## 2050        7805726 7552684 8058768
## 2051        7840723 7582749 8098698
## 2052        7875722 7612904 8138540
## 2053        7910722 7643145 8178299
## 2054        7945723 7673467 8217978
## 2055        7980724 7703867 8257581
## 2056        8015726 7734342 8297111
## 2057        8050729 7764887 8336572
## 2058        8085733 7795500 8375965
## 2059        8120736 7826178 8415295
## 2060        8155740 7856917 8454563
## 2061        8190745 7887717 8493773
## 2062        8225749 7918574 8532925
## 2063        8260754 7949485 8572023
## 2064        8295759 7980450 8611068
## 2065        8330764 8011466 8650063
## 2066        8365769 8042530 8689009
## 2067        8400775 8073642 8727907
## 2068        8435780 8104800 8766760
## 2069        8470786 8136002 8805569
plot(pronostico_IN5)

Pronóstico Montana

pronostico_MT5 <- forecast(arima4, level =c(50), h=50)
pronostico_MT5
##      Point Forecast   Lo 50   Hi 50
## 2020        1076377 1070627 1082127
## 2021        1083704 1073190 1094217
## 2022        1090885 1076082 1105689
## 2023        1097990 1079378 1116603
## 2024        1105054 1083049 1127059
## 2025        1112097 1087042 1137152
## 2026        1119128 1091300 1146955
## 2027        1126152 1095777 1156528
## 2028        1133174 1100435 1165913
## 2029        1140194 1105244 1175143
## 2030        1147213 1110181 1184245
## 2031        1154231 1115227 1193236
## 2032        1161250 1120366 1202133
## 2033        1168268 1125587 1210948
## 2034        1175286 1130881 1219690
## 2035        1182304 1136239 1228368
## 2036        1189322 1141655 1236988
## 2037        1196340 1147123 1245556
## 2038        1203358 1152638 1254077
## 2039        1210376 1158197 1262554
## 2040        1217393 1163795 1270992
## 2041        1224411 1169430 1279393
## 2042        1231429 1175099 1287760
## 2043        1238447 1180799 1296095
## 2044        1245465 1186529 1304401
## 2045        1252483 1192286 1312680
## 2046        1259501 1198070 1320932
## 2047        1266519 1203877 1329161
## 2048        1273537 1209708 1337366
## 2049        1280555 1215560 1345550
## 2050        1287573 1221433 1353713
## 2051        1294591 1227325 1361856
## 2052        1301609 1233236 1369982
## 2053        1308627 1239164 1378089
## 2054        1315645 1245109 1386180
## 2055        1322662 1251071 1394254
## 2056        1329680 1257047 1402313
## 2057        1336698 1263039 1410358
## 2058        1343716 1269044 1418388
## 2059        1350734 1275063 1426405
## 2060        1357752 1281096 1434409
## 2061        1364770 1287140 1442400
## 2062        1371788 1293197 1450379
## 2063        1378806 1299265 1458347
## 2064        1385824 1305345 1466303
## 2065        1392842 1311435 1474249
## 2066        1399860 1317536 1482184
## 2067        1406878 1323646 1490109
## 2068        1413896 1329767 1498024
## 2069        1420914 1335897 1505930
plot(pronostico_MT5)

Pronóstico Maine

pronostico_ME5 <- forecast(arima5, level =c(50), h=50)
pronostico_ME5
##      Point Forecast   Lo 50   Hi 50
## 2020        1349520 1345035 1354005
## 2021        1355196 1346851 1363542
## 2022        1360646 1348577 1372715
## 2023        1366096 1351207 1380985
## 2024        1371546 1354292 1388800
## 2025        1376996 1357664 1396328
## 2026        1382446 1361239 1403653
## 2027        1387896 1364967 1410826
## 2028        1393346 1368815 1417877
## 2029        1398796 1372761 1424831
## 2030        1404246 1376790 1431702
## 2031        1409696 1380889 1438503
## 2032        1415146 1385048 1445243
## 2033        1420596 1389261 1451931
## 2034        1426046 1393520 1458571
## 2035        1431496 1397822 1465170
## 2036        1436946 1402162 1471730
## 2037        1442396 1406535 1478256
## 2038        1447846 1410941 1484751
## 2039        1453296 1415375 1491217
## 2040        1458746 1419835 1497656
## 2041        1464196 1424320 1504071
## 2042        1469646 1428828 1510463
## 2043        1475096 1433357 1516834
## 2044        1480546 1437906 1523185
## 2045        1485996 1442474 1529517
## 2046        1491445 1447059 1535832
## 2047        1496895 1451661 1542130
## 2048        1502345 1456278 1548413
## 2049        1507795 1460910 1554680
## 2050        1513245 1465557 1560934
## 2051        1518695 1470216 1567175
## 2052        1524145 1474888 1573402
## 2053        1529595 1479572 1579618
## 2054        1535045 1484268 1585822
## 2055        1540495 1488975 1592015
## 2056        1545945 1493692 1598198
## 2057        1551395 1498420 1604370
## 2058        1556845 1503157 1610533
## 2059        1562295 1507904 1616686
## 2060        1567745 1512659 1622831
## 2061        1573195 1517424 1628966
## 2062        1578645 1522196 1635094
## 2063        1584095 1526977 1641213
## 2064        1589545 1531765 1647325
## 2065        1594995 1536561 1653429
## 2066        1600445 1541364 1659526
## 2067        1605895 1546174 1665616
## 2068        1611345 1550991 1671699
## 2069        1616795 1555814 1677775
plot(pronostico_ME5)

Mapas

Convertir a dataframe para poder juntar la información de cada una de las décadas

California<- as.data.frame(pronostico_CA5)
Arizona<- as.data.frame(pronostico_AZ5)
Indiana<- as.data.frame(pronostico_IN5)
Montana<- as.data.frame(pronostico_MT5)
Maine<- as.data.frame(pronostico_ME5)
#a<- a[c(11,21,31),]
Estados<-rbind(California,Arizona,Indiana,Montana,Maine)
a<- Estados[c(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250),]
A10<-a[c(1,6,11,16,21),]
A20<-a[c(2,7,12,17,22),]
A30<-a[c(3,8,13,18,23),]
A40<-a[c(4,9,14,19,24),]
A50<-a[c(5,10,15,20,25),]
rownames(A10) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A20) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A30) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A40) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A50) <- c('California','Arizona','Indiana','Montana','Maine')
mapa_estados <- map_data("state")

Mapa dentro de 10 años

rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A10$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A10$`Point Forecast` <- cut(A10$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A10$region <- c('california','arizona','indiana','montana','maine')
mapa_10 <- full_join(A10,mapa_estados, by="region")
ggplot() +
  geom_map(data = mapa_10, map = mapa_10,
           aes(x = long, y = lat, map_id = region, fill = mapa_10$`Point Forecast`),
           color = "black", size = 0.1) +
  scale_fill_identity() +  # Utilizar los colores directamente de la columna 'color'
  expand_limits(x = mapa_10$long, y = mapa_10$lat) +
  theme_void() +
  labs(title = "Mapa de población por estado en Estados Unidos dentro de 10 años")

Mapa dentro de 20 años

rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A20$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A20$`Point Forecast` <- cut(A20$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A20$region <- c('california','arizona','indiana','montana','maine')
mapa_20 <- full_join(A20,mapa_estados, by="region")
ggplot() +
  geom_map(data = mapa_20, map = mapa_20,
           aes(x = long, y = lat, map_id = region, fill = mapa_20$`Point Forecast`),
           color = "black", size = 0.1) +
  scale_fill_identity() +  # Utilizar los colores directamente de la columna 'color'
  expand_limits(x = mapa_20$long, y = mapa_20$lat) +
  theme_void() +
  labs(title = "Mapa de población por estado en Estados Unidos dentro de 20 años")

Mapa dentro de 30 años

rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A30$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A30$`Point Forecast` <- cut(A30$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A30$region <- c('california','arizona','indiana','montana','maine')
mapa_30 <- full_join(A30,mapa_estados, by="region")
ggplot() +
  geom_map(data = mapa_30, map = mapa_30,
           aes(x = long, y = lat, map_id = region, fill = mapa_30$`Point Forecast`),
           color = "black", size = 0.1) +
  scale_fill_identity() +  # Utilizar los colores directamente de la columna 'color'
  expand_limits(x = mapa_30$long, y = mapa_30$lat) +
  theme_void() +
  labs(title = "Mapa de población por estado en Estados Unidos dentro de 30 años")

Mapa dentro de 40 años

rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A40$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A40$`Point Forecast` <- cut(A40$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A40$region <- c('california','arizona','indiana','montana','maine')
mapa_40 <- full_join(A40,mapa_estados, by="region")
ggplot() +
  geom_map(data = mapa_40, map = mapa_40,
           aes(x = long, y = lat, map_id = region, fill = mapa_40$`Point Forecast`),
           color = "black", size = 0.1) +
  scale_fill_identity() +  # Utilizar los colores directamente de la columna 'color'
  expand_limits(x = mapa_40$long, y = mapa_40$lat) +
  theme_void() +
  labs(title = "Mapa de población por estado en Estados Unidos dentro de 40 años")

Mapa dentro de 50 años

rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A50$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A50$`Point Forecast` <- cut(A50$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A50$region <- c('california','arizona','indiana','montana','maine')
mapa_50 <- full_join(A50,mapa_estados, by="region")
ggplot() +
  geom_map(data = mapa_50, map = mapa_50,
           aes(x = long, y = lat, map_id = region, fill = mapa_50$`Point Forecast`),
           color = "black", size = 0.1) +
  scale_fill_identity() +  # Utilizar los colores directamente de la columna 'color'
  expand_limits(x = mapa_50$long, y = mapa_50$lat) +
  theme_void() +
  labs(title = "Mapa de población por estado en Estados Unidos dentro de 50 años")

LS0tCnRpdGxlOiAiQWN0aXZpZGFkIEludGVncmFkb3JhIgphdXRob3I6ICJUYW5pYSBPcnRlZ2EgLSBBMDE3MjE0NDkiCmRhdGU6ICIyMDI0LTAyLTIxIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQotLS0KCiFbXSh1c2EuZ2lmKQoKIyMgQW7DoWxpc2lzIGRlIGxhIFBvbGFjacOzbiBkZSBlc3RhZG9zIGRlIEVzdGFkb3MgVW5pZG9zLiAgCiMjIyMgRXF1aXBvIDcgICAgICAgIAojIyMjIyMgVGFuaWEgT3J0ZWdhICAgICAgIAojIyMjIyMgSHVtYmVydG8gTWVuYSAgICAgICAgCiMjIyMjIyBBcmVzIE1lbMOpbmRleiAgICAgICAgCgoKIyMjIyMgTGxhbWFkbyBkZSBsaWJyZXLDrWFzCmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ3Bsb3RzKQpsaWJyYXJ5KHBsbSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZm9yZWNhc3QpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc2YpCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShkcGx5cikKbGlicmFyeShtYXBzKQpgYGAKCgojIyBPYnRlbmNpw7NuIGRlIGxvcyBkYXRvcyAKYGBge3J9CnBvcHVsYXRpb24gPC0gcmVhZF9jc3YoIlVTQV9Qb3B1bGF0aW9uLmNzdiIpCmBgYAoKIyMjIFNlbGVjY2nDs24gZGUgNSBlc3RhZG9zCiMjIyMjIyBDYWxpZm9ybmlhIChDQSkKIyMjIyMjIEFyaXpvbmEgKEFaKQojIyMjIyMgSW5pZGlhbmEgKElOKQojIyMjIyBNb250YW5hIChNVCkKIyMjIyMgTWFpbmUgKE1FKQoKYGBge3J9CkNBIDwtIHBvcHVsYXRpb25bcG9wdWxhdGlvbiRTdGF0ZSA9PSAiQ0EiLF0KQVogPC0gcG9wdWxhdGlvbltwb3B1bGF0aW9uJFN0YXRlID09ICJBWiIsXQpJTiA8LSBwb3B1bGF0aW9uW3BvcHVsYXRpb24kU3RhdGUgPT0gIklOIixdCk1UIDwtIHBvcHVsYXRpb25bcG9wdWxhdGlvbiRTdGF0ZSA9PSAiTVQiLF0KTUUgPC0gcG9wdWxhdGlvbltwb3B1bGF0aW9uJFN0YXRlID09ICJNRSIsXQpgYGAKCiMjIFNlcmllIGRlIHRpZW1wbyBkZSBsYSBwb2JsYWNpw7NuIHkgZXN0YWRvCmBgYHtyfQp0c19DQSA8LSB0cyhkYXRhPUNBJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19DQQpgYGAKCmBgYHtyfQp0c19BWiA8LSB0cyhkYXRhPUFaJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19BWgpgYGAKCmBgYHtyfQp0c19JTiA8LSB0cyhkYXRhPUlOJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19JTgpgYGAKCmBgYHtyfQp0c19NVCA8LSB0cyhkYXRhPU1UJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19NVApgYGAKCmBgYHtyfQp0c19NRSA8LSB0cyhkYXRhPU1FJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19NRQpgYGAKIyMgQXBsaWNhY2nDs24gZGUgQVJJTUEKCmBgYHtyfQphcmltYTEgPC0gYXV0by5hcmltYSh0c19DQSwgRD0xKQpzdW1tYXJ5KGFyaW1hMSkKYGBgCgpgYGB7cn0KYXJpbWEyIDwtIGF1dG8uYXJpbWEodHNfQVosIEQ9MSkKc3VtbWFyeShhcmltYTIpCmBgYAoKYGBge3J9CmFyaW1hMyA8LSBhdXRvLmFyaW1hKHRzX0lOLCBEPTEpCnN1bW1hcnkoYXJpbWEzKQpgYGAKCmBgYHtyfQphcmltYTQgPC0gYXV0by5hcmltYSh0c19NVCwgRD0xKQpzdW1tYXJ5KGFyaW1hNCkKYGBgCgpgYGB7cn0KYXJpbWE1IDwtIGF1dG8uYXJpbWEodHNfTUUsIEQ9MSkKc3VtbWFyeShhcmltYTUpCmBgYAoKIyMgUHJvbsOzc3RpY29zIGRlbnRybyBkZSBsYXMgc2lndWllbnRlcyA1IGTDqWNhZGFzCgojIyMgUHJvbsOzc3RpY28gQ2FsaWZvcm5pYQpgYGB7cn0KcHJvbm9zdGljb19DQTUgPC0gZm9yZWNhc3QoYXJpbWExLCBsZXZlbCA9Yyg1MCksIGg9NTApCnByb25vc3RpY29fQ0E1CnBsb3QocHJvbm9zdGljb19DQTUpCmBgYAoKIyMjIFByb27Ds3N0aWNvIEFyaXpvbmEKYGBge3J9CnByb25vc3RpY29fQVo1IDwtIGZvcmVjYXN0KGFyaW1hMiwgbGV2ZWwgPWMoNTApLCBoPTUwKQpwcm9ub3N0aWNvX0FaNQpwbG90KHByb25vc3RpY29fQVo1KQpgYGAKCiMjIyBQcm9uw7NzdGljbyBJbmRpYW5hCmBgYHtyfQpwcm9ub3N0aWNvX0lONSA8LSBmb3JlY2FzdChhcmltYTMsIGxldmVsID1jKDUwKSwgaD01MCkKcHJvbm9zdGljb19JTjUKcGxvdChwcm9ub3N0aWNvX0lONSkKYGBgCgojIyMgUHJvbsOzc3RpY28gTW9udGFuYQpgYGB7cn0KcHJvbm9zdGljb19NVDUgPC0gZm9yZWNhc3QoYXJpbWE0LCBsZXZlbCA9Yyg1MCksIGg9NTApCnByb25vc3RpY29fTVQ1CnBsb3QocHJvbm9zdGljb19NVDUpCmBgYAoKIyMjIyBQcm9uw7NzdGljbyBNYWluZQpgYGB7cn0KcHJvbm9zdGljb19NRTUgPC0gZm9yZWNhc3QoYXJpbWE1LCBsZXZlbCA9Yyg1MCksIGg9NTApCnByb25vc3RpY29fTUU1CnBsb3QocHJvbm9zdGljb19NRTUpCmBgYAoKIyMgTWFwYXMKCiMjIyBDb252ZXJ0aXIgYSBkYXRhZnJhbWUgcGFyYSBwb2RlciBqdW50YXIgbGEgaW5mb3JtYWNpw7NuIGRlIGNhZGEgdW5hIGRlIGxhcyBkw6ljYWRhcwpgYGB7cn0KQ2FsaWZvcm5pYTwtIGFzLmRhdGEuZnJhbWUocHJvbm9zdGljb19DQTUpCkFyaXpvbmE8LSBhcy5kYXRhLmZyYW1lKHByb25vc3RpY29fQVo1KQpJbmRpYW5hPC0gYXMuZGF0YS5mcmFtZShwcm9ub3N0aWNvX0lONSkKTW9udGFuYTwtIGFzLmRhdGEuZnJhbWUocHJvbm9zdGljb19NVDUpCk1haW5lPC0gYXMuZGF0YS5mcmFtZShwcm9ub3N0aWNvX01FNSkKYGBgCgpgYGB7cn0KI2E8LSBhW2MoMTEsMjEsMzEpLF0KRXN0YWRvczwtcmJpbmQoQ2FsaWZvcm5pYSxBcml6b25hLEluZGlhbmEsTW9udGFuYSxNYWluZSkKYGBgCgpgYGB7cn0KYTwtIEVzdGFkb3NbYygxMCwyMCwzMCw0MCw1MCw2MCw3MCw4MCw5MCwxMDAsMTEwLDEyMCwxMzAsMTQwLDE1MCwxNjAsMTcwLDE4MCwxOTAsMjAwLDIxMCwyMjAsMjMwLDI0MCwyNTApLF0KYGBgCgpgYGB7cn0KQTEwPC1hW2MoMSw2LDExLDE2LDIxKSxdCkEyMDwtYVtjKDIsNywxMiwxNywyMiksXQpBMzA8LWFbYygzLDgsMTMsMTgsMjMpLF0KQTQwPC1hW2MoNCw5LDE0LDE5LDI0KSxdCkE1MDwtYVtjKDUsMTAsMTUsMjAsMjUpLF0KYGBgCgpgYGB7cn0Kcm93bmFtZXMoQTEwKSA8LSBjKCdDYWxpZm9ybmlhJywnQXJpem9uYScsJ0luZGlhbmEnLCdNb250YW5hJywnTWFpbmUnKQpyb3duYW1lcyhBMjApIDwtIGMoJ0NhbGlmb3JuaWEnLCdBcml6b25hJywnSW5kaWFuYScsJ01vbnRhbmEnLCdNYWluZScpCnJvd25hbWVzKEEzMCkgPC0gYygnQ2FsaWZvcm5pYScsJ0FyaXpvbmEnLCdJbmRpYW5hJywnTW9udGFuYScsJ01haW5lJykKcm93bmFtZXMoQTQwKSA8LSBjKCdDYWxpZm9ybmlhJywnQXJpem9uYScsJ0luZGlhbmEnLCdNb250YW5hJywnTWFpbmUnKQpyb3duYW1lcyhBNTApIDwtIGMoJ0NhbGlmb3JuaWEnLCdBcml6b25hJywnSW5kaWFuYScsJ01vbnRhbmEnLCdNYWluZScpCmBgYAoKYGBge3J9Cm1hcGFfZXN0YWRvcyA8LSBtYXBfZGF0YSgic3RhdGUiKQpgYGAKCiMjIyBNYXBhIGRlbnRybyBkZSAxMCBhw7FvcwoKYGBge3J9CnJhbmdvc19wb2JsYWNpb24gPC0gYygwLCAyMDAwMDAwLCA2MDAwMDAwLCAxMDAwMDAwMCwgMTYwMDAwMDAsIG1heChBMTAkYFBvaW50IEZvcmVjYXN0YCkpCmNvbG9yZXMgPC0gYygibGlnaHRibHVlIiwgInNreWJsdWUiLCAiZGFya2N5YW4iLCAiYmx1ZTIiLCAiZGFya2JsdWUiKQpgYGAKCmBgYHtyfQojIENyZWFyIHVuYSBjb2x1bW5hIGVuIGRhdG9zX2NvbXBsZXRvcyBxdWUgaW5kaXF1ZSBlbCByYW5nbyBkZSBwb2JsYWNpw7NuCkExMCRgUG9pbnQgRm9yZWNhc3RgIDwtIGN1dChBMTAkYFBvaW50IEZvcmVjYXN0YCwgYnJlYWtzID0gcmFuZ29zX3BvYmxhY2lvbiwgbGFiZWxzID0gY29sb3JlcykKCmBgYAoKYGBge3J9CkExMCRyZWdpb24gPC0gYygnY2FsaWZvcm5pYScsJ2FyaXpvbmEnLCdpbmRpYW5hJywnbW9udGFuYScsJ21haW5lJykKYGBgCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQptYXBhXzEwIDwtIGZ1bGxfam9pbihBMTAsbWFwYV9lc3RhZG9zLCBieT0icmVnaW9uIikKZ2dwbG90KCkgKwogIGdlb21fbWFwKGRhdGEgPSBtYXBhXzEwLCBtYXAgPSBtYXBhXzEwLAogICAgICAgICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgbWFwX2lkID0gcmVnaW9uLCBmaWxsID0gbWFwYV8xMCRgUG9pbnQgRm9yZWNhc3RgKSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjEpICsKICBzY2FsZV9maWxsX2lkZW50aXR5KCkgKyAgIyBVdGlsaXphciBsb3MgY29sb3JlcyBkaXJlY3RhbWVudGUgZGUgbGEgY29sdW1uYSAnY29sb3InCiAgZXhwYW5kX2xpbWl0cyh4ID0gbWFwYV8xMCRsb25nLCB5ID0gbWFwYV8xMCRsYXQpICsKICB0aGVtZV92b2lkKCkgKwogIGxhYnModGl0bGUgPSAiTWFwYSBkZSBwb2JsYWNpw7NuIHBvciBlc3RhZG8gZW4gRXN0YWRvcyBVbmlkb3MgZGVudHJvIGRlIDEwIGHDsW9zIikKYGBgCgojIyMgTWFwYSBkZW50cm8gZGUgMjAgYcOxb3MKYGBge3J9CnJhbmdvc19wb2JsYWNpb24gPC0gYygwLCAyMDAwMDAwLCA2MDAwMDAwLCAxMDAwMDAwMCwgMTYwMDAwMDAsIG1heChBMjAkYFBvaW50IEZvcmVjYXN0YCkpCmNvbG9yZXMgPC0gYygibGlnaHRibHVlIiwgInNreWJsdWUiLCAiZGFya2N5YW4iLCAiYmx1ZTIiLCAiZGFya2JsdWUiKQpgYGAKCmBgYHtyfQojIENyZWFyIHVuYSBjb2x1bW5hIGVuIGRhdG9zX2NvbXBsZXRvcyBxdWUgaW5kaXF1ZSBlbCByYW5nbyBkZSBwb2JsYWNpw7NuCkEyMCRgUG9pbnQgRm9yZWNhc3RgIDwtIGN1dChBMjAkYFBvaW50IEZvcmVjYXN0YCwgYnJlYWtzID0gcmFuZ29zX3BvYmxhY2lvbiwgbGFiZWxzID0gY29sb3JlcykKCmBgYAoKYGBge3J9CkEyMCRyZWdpb24gPC0gYygnY2FsaWZvcm5pYScsJ2FyaXpvbmEnLCdpbmRpYW5hJywnbW9udGFuYScsJ21haW5lJykKYGBgCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQptYXBhXzIwIDwtIGZ1bGxfam9pbihBMjAsbWFwYV9lc3RhZG9zLCBieT0icmVnaW9uIikKZ2dwbG90KCkgKwogIGdlb21fbWFwKGRhdGEgPSBtYXBhXzIwLCBtYXAgPSBtYXBhXzIwLAogICAgICAgICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgbWFwX2lkID0gcmVnaW9uLCBmaWxsID0gbWFwYV8yMCRgUG9pbnQgRm9yZWNhc3RgKSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjEpICsKICBzY2FsZV9maWxsX2lkZW50aXR5KCkgKyAgIyBVdGlsaXphciBsb3MgY29sb3JlcyBkaXJlY3RhbWVudGUgZGUgbGEgY29sdW1uYSAnY29sb3InCiAgZXhwYW5kX2xpbWl0cyh4ID0gbWFwYV8yMCRsb25nLCB5ID0gbWFwYV8yMCRsYXQpICsKICB0aGVtZV92b2lkKCkgKwogIGxhYnModGl0bGUgPSAiTWFwYSBkZSBwb2JsYWNpw7NuIHBvciBlc3RhZG8gZW4gRXN0YWRvcyBVbmlkb3MgZGVudHJvIGRlIDIwIGHDsW9zIikKYGBgCgojIyMgTWFwYSBkZW50cm8gZGUgMzAgYcOxb3MKYGBge3J9CnJhbmdvc19wb2JsYWNpb24gPC0gYygwLCAyMDAwMDAwLCA2MDAwMDAwLCAxMDAwMDAwMCwgMTYwMDAwMDAsIG1heChBMzAkYFBvaW50IEZvcmVjYXN0YCkpCmNvbG9yZXMgPC0gYygibGlnaHRibHVlIiwgInNreWJsdWUiLCAiZGFya2N5YW4iLCAiYmx1ZTIiLCAiZGFya2JsdWUiKQpgYGAKCmBgYHtyfQojIENyZWFyIHVuYSBjb2x1bW5hIGVuIGRhdG9zX2NvbXBsZXRvcyBxdWUgaW5kaXF1ZSBlbCByYW5nbyBkZSBwb2JsYWNpw7NuCkEzMCRgUG9pbnQgRm9yZWNhc3RgIDwtIGN1dChBMzAkYFBvaW50IEZvcmVjYXN0YCwgYnJlYWtzID0gcmFuZ29zX3BvYmxhY2lvbiwgbGFiZWxzID0gY29sb3JlcykKCmBgYAoKYGBge3J9CkEzMCRyZWdpb24gPC0gYygnY2FsaWZvcm5pYScsJ2FyaXpvbmEnLCdpbmRpYW5hJywnbW9udGFuYScsJ21haW5lJykKYGBgCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQptYXBhXzMwIDwtIGZ1bGxfam9pbihBMzAsbWFwYV9lc3RhZG9zLCBieT0icmVnaW9uIikKZ2dwbG90KCkgKwogIGdlb21fbWFwKGRhdGEgPSBtYXBhXzMwLCBtYXAgPSBtYXBhXzMwLAogICAgICAgICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgbWFwX2lkID0gcmVnaW9uLCBmaWxsID0gbWFwYV8zMCRgUG9pbnQgRm9yZWNhc3RgKSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjEpICsKICBzY2FsZV9maWxsX2lkZW50aXR5KCkgKyAgIyBVdGlsaXphciBsb3MgY29sb3JlcyBkaXJlY3RhbWVudGUgZGUgbGEgY29sdW1uYSAnY29sb3InCiAgZXhwYW5kX2xpbWl0cyh4ID0gbWFwYV8zMCRsb25nLCB5ID0gbWFwYV8zMCRsYXQpICsKICB0aGVtZV92b2lkKCkgKwogIGxhYnModGl0bGUgPSAiTWFwYSBkZSBwb2JsYWNpw7NuIHBvciBlc3RhZG8gZW4gRXN0YWRvcyBVbmlkb3MgZGVudHJvIGRlIDMwIGHDsW9zIikKYGBgCgoKIyMjIE1hcGEgZGVudHJvIGRlIDQwIGHDsW9zCgpgYGB7cn0KcmFuZ29zX3BvYmxhY2lvbiA8LSBjKDAsIDIwMDAwMDAsIDYwMDAwMDAsIDEwMDAwMDAwLCAxNjAwMDAwMCwgbWF4KEE0MCRgUG9pbnQgRm9yZWNhc3RgKSkKY29sb3JlcyA8LSBjKCJsaWdodGJsdWUiLCAic2t5Ymx1ZSIsICJkYXJrY3lhbiIsICJibHVlMiIsICJkYXJrYmx1ZSIpCmBgYAoKYGBge3J9CiMgQ3JlYXIgdW5hIGNvbHVtbmEgZW4gZGF0b3NfY29tcGxldG9zIHF1ZSBpbmRpcXVlIGVsIHJhbmdvIGRlIHBvYmxhY2nDs24KQTQwJGBQb2ludCBGb3JlY2FzdGAgPC0gY3V0KEE0MCRgUG9pbnQgRm9yZWNhc3RgLCBicmVha3MgPSByYW5nb3NfcG9ibGFjaW9uLCBsYWJlbHMgPSBjb2xvcmVzKQoKYGBgCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQpBNDAkcmVnaW9uIDwtIGMoJ2NhbGlmb3JuaWEnLCdhcml6b25hJywnaW5kaWFuYScsJ21vbnRhbmEnLCdtYWluZScpCmBgYAoKYGBge3Igd2FybmluZz1GQUxTRX0KbWFwYV80MCA8LSBmdWxsX2pvaW4oQTQwLG1hcGFfZXN0YWRvcywgYnk9InJlZ2lvbiIpCmdncGxvdCgpICsKICBnZW9tX21hcChkYXRhID0gbWFwYV80MCwgbWFwID0gbWFwYV80MCwKICAgICAgICAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIG1hcF9pZCA9IHJlZ2lvbiwgZmlsbCA9IG1hcGFfNDAkYFBvaW50IEZvcmVjYXN0YCksCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4xKSArCiAgc2NhbGVfZmlsbF9pZGVudGl0eSgpICsgICMgVXRpbGl6YXIgbG9zIGNvbG9yZXMgZGlyZWN0YW1lbnRlIGRlIGxhIGNvbHVtbmEgJ2NvbG9yJwogIGV4cGFuZF9saW1pdHMoeCA9IG1hcGFfNDAkbG9uZywgeSA9IG1hcGFfNDAkbGF0KSArCiAgdGhlbWVfdm9pZCgpICsKICBsYWJzKHRpdGxlID0gIk1hcGEgZGUgcG9ibGFjacOzbiBwb3IgZXN0YWRvIGVuIEVzdGFkb3MgVW5pZG9zIGRlbnRybyBkZSA0MCBhw7FvcyIpCmBgYAoKCiMjIyBNYXBhIGRlbnRybyBkZSA1MCBhw7FvcwpgYGB7cn0KcmFuZ29zX3BvYmxhY2lvbiA8LSBjKDAsIDIwMDAwMDAsIDYwMDAwMDAsIDEwMDAwMDAwLCAxNjAwMDAwMCwgbWF4KEE1MCRgUG9pbnQgRm9yZWNhc3RgKSkKY29sb3JlcyA8LSBjKCJsaWdodGJsdWUiLCAic2t5Ymx1ZSIsICJkYXJrY3lhbiIsICJibHVlMiIsICJkYXJrYmx1ZSIpCmBgYAoKYGBge3J9CiMgQ3JlYXIgdW5hIGNvbHVtbmEgZW4gZGF0b3NfY29tcGxldG9zIHF1ZSBpbmRpcXVlIGVsIHJhbmdvIGRlIHBvYmxhY2nDs24KQTUwJGBQb2ludCBGb3JlY2FzdGAgPC0gY3V0KEE1MCRgUG9pbnQgRm9yZWNhc3RgLCBicmVha3MgPSByYW5nb3NfcG9ibGFjaW9uLCBsYWJlbHMgPSBjb2xvcmVzKQoKYGBgCgpgYGB7cn0KQTUwJHJlZ2lvbiA8LSBjKCdjYWxpZm9ybmlhJywnYXJpem9uYScsJ2luZGlhbmEnLCdtb250YW5hJywnbWFpbmUnKQpgYGAKCmBgYHtyIHdhcm5pbmc9RkFMU0V9Cm1hcGFfNTAgPC0gZnVsbF9qb2luKEE1MCxtYXBhX2VzdGFkb3MsIGJ5PSJyZWdpb24iKQpnZ3Bsb3QoKSArCiAgZ2VvbV9tYXAoZGF0YSA9IG1hcGFfNTAsIG1hcCA9IG1hcGFfNTAsCiAgICAgICAgICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBtYXBfaWQgPSByZWdpb24sIGZpbGwgPSBtYXBhXzUwJGBQb2ludCBGb3JlY2FzdGApLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2ZpbGxfaWRlbnRpdHkoKSArICAjIFV0aWxpemFyIGxvcyBjb2xvcmVzIGRpcmVjdGFtZW50ZSBkZSBsYSBjb2x1bW5hICdjb2xvcicKICBleHBhbmRfbGltaXRzKHggPSBtYXBhXzUwJGxvbmcsIHkgPSBtYXBhXzUwJGxhdCkgKwogIHRoZW1lX3ZvaWQoKSArCiAgbGFicyh0aXRsZSA9ICJNYXBhIGRlIHBvYmxhY2nDs24gcG9yIGVzdGFkbyBlbiBFc3RhZG9zIFVuaWRvcyBkZW50cm8gZGUgNTAgYcOxb3MiKQpgYGAKCgoK