#  load dependencies
library(biscale)
library(tidycensus)
library(ggplot2)
library(cowplot)
library(rgeoboundaries)
library(glue)
library(ggtext)
library(dplyr)
library(showtext)
library(sf)

NJ_county <- 
  get_acs(geography = "county", 
          variables = c("B01003_001", "B19013_001", 
                        "B02001_002", "B08013_001",
                        "B08012_001", "B08301_001", 
                        "B08301_010", "B01002_001"), 
          year = 2022, 
          state = "NJ", 
          geometry = TRUE, 
          output = "wide") %>%
  rename(Total_Pop =  B01003_001E,
         Med_Inc = B19013_001E,
         Med_Age = B01002_001E,
         White_Pop = B02001_002E,
         Travel_Time = B08013_001E,
         Num_Commuters = B08012_001E,
         Means_of_Transport = B08301_001E,
         Total_Public_Trans = B08301_010E) %>%
  select(Total_Pop, Med_Inc, White_Pop, Travel_Time,
         Means_of_Transport, Total_Public_Trans,
         Med_Age,
         GEOID, geometry) %>%
  mutate(Percent_White = White_Pop / Total_Pop,
         Mean_Commute_Time = Travel_Time / Total_Public_Trans,
         Percent_Taking_Public_Trans = Total_Public_Trans / Means_of_Transport) %>% 
  st_transform(crs = 4326)
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |                                                                      |   1%
  |                                                                            
  |=                                                                     |   1%
  |                                                                            
  |=                                                                     |   2%
  |                                                                            
  |==                                                                    |   2%
  |                                                                            
  |==                                                                    |   3%
  |                                                                            
  |==                                                                    |   4%
  |                                                                            
  |===                                                                   |   4%
  |                                                                            
  |===                                                                   |   5%
  |                                                                            
  |====                                                                  |   5%
  |                                                                            
  |====                                                                  |   6%
  |                                                                            
  |=====                                                                 |   6%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |=====                                                                 |   8%
  |                                                                            
  |======                                                                |   8%
  |                                                                            
  |======                                                                |   9%
  |                                                                            
  |=======                                                               |  10%
  |                                                                            
  |=======                                                               |  11%
  |                                                                            
  |========                                                              |  11%
  |                                                                            
  |========                                                              |  12%
  |                                                                            
  |=========                                                             |  12%
  |                                                                            
  |=========                                                             |  13%
  |                                                                            
  |==========                                                            |  14%
  |                                                                            
  |==========                                                            |  15%
  |                                                                            
  |===========                                                           |  15%
  |                                                                            
  |===========                                                           |  16%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |============                                                          |  18%
  |                                                                            
  |=============                                                         |  18%
  |                                                                            
  |=============                                                         |  19%
  |                                                                            
  |==============                                                        |  19%
  |                                                                            
  |==============                                                        |  20%
  |                                                                            
  |===============                                                       |  21%
  |                                                                            
  |===============                                                       |  22%
  |                                                                            
  |================                                                      |  22%
  |                                                                            
  |================                                                      |  23%
  |                                                                            
  |=================                                                     |  24%
  |                                                                            
  |=================                                                     |  25%
  |                                                                            
  |==================                                                    |  25%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |===================                                                   |  26%
  |                                                                            
  |===================                                                   |  27%
  |                                                                            
  |===================                                                   |  28%
  |                                                                            
  |====================                                                  |  28%
  |                                                                            
  |====================                                                  |  29%
  |                                                                            
  |=====================                                                 |  30%
  |                                                                            
  |======================                                                |  31%
  |                                                                            
  |======================                                                |  32%
  |                                                                            
  |=======================                                               |  32%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |=======================                                               |  34%
  |                                                                            
  |========================                                              |  34%
  |                                                                            
  |========================                                              |  35%
  |                                                                            
  |=========================                                             |  35%
  |                                                                            
  |=========================                                             |  36%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |==========================                                            |  38%
  |                                                                            
  |===========================                                           |  38%
  |                                                                            
  |===========================                                           |  39%
  |                                                                            
  |============================                                          |  39%
  |                                                                            
  |============================                                          |  40%
  |                                                                            
  |=============================                                         |  41%
  |                                                                            
  |=============================                                         |  42%
  |                                                                            
  |==============================                                        |  42%
  |                                                                            
  |==============================                                        |  43%
  |                                                                            
  |===============================                                       |  44%
  |                                                                            
  |===============================                                       |  45%
  |                                                                            
  |================================                                      |  45%
  |                                                                            
  |================================                                      |  46%
  |                                                                            
  |=================================                                     |  47%
  |                                                                            
  |=================================                                     |  48%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |==================================                                    |  49%
  |                                                                            
  |===================================                                   |  49%
  |                                                                            
  |===================================                                   |  50%
  |                                                                            
  |====================================                                  |  51%
  |                                                                            
  |====================================                                  |  52%
  |                                                                            
  |=====================================                                 |  53%
  |                                                                            
  |======================================                                |  54%
  |                                                                            
  |======================================                                |  55%
  |                                                                            
  |=======================================                               |  55%
  |                                                                            
  |=======================================                               |  56%
  |                                                                            
  |========================================                              |  56%
  |                                                                            
  |========================================                              |  57%
  |                                                                            
  |========================================                              |  58%
  |                                                                            
  |=========================================                             |  58%
  |                                                                            
  |=========================================                             |  59%
  |                                                                            
  |==========================================                            |  59%
  |                                                                            
  |==========================================                            |  60%
  |                                                                            
  |==========================================                            |  61%
  |                                                                            
  |===========================================                           |  61%
  |                                                                            
  |===========================================                           |  62%
  |                                                                            
  |============================================                          |  62%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |==============================================                        |  65%
  |                                                                            
  |==============================================                        |  66%
  |                                                                            
  |===============================================                       |  66%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |================================================                      |  68%
  |                                                                            
  |================================================                      |  69%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |=================================================                     |  71%
  |                                                                            
  |==================================================                    |  71%
  |                                                                            
  |==================================================                    |  72%
  |                                                                            
  |===================================================                   |  73%
  |                                                                            
  |====================================================                  |  74%
  |                                                                            
  |====================================================                  |  75%
  |                                                                            
  |=====================================================                 |  75%
  |                                                                            
  |=====================================================                 |  76%
  |                                                                            
  |======================================================                |  77%
  |                                                                            
  |======================================================                |  78%
  |                                                                            
  |=======================================================               |  78%
  |                                                                            
  |=======================================================               |  79%
  |                                                                            
  |========================================================              |  80%
  |                                                                            
  |=========================================================             |  81%
  |                                                                            
  |=========================================================             |  82%
  |                                                                            
  |==========================================================            |  82%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |==========================================================            |  84%
  |                                                                            
  |===========================================================           |  84%
  |                                                                            
  |===========================================================           |  85%
  |                                                                            
  |============================================================          |  85%
  |                                                                            
  |============================================================          |  86%
  |                                                                            
  |=============================================================         |  87%
  |                                                                            
  |=============================================================         |  88%
  |                                                                            
  |==============================================================        |  88%
  |                                                                            
  |==============================================================        |  89%
  |                                                                            
  |===============================================================       |  89%
  |                                                                            
  |===============================================================       |  90%
  |                                                                            
  |===============================================================       |  91%
  |                                                                            
  |================================================================      |  91%
  |                                                                            
  |================================================================      |  92%
  |                                                                            
  |=================================================================     |  92%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |=================================================================     |  94%
  |                                                                            
  |==================================================================    |  94%
  |                                                                            
  |==================================================================    |  95%
  |                                                                            
  |===================================================================   |  95%
  |                                                                            
  |===================================================================   |  96%
  |                                                                            
  |====================================================================  |  97%
  |                                                                            
  |====================================================================  |  98%
  |                                                                            
  |===================================================================== |  98%
  |                                                                            
  |===================================================================== |  99%
  |                                                                            
  |======================================================================| 100%
usa <- geoboundaries(country = "United States", adm_lvl = "adm1") %>% 
  st_transform(crs = 4326)
data <- bi_class(NJ_county, x = Percent_White, y = Med_Inc, dim = 3, style = "quantile", keep_factors = TRUE)

monmouth_coords <- c(-74.2, 40.3)  # You can adjust this based on Monmouth County's centroid coordinates

cape_may <- c(-74.9, 38.94)

sussex <-  c(-74.7051, 41.705)
# draw legend with adjusted font size
legend <- bi_legend(pal = "DkBlue",
                    xlab = "Higher % White",
                    ylab = "Higher Income",
                    size = 6)
# draw map
map <- ggplot() +
    geom_sf(data = usa, fill="lightgrey", color = "white", lwd = 0.9) +

  geom_sf(data = data, aes(fill = bi_class), color = "white", size = 0.1, show.legend = FALSE) +
 coord_sf(xlim = c(-78, -71), 
         ylim = c(38, 42),         
         expand = FALSE           # Ensure the frame does not auto-expand
) +
  bi_scale_fill(pal = "DkBlue", dim = 3) +
  
  # Add annotation text for Monmouth County
    annotate("text", x = sussex[1] - 1.3, y = sussex[2]-0.3, label = "Higher Income\nHigher % White", 
             color = "#00008B", size = 3.5, hjust = 0.5, vjust = 1) +
  
  # Add a line segment pointing to the annotation
    geom_segment(aes(x = sussex[1] - 0.7  , y = sussex[2] - 0.5 , 
                     xend = sussex[1] , 
                     yend = sussex[2] - 0.5 ), 
                 color = "#00008B", size = 0.8, 
                 arrow = arrow(type = "closed", length = unit(0.1, "inches"))) +
  
  # Add annotation text for Monmouth County
    annotate("text", x = cape_may[1]+ 1.2, y = cape_may[2] + 0.2 , label = "Lower Income\nHigher % White", 
             color = "#008B8B", size = 3.5, hjust = 0.5, vjust = 1) +
  
  # Add a line segment pointing to the annotation
    geom_segment(aes(x = cape_may[1] + 0.65, y = cape_may[2]  , 
                     xend = cape_may[1] , 
                     yend = cape_may[2] + 0.1 ), 
                 color = "#008B8B", size = 0.8, 
                 arrow = arrow(type = "closed", length = unit(0.1, "inches"))) +
  
  labs(
    title = "<span style='color:#A25F99;'>**Income**</span> and <span style='color:#008B8B;'>Percentage of White Population </span> in 2022",
    subtitle = "By County in New Jersey, Based on Census Tract Data",
    caption = "30 day map challenge | Day 16 - Choropleth\nAuthor: Jiatong Su\nData Source:  Census tract data\n@weitzman_musa"
  ) +
  bi_theme() +
    theme(
  plot.title = element_markdown(size = 15, color = "#4e4d47", margin=margin(0,0,0,1)),
  plot.subtitle = element_text(size = 10, margin = margin(5,0,0,1), face="bold"),
    plot.caption = element_text(hjust = 0, size = 5, face="bold"),
     axis.text = element_blank(),
        axis.ticks = element_blank(),
        axis.title = element_blank())



finalPlot <- ggdraw() +
  draw_plot(map, 0, 0, 1, 1) +
  draw_plot(legend, 0.62, 0, 0.25, 0.25)

finalPlot

ggsave("jiatong_day16.png", plot = finalPlot, width = 8, height = 6, dpi = 300)
LS0tCnRpdGxlOiAiRGF5MTIgQ2hvcm9wbGV0aCIKYXV0aG9yOiBKaWF0b25nIFN1Cm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IHNpbXBsZXgKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgcHJvZ3Jlc3M6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHllcwotLS0KCmBgYHtyIHNldHVwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojICBsb2FkIGRlcGVuZGVuY2llcwpsaWJyYXJ5KGJpc2NhbGUpCmxpYnJhcnkodGlkeWNlbnN1cykKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGNvd3Bsb3QpCmxpYnJhcnkocmdlb2JvdW5kYXJpZXMpCmxpYnJhcnkoZ2x1ZSkKbGlicmFyeShnZ3RleHQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoc2hvd3RleHQpCmxpYnJhcnkoc2YpCgpOSl9jb3VudHkgPC0gCiAgZ2V0X2FjcyhnZW9ncmFwaHkgPSAiY291bnR5IiwgCiAgICAgICAgICB2YXJpYWJsZXMgPSBjKCJCMDEwMDNfMDAxIiwgIkIxOTAxM18wMDEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIkIwMjAwMV8wMDIiLCAiQjA4MDEzXzAwMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJCMDgwMTJfMDAxIiwgIkIwODMwMV8wMDEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIkIwODMwMV8wMTAiLCAiQjAxMDAyXzAwMSIpLCAKICAgICAgICAgIHllYXIgPSAyMDIyLCAKICAgICAgICAgIHN0YXRlID0gIk5KIiwgCiAgICAgICAgICBnZW9tZXRyeSA9IFRSVUUsIAogICAgICAgICAgb3V0cHV0ID0gIndpZGUiKSAlPiUKICByZW5hbWUoVG90YWxfUG9wID0gIEIwMTAwM18wMDFFLAogICAgICAgICBNZWRfSW5jID0gQjE5MDEzXzAwMUUsCiAgICAgICAgIE1lZF9BZ2UgPSBCMDEwMDJfMDAxRSwKICAgICAgICAgV2hpdGVfUG9wID0gQjAyMDAxXzAwMkUsCiAgICAgICAgIFRyYXZlbF9UaW1lID0gQjA4MDEzXzAwMUUsCiAgICAgICAgIE51bV9Db21tdXRlcnMgPSBCMDgwMTJfMDAxRSwKICAgICAgICAgTWVhbnNfb2ZfVHJhbnNwb3J0ID0gQjA4MzAxXzAwMUUsCiAgICAgICAgIFRvdGFsX1B1YmxpY19UcmFucyA9IEIwODMwMV8wMTBFKSAlPiUKICBzZWxlY3QoVG90YWxfUG9wLCBNZWRfSW5jLCBXaGl0ZV9Qb3AsIFRyYXZlbF9UaW1lLAogICAgICAgICBNZWFuc19vZl9UcmFuc3BvcnQsIFRvdGFsX1B1YmxpY19UcmFucywKICAgICAgICAgTWVkX0FnZSwKICAgICAgICAgR0VPSUQsIGdlb21ldHJ5KSAlPiUKICBtdXRhdGUoUGVyY2VudF9XaGl0ZSA9IFdoaXRlX1BvcCAvIFRvdGFsX1BvcCwKICAgICAgICAgTWVhbl9Db21tdXRlX1RpbWUgPSBUcmF2ZWxfVGltZSAvIFRvdGFsX1B1YmxpY19UcmFucywKICAgICAgICAgUGVyY2VudF9UYWtpbmdfUHVibGljX1RyYW5zID0gVG90YWxfUHVibGljX1RyYW5zIC8gTWVhbnNfb2ZfVHJhbnNwb3J0KSAlPiUgCiAgc3RfdHJhbnNmb3JtKGNycyA9IDQzMjYpCgp1c2EgPC0gZ2VvYm91bmRhcmllcyhjb3VudHJ5ID0gIlVuaXRlZCBTdGF0ZXMiLCBhZG1fbHZsID0gImFkbTEiKSAlPiUgCiAgc3RfdHJhbnNmb3JtKGNycyA9IDQzMjYpCgoKCmBgYAoKYGBge3IsIHdhcm5pbmc9RkFMU0V9CmRhdGEgPC0gYmlfY2xhc3MoTkpfY291bnR5LCB4ID0gUGVyY2VudF9XaGl0ZSwgeSA9IE1lZF9JbmMsIGRpbSA9IDMsIHN0eWxlID0gInF1YW50aWxlIiwga2VlcF9mYWN0b3JzID0gVFJVRSkKCm1vbm1vdXRoX2Nvb3JkcyA8LSBjKC03NC4yLCA0MC4zKSAgIyBZb3UgY2FuIGFkanVzdCB0aGlzIGJhc2VkIG9uIE1vbm1vdXRoIENvdW50eSdzIGNlbnRyb2lkIGNvb3JkaW5hdGVzCgpjYXBlX21heSA8LSBjKC03NC45LCAzOC45NCkKCnN1c3NleCA8LSAgYygtNzQuNzA1MSwgNDEuNzA1KQpgYGAKCgpgYGB7ciwgd2FybmluZz1GQUxTRX0KIyBkcmF3IGxlZ2VuZCB3aXRoIGFkanVzdGVkIGZvbnQgc2l6ZQpsZWdlbmQgPC0gYmlfbGVnZW5kKHBhbCA9ICJEa0JsdWUiLAogICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiSGlnaGVyICUgV2hpdGUiLAogICAgICAgICAgICAgICAgICAgIHlsYWIgPSAiSGlnaGVyIEluY29tZSIsCiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDYpCmBgYAoKCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQojIGRyYXcgbWFwCm1hcCA8LSBnZ3Bsb3QoKSArCiAgICBnZW9tX3NmKGRhdGEgPSB1c2EsIGZpbGw9ImxpZ2h0Z3JleSIsIGNvbG9yID0gIndoaXRlIiwgbHdkID0gMC45KSArCgogIGdlb21fc2YoZGF0YSA9IGRhdGEsIGFlcyhmaWxsID0gYmlfY2xhc3MpLCBjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAwLjEsIHNob3cubGVnZW5kID0gRkFMU0UpICsKIGNvb3JkX3NmKHhsaW0gPSBjKC03OCwgLTcxKSwgCiAgICAgICAgIHlsaW0gPSBjKDM4LCA0MiksICAgICAgICAgCiAgICAgICAgIGV4cGFuZCA9IEZBTFNFICAgICAgICAgICAjIEVuc3VyZSB0aGUgZnJhbWUgZG9lcyBub3QgYXV0by1leHBhbmQKKSArCiAgYmlfc2NhbGVfZmlsbChwYWwgPSAiRGtCbHVlIiwgZGltID0gMykgKwogIAogICMgQWRkIGFubm90YXRpb24gdGV4dCBmb3IgTW9ubW91dGggQ291bnR5CiAgICBhbm5vdGF0ZSgidGV4dCIsIHggPSBzdXNzZXhbMV0gLSAxLjMsIHkgPSBzdXNzZXhbMl0tMC4zLCBsYWJlbCA9ICJIaWdoZXIgSW5jb21lXG5IaWdoZXIgJSBXaGl0ZSIsIAogICAgICAgICAgICAgY29sb3IgPSAiIzAwMDA4QiIsIHNpemUgPSAzLjUsIGhqdXN0ID0gMC41LCB2anVzdCA9IDEpICsKICAKICAjIEFkZCBhIGxpbmUgc2VnbWVudCBwb2ludGluZyB0byB0aGUgYW5ub3RhdGlvbgogICAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gc3Vzc2V4WzFdIC0gMC43ICAsIHkgPSBzdXNzZXhbMl0gLSAwLjUgLCAKICAgICAgICAgICAgICAgICAgICAgeGVuZCA9IHN1c3NleFsxXSAsIAogICAgICAgICAgICAgICAgICAgICB5ZW5kID0gc3Vzc2V4WzJdIC0gMC41ICksIAogICAgICAgICAgICAgICAgIGNvbG9yID0gIiMwMDAwOEIiLCBzaXplID0gMC44LCAKICAgICAgICAgICAgICAgICBhcnJvdyA9IGFycm93KHR5cGUgPSAiY2xvc2VkIiwgbGVuZ3RoID0gdW5pdCgwLjEsICJpbmNoZXMiKSkpICsKICAKICAjIEFkZCBhbm5vdGF0aW9uIHRleHQgZm9yIE1vbm1vdXRoIENvdW50eQogICAgYW5ub3RhdGUoInRleHQiLCB4ID0gY2FwZV9tYXlbMV0rIDEuMiwgeSA9IGNhcGVfbWF5WzJdICsgMC4yICwgbGFiZWwgPSAiTG93ZXIgSW5jb21lXG5IaWdoZXIgJSBXaGl0ZSIsIAogICAgICAgICAgICAgY29sb3IgPSAiIzAwOEI4QiIsIHNpemUgPSAzLjUsIGhqdXN0ID0gMC41LCB2anVzdCA9IDEpICsKICAKICAjIEFkZCBhIGxpbmUgc2VnbWVudCBwb2ludGluZyB0byB0aGUgYW5ub3RhdGlvbgogICAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gY2FwZV9tYXlbMV0gKyAwLjY1LCB5ID0gY2FwZV9tYXlbMl0gICwgCiAgICAgICAgICAgICAgICAgICAgIHhlbmQgPSBjYXBlX21heVsxXSAsIAogICAgICAgICAgICAgICAgICAgICB5ZW5kID0gY2FwZV9tYXlbMl0gKyAwLjEgKSwgCiAgICAgICAgICAgICAgICAgY29sb3IgPSAiIzAwOEI4QiIsIHNpemUgPSAwLjgsIAogICAgICAgICAgICAgICAgIGFycm93ID0gYXJyb3codHlwZSA9ICJjbG9zZWQiLCBsZW5ndGggPSB1bml0KDAuMSwgImluY2hlcyIpKSkgKwogIAogIGxhYnMoCiAgICB0aXRsZSA9ICI8c3BhbiBzdHlsZT0nY29sb3I6I0EyNUY5OTsnPioqSW5jb21lKio8L3NwYW4+IGFuZCA8c3BhbiBzdHlsZT0nY29sb3I6IzAwOEI4QjsnPlBlcmNlbnRhZ2Ugb2YgV2hpdGUgUG9wdWxhdGlvbiA8L3NwYW4+IGluIDIwMjIiLAogICAgc3VidGl0bGUgPSAiQnkgQ291bnR5IGluIE5ldyBKZXJzZXksIEJhc2VkIG9uIENlbnN1cyBUcmFjdCBEYXRhIiwKICAgIGNhcHRpb24gPSAiMzAgZGF5IG1hcCBjaGFsbGVuZ2UgfCBEYXkgMTYgLSBDaG9yb3BsZXRoXG5BdXRob3I6IEppYXRvbmcgU3VcbkRhdGEgU291cmNlOiAgQ2Vuc3VzIHRyYWN0IGRhdGFcbkB3ZWl0em1hbl9tdXNhIgogICkgKwogIGJpX3RoZW1lKCkgKwogICAgdGhlbWUoCiAgcGxvdC50aXRsZSA9IGVsZW1lbnRfbWFya2Rvd24oc2l6ZSA9IDE1LCBjb2xvciA9ICIjNGU0ZDQ3IiwgbWFyZ2luPW1hcmdpbigwLDAsMCwxKSksCiAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIG1hcmdpbiA9IG1hcmdpbig1LDAsMCwxKSwgZmFjZT0iYm9sZCIpLAogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCwgc2l6ZSA9IDUsIGZhY2U9ImJvbGQiKSwKICAgICBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKQoKCgpmaW5hbFBsb3QgPC0gZ2dkcmF3KCkgKwogIGRyYXdfcGxvdChtYXAsIDAsIDAsIDEsIDEpICsKICBkcmF3X3Bsb3QobGVnZW5kLCAwLjYyLCAwLCAwLjI1LCAwLjI1KQoKZmluYWxQbG90CmBgYAoKYGBge3J9Cmdnc2F2ZSgiamlhdG9uZ19kYXkxNi5wbmciLCBwbG90ID0gZmluYWxQbG90LCB3aWR0aCA9IDgsIGhlaWdodCA9IDYsIGRwaSA9IDMwMCkKCmBgYAoK