Import údajov

library(readr)

# Načítanie CSV súboru 
Vysledky <- read_csv("student_exam_scores.csv")

tabuľka

library(knitr)

# Základná tabuľka
kable(Vysledky)
student_id hours_studied sleep_hours attendance_percent previous_scores exam_score
S001 8.0 8.8 72.1 45 30.2
S002 1.3 8.6 60.7 55 25.0
S003 4.0 8.2 73.7 86 35.8
S004 3.5 4.8 95.1 66 34.0
S005 9.1 6.4 89.8 71 40.3
S006 8.4 5.1 58.5 75 35.7
S007 10.8 6.0 54.2 88 37.9
S008 2.0 4.3 75.8 55 18.3
S009 5.6 5.9 81.6 84 34.7
S010 1.3 8.9 66.8 70 24.7
S011 3.4 5.3 90.9 81 29.3
S012 6.6 7.9 87.6 85 35.1
S013 1.3 6.3 83.6 71 31.2
S014 3.2 6.1 61.2 68 30.2
S015 8.1 8.8 60.0 90 41.1
S016 7.0 9.0 51.2 41 34.1
S017 3.4 6.8 62.2 45 28.9
S018 7.5 7.6 73.8 58 36.3
S019 9.9 4.8 92.5 54 35.6
S020 1.1 5.5 53.6 65 17.1
S021 9.9 8.8 70.7 84 46.0
S022 8.7 6.9 81.5 55 36.1
S023 4.7 6.7 59.7 59 29.6
S024 2.7 7.7 84.8 82 35.9
S025 11.5 4.3 74.7 77 39.2
S026 4.7 6.9 62.2 63 30.0
S027 2.0 6.5 82.8 70 29.0
S028 2.1 8.3 50.3 75 26.5
S029 10.3 4.8 87.5 73 37.2
S030 7.6 8.8 88.5 62 36.2
S031 9.9 4.4 55.3 67 34.5
S032 9.0 4.9 71.3 87 41.6
S033 6.9 7.0 58.8 75 38.1
S034 11.7 7.4 97.9 61 42.7
S035 5.2 5.2 75.9 62 32.0
S036 7.1 4.6 52.5 84 32.0
S037 10.1 8.5 62.5 69 44.7
S038 7.8 5.2 92.4 57 38.3
S039 10.5 7.0 72.8 59 39.8
S040 7.4 7.1 90.1 56 35.0
S041 8.8 6.1 83.4 54 34.2
S042 1.5 6.9 99.4 47 23.1
S043 3.5 6.6 79.8 86 37.2
S044 4.2 8.7 97.5 52 30.3
S045 1.9 5.0 94.6 60 26.1
S046 3.6 7.6 80.6 47 31.8
S047 2.1 5.2 86.0 87 31.6
S048 4.1 6.0 75.2 74 31.1
S049 8.0 7.4 91.5 88 41.2
S050 5.0 5.5 77.4 84 30.6
S051 5.1 5.6 94.9 51 28.8
S052 3.3 7.8 87.2 52 30.7
S053 3.9 4.4 73.7 53 26.9
S054 11.3 6.3 63.0 87 46.4
S055 8.1 9.0 62.4 70 34.4
S056 7.7 9.0 81.9 57 37.0
S057 2.9 4.4 88.3 86 35.2
S058 9.0 5.1 76.1 77 38.2
S059 2.8 5.3 81.3 88 33.0
S060 5.2 8.7 63.7 73 29.2
S061 11.9 8.4 53.9 78 48.6
S062 8.0 8.4 64.3 58 36.1
S063 7.1 5.8 63.6 46 27.1
S064 8.5 4.8 66.0 93 36.1
S065 10.3 8.2 77.0 52 39.5
S066 9.5 7.5 56.9 58 36.7
S067 3.5 7.1 61.6 54 21.7
S068 1.4 8.9 84.7 63 32.2
S069 4.5 7.3 85.3 51 33.5
S070 3.9 4.0 53.2 59 23.9
S071 3.3 8.1 70.4 40 20.8
S072 11.4 5.5 77.1 85 47.9
S073 10.6 7.3 70.8 74 41.9
S074 4.5 8.7 60.3 48 29.5
S075 8.2 4.7 71.0 57 33.5
S076 5.4 4.6 95.2 42 26.3
S077 11.1 4.5 79.2 43 39.9
S078 6.0 6.8 84.8 75 40.3
S079 3.9 5.4 92.8 58 26.5
S080 3.7 7.0 88.3 84 34.2
S081 7.2 7.6 69.0 48 30.8
S082 3.9 5.0 50.3 80 32.4
S083 7.4 7.2 67.6 95 39.8
S084 10.9 5.3 87.7 88 48.9
S085 5.4 6.4 92.7 71 38.0
S086 3.4 8.5 97.7 46 26.5
S087 12.0 8.2 71.0 95 51.3
S088 6.6 4.5 87.4 40 28.6
S089 2.0 6.1 77.3 76 32.1
S090 1.5 5.4 80.2 58 23.9
S091 2.2 4.0 61.0 70 27.3
S092 7.9 7.9 61.0 70 34.0
S093 9.7 7.2 71.8 68 37.5
S094 5.6 5.3 51.5 61 29.1
S095 1.7 7.7 66.8 51 28.1
S096 5.2 6.8 84.0 43 28.7
S097 12.0 6.1 70.2 56 36.9
S098 6.8 4.0 58.3 95 36.0
S099 11.7 4.4 73.4 70 39.9
S100 10.5 8.4 56.4 47 37.1
S101 1.1 8.5 81.1 92 31.4
S102 8.9 6.7 51.3 44 31.3
S103 8.5 8.2 69.7 65 35.7
S104 6.9 6.9 78.2 71 32.6
S105 3.9 4.7 51.4 44 24.1
S106 8.1 4.6 82.1 76 38.2
S107 2.2 5.5 56.8 80 23.7
S108 5.8 8.5 73.1 83 39.2
S109 6.0 8.0 52.5 43 23.2
S110 11.5 8.3 69.0 49 42.2
S111 10.6 8.5 60.6 49 39.6
S112 3.9 5.1 66.3 91 34.8
S113 6.5 5.2 88.1 76 34.6
S114 3.0 4.5 69.0 59 26.4
S115 11.0 7.9 87.6 45 43.1
S116 10.6 8.4 91.6 55 46.4
S117 4.3 6.0 62.6 47 25.2
S118 8.0 7.1 54.1 75 31.3
S119 7.7 4.8 51.0 88 35.8
S120 2.7 8.6 77.0 66 29.8
S121 9.4 8.3 100.0 78 47.9
S122 6.9 8.9 67.5 78 40.9
S123 9.6 8.1 82.5 90 44.1
S124 6.8 8.4 89.1 79 39.3
S125 1.0 4.1 82.6 54 21.2
S126 4.6 7.7 87.7 89 38.6
S127 1.2 5.7 97.5 73 26.8
S128 11.2 8.7 60.0 64 42.7
S129 10.7 8.0 51.0 68 36.1
S130 10.1 8.3 57.6 68 39.2
S131 4.4 8.1 56.3 59 32.9
S132 1.6 5.3 83.5 95 28.8
S133 10.7 7.9 78.2 77 45.7
S134 11.4 4.5 60.9 67 40.8
S135 1.9 8.4 85.0 59 30.6
S136 6.3 8.3 88.3 76 41.1
S137 1.8 5.1 58.4 79 29.0
S138 9.4 8.1 80.4 43 35.1
S139 9.4 6.3 87.4 79 39.9
S140 2.4 5.5 55.7 87 29.9
S141 6.2 8.0 91.0 46 35.0
S142 7.0 5.1 98.2 88 43.3
S143 3.9 4.1 55.4 53 19.0
S144 10.6 5.0 51.3 80 35.1
S145 5.7 5.6 65.6 53 29.9
S146 3.3 8.3 83.9 56 33.0
S147 6.9 8.8 97.9 82 45.8
S148 9.0 5.4 69.8 45 35.5
S149 3.2 7.2 85.8 50 26.4
S150 4.4 6.0 53.8 55 21.9
S151 11.9 8.9 84.5 51 44.1
S152 8.1 6.7 81.4 75 42.3
S153 5.8 8.7 55.1 44 27.7
S154 6.7 4.6 88.6 50 33.4
S155 2.3 8.9 92.5 40 29.7
S156 3.5 4.9 80.0 66 23.6
S157 4.7 8.8 56.1 68 33.6
S158 7.5 5.3 99.2 84 37.9
S159 3.5 4.5 89.1 78 29.5
S160 3.4 6.2 67.4 70 24.7
S161 1.8 7.6 71.4 58 25.2
S162 7.9 5.6 68.5 42 31.4
S163 3.5 7.0 75.3 54 30.0
S164 11.0 6.6 67.1 58 35.8
S165 10.5 5.9 92.5 85 40.6
S166 1.8 6.9 91.1 58 30.1
S167 3.6 5.3 55.3 84 30.3
S168 8.4 7.5 98.0 95 42.0
S169 3.4 4.0 81.8 69 32.1
S170 2.5 8.6 91.4 44 22.8
S171 11.3 6.7 85.4 83 45.3
S172 7.3 7.6 71.8 54 31.0
S173 6.2 7.7 86.7 56 31.0
S174 9.6 7.4 98.3 90 40.9
S175 9.9 5.8 63.5 90 44.8
S176 3.1 4.3 90.4 80 34.4
S177 2.1 7.3 76.9 77 30.7
S178 5.7 5.7 74.2 82 31.0
S179 5.7 5.6 71.8 91 35.0
S180 6.1 8.2 86.6 52 31.4
S181 9.0 7.6 63.4 67 38.4
S182 8.4 5.5 92.6 47 36.1
S183 11.8 5.5 91.5 74 44.1
S184 2.1 6.0 54.3 54 19.4
S185 5.4 6.0 94.1 81 39.4
S186 4.7 5.5 62.2 49 22.9
S187 10.5 4.6 73.2 57 36.2
S188 3.7 6.1 80.5 92 33.4
S189 3.1 8.7 68.9 49 23.4
S190 5.9 7.4 51.4 44 28.0
S191 5.6 8.5 92.5 43 32.2
S192 4.1 7.1 59.1 50 30.7
S193 3.7 5.5 60.6 90 28.8
S194 11.2 6.7 89.9 59 46.7
S195 5.9 4.0 67.0 78 33.8
S196 10.5 5.4 94.0 87 42.7
S197 7.1 6.1 85.1 92 40.4
S198 1.6 6.9 63.8 76 28.2
S199 12.0 7.3 50.5 58 42.0
S200 10.2 6.3 97.4 68 37.8

tabuľka s formatovanim

library(knitr)

kable(Vysledky[1:10, ],        # napr. len prvých 10 riadkov
      caption = "Výsledky študentov z testov",
      align = "c")            # zarovnanie na stred
Výsledky študentov z testov
student_id hours_studied sleep_hours attendance_percent previous_scores exam_score
S001 8.0 8.8 72.1 45 30.2
S002 1.3 8.6 60.7 55 25.0
S003 4.0 8.2 73.7 86 35.8
S004 3.5 4.8 95.1 66 34.0
S005 9.1 6.4 89.8 71 40.3
S006 8.4 5.1 58.5 75 35.7
S007 10.8 6.0 54.2 88 37.9
S008 2.0 4.3 75.8 55 18.3
S009 5.6 5.9 81.6 84 34.7
S010 1.3 8.9 66.8 70 24.7

tabuľka 2

library(knitr)

kable(Vysledky[1:10, ],        # napr. len prvých 10 riadkov
      caption = "Výsledky študentov z testov",
      align = "c")            # zarovnanie na stred
Výsledky študentov z testov
student_id hours_studied sleep_hours attendance_percent previous_scores exam_score
S001 8.0 8.8 72.1 45 30.2
S002 1.3 8.6 60.7 55 25.0
S003 4.0 8.2 73.7 86 35.8
S004 3.5 4.8 95.1 66 34.0
S005 9.1 6.4 89.8 71 40.3
S006 8.4 5.1 58.5 75 35.7
S007 10.8 6.0 54.2 88 37.9
S008 2.0 4.3 75.8 55 18.3
S009 5.6 5.9 81.6 84 34.7
S010 1.3 8.9 66.8 70 24.7

farebná tabuľka

# Pekná ružová tabuľka
kable(udaje2[1:10, ],                       # napríklad len prvých 10 riadkov
      caption = "💗 Výsledky študentov z testov") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#E75480") %>%   # ružový header
  row_spec(1:nrow(udaje2[1:10, ]), background = "#ffe6f2") %>%            # svetloružové riadky
  column_spec(1, bold = TRUE, color = "#E75480")                          # prvý stĺpec ružovo zvýraznený
💗 Výsledky študentov z testov
student_id hours_studied sleep_hours attendance_percent previous_scores exam_score hours_category hours_group
S001 8.0 8.8 72.1 45 30.2 Medium High
S002 1.3 8.6 60.7 55 25.0 Low Low
S003 4.0 8.2 73.7 86 35.8 Low Low
S004 3.5 4.8 95.1 66 34.0 Low Low
S005 9.1 6.4 89.8 71 40.3 High High
S006 8.4 5.1 58.5 75 35.7 High High
S007 10.8 6.0 54.2 88 37.9 High High
S008 2.0 4.3 75.8 55 18.3 Low Low
S009 5.6 5.9 81.6 84 34.7 Medium Low
S010 1.3 8.9 66.8 70 24.7 Low Low

orámovanie

library(knitr)
library(kableExtra)

kable(udaje2[1:10, ],
      caption = "💗 Výsledky študentov z testov") %>%
  kable_styling(
    full_width = FALSE,
    position = "center",
    bootstrap_options = c("condensed", "responsive"),
    htmltable_class = "table table-bordered"
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#E75480") %>%  # ružový header
  row_spec(1:nrow(udaje2[1:10, ]), background = "#fff0f6")               # svetloružové riadky
💗 Výsledky študentov z testov
student_id hours_studied sleep_hours attendance_percent previous_scores exam_score hours_category hours_group
S001 8.0 8.8 72.1 45 30.2 Medium High
S002 1.3 8.6 60.7 55 25.0 Low Low
S003 4.0 8.2 73.7 86 35.8 Low Low
S004 3.5 4.8 95.1 66 34.0 Low Low
S005 9.1 6.4 89.8 71 40.3 High High
S006 8.4 5.1 58.5 75 35.7 High High
S007 10.8 6.0 54.2 88 37.9 High High
S008 2.0 4.3 75.8 55 18.3 Low Low
S009 5.6 5.9 81.6 84 34.7 Medium Low
S010 1.3 8.9 66.8 70 24.7 Low Low

Tabuľka zobrazuje údaje o študentoch – počet hodín štúdia, spánku, percento účasti, predchádzajúce skóre a výsledok skúšky. Použitá je ružová farebná schéma s orámovaním pre lepšiu čitateľnosť.

stĺpcový graf

# Top 10 študentov podľa exam_score
Vysledky %>%
  slice_max(order_by = exam_score, n = 10) %>%
  ggplot(aes(x = reorder(student_id, exam_score), y = exam_score, fill = exam_score)) +
  geom_col(color = "white", width = 0.7) +               # biely obrys stĺpcov
  coord_flip() +                                         # horizontálny graf
  scale_fill_gradient(low = "#f8c6c9", high = "#800020") + # burgundy škála
  labs(
    title = "💗 Výsledky študentov z testov",
    x = "Študent",
    y = "Skóre",
    fill = "Skóre"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.text.x = element_text(color = "#4d0012"),
    axis.text.y = element_text(color = "#4d0012")
  )

Graf zobrazuje skóre študentov v testoch. Každý stĺpec predstavuje jedného študenta. Tmavšia burgundy farba označuje vyššie skóre, svetlejšia nižšie. Graf umožňuje rýchlo identifikovať najúspešnejších študentov.

HeatMap

library(ggplot2)
library(dplyr)
library(tidyr)
library(reshape2)

# Vyberieme len číselné stĺpce z datasetu
numeric_data <- Vysledky %>%
  select(hours_studied, sleep_hours, attendance_percent, previous_scores, exam_score)

# Spočítame korelačnú maticu
cor_matrix <- cor(numeric_data, use = "complete.obs")

# Premeníme korelačnú maticu do tvaru vhodného pre ggplot
cor_data <- melt(cor_matrix)

# Vytvoríme heatmapu s burgundy škálou 💗
ggplot(cor_data, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white", linewidth = 0.8) +
  scale_fill_gradient2(
    low = "#f8c6c9", mid = "white", high = "#800020",
    midpoint = 0, limits = c(-1, 1)
  ) +
  geom_text(aes(label = round(value, 2)), color = "#4d0012", size = 4) +
  labs(
    title = "💗 Korelačná heatmapa – výsledky študentov",
    x = "",
    y = "",
    fill = "Korelácia"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1, color = "#4d0012"),
    axis.text.y = element_text(color = "#4d0012")
  )

Heatmapa zobrazuje korelácie medzi číselnými premennými datasetu.Tmavšia farba znamená silnejšiu pozitívnu koreláciu,svetloružová slabšiu alebo negatívnu.Z grafu možno vidieť,že počet hodín štúdia súvisí s vyšším skóre na skúške.

LS0tCnRpdGxlOiAiUHLDoWNhIHMgZGF0YWLDoXpvdSIKYXV0aG9yOiAiRGlhbmEgSHJ1xaFvdnNrw6EgIDxicj4KKHMgdnl1xb5pdMOtbSB2ZXJlam5lIGRvc3R1cG7DvWNoIGvDs2RvdikiCmRhdGU6ICJTZXB0ZW1iZXIgMjAyNSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiB1bml0ZWQKICAgIGhpZ2hsaWdodDogdGFuZ28KZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IDcyCi0tLQoKIyMgSW1wb3J0IMO6ZGFqb3YKCmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQoKIyBOYcSNw610YW5pZSBDU1Ygc8O6Ym9ydSAKVnlzbGVka3kgPC0gcmVhZF9jc3YoInN0dWRlbnRfZXhhbV9zY29yZXMuY3N2IikKYGBgCgojIyB0YWJ1xL5rYQoKYGBge3J9CmxpYnJhcnkoa25pdHIpCgojIFrDoWtsYWRuw6EgdGFidcS+a2EKa2FibGUoVnlzbGVka3kpCmBgYAoKIyMgdGFidcS+a2EgcyBmb3JtYXRvdmFuaW0KCmBgYHtyfQpsaWJyYXJ5KGtuaXRyKQoKa2FibGUoVnlzbGVka3lbMToxMCwgXSwgICAgICAgICMgbmFwci4gbGVuIHBydsO9Y2ggMTAgcmlhZGtvdgogICAgICBjYXB0aW9uID0gIlbDvXNsZWRreSDFoXR1ZGVudG92IHogdGVzdG92IiwKICAgICAgYWxpZ24gPSAiYyIpICAgICAgICAgICAgIyB6YXJvdm5hbmllIG5hIHN0cmVkCmBgYAoKIyMgdGFidcS+a2EgMgoKYGBge3J9CmxpYnJhcnkoa25pdHIpCmthYmxlKFZ5c2xlZGt5LCBjYXB0aW9uID0gIlbDvXNsZWRreSDFoXR1ZGVudG92IHogdGVzdG92IikKYGBgCgojIyBmYXJlYm7DoSB0YWJ1xL5rYQoKYGBge3J9CiMgUGVrbsOhIHJ1xb5vdsOhIHRhYnXEvmthCmthYmxlKHVkYWplMlsxOjEwLCBdLCAgICAgICAgICAgICAgICAgICAgICAgIyBuYXByw61rbGFkIGxlbiBwcnbDvWNoIDEwIHJpYWRrb3YKICAgICAgY2FwdGlvbiA9ICLwn5KXIFbDvXNsZWRreSDFoXR1ZGVudG92IHogdGVzdG92IikgJT4lCiAga2FibGVfc3R5bGluZygKICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLAogICAgZnVsbF93aWR0aCA9IEZBTFNFLAogICAgcG9zaXRpb24gPSAiY2VudGVyIgogICkgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjRTc1NDgwIikgJT4lICAgIyBydcW+b3bDvSBoZWFkZXIKICByb3dfc3BlYygxOm5yb3codWRhamUyWzE6MTAsIF0pLCBiYWNrZ3JvdW5kID0gIiNmZmU2ZjIiKSAlPiUgICAgICAgICAgICAjIHN2ZXRsb3J1xb5vdsOpIHJpYWRreQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9ICIjRTc1NDgwIikgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJ2w70gc3TEunBlYyBydcW+b3ZvIHp2w71yYXpuZW7DvQpgYGAKCiMjIG9yw6Ftb3ZhbmllCgpgYGB7cn0KbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKa2FibGUodWRhamUyWzE6MTAsIF0sCiAgICAgIGNhcHRpb24gPSAi8J+SlyBWw71zbGVka3kgxaF0dWRlbnRvdiB6IHRlc3RvdiIpICU+JQogIGthYmxlX3N0eWxpbmcoCiAgICBmdWxsX3dpZHRoID0gRkFMU0UsCiAgICBwb3NpdGlvbiA9ICJjZW50ZXIiLAogICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLAogICAgaHRtbHRhYmxlX2NsYXNzID0gInRhYmxlIHRhYmxlLWJvcmRlcmVkIgogICkgJT4lCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjRTc1NDgwIikgJT4lICAjIHJ1xb5vdsO9IGhlYWRlcgogIHJvd19zcGVjKDE6bnJvdyh1ZGFqZTJbMToxMCwgXSksIGJhY2tncm91bmQgPSAiI2ZmZjBmNiIpICAgICAgICAgICAgICAgIyBzdmV0bG9ydcW+b3bDqSByaWFka3kKYGBgCgojIyMgVGFidcS+a2Egem9icmF6dWplIMO6ZGFqZSBvIMWhdHVkZW50b2NoIOKAkyBwb8SNZXQgaG9kw61uIMWhdMO6ZGlhLCBzcMOhbmt1LCBwZXJjZW50byDDusSNYXN0aSwgcHJlZGNow6FkemFqw7pjZSBza8OzcmUgYSB2w71zbGVkb2sgc2vDusWha3kuIFBvdcW+aXTDoSBqZSBydcW+b3bDoSBmYXJlYm7DoSBzY2jDqW1hIHMgb3LDoW1vdmFuw61tIHByZSBsZXDFoWl1IMSNaXRhdGXEvm5vc8WlLgoKIyMgc3TEunBjb3bDvSBncmFmCgpgYGB7cn0KIyBUb3AgMTAgxaF0dWRlbnRvdiBwb2TEvmEgZXhhbV9zY29yZQpWeXNsZWRreSAlPiUKICBzbGljZV9tYXgob3JkZXJfYnkgPSBleGFtX3Njb3JlLCBuID0gMTApICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoc3R1ZGVudF9pZCwgZXhhbV9zY29yZSksIHkgPSBleGFtX3Njb3JlLCBmaWxsID0gZXhhbV9zY29yZSkpICsKICBnZW9tX2NvbChjb2xvciA9ICJ3aGl0ZSIsIHdpZHRoID0gMC43KSArICAgICAgICAgICAgICAgIyBiaWVseSBvYnJ5cyBzdMS6cGNvdgogIGNvb3JkX2ZsaXAoKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhvcml6b250w6FsbnkgZ3JhZgogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gIiNmOGM2YzkiLCBoaWdoID0gIiM4MDAwMjAiKSArICMgYnVyZ3VuZHkgxaFrw6FsYQogIGxhYnMoCiAgICB0aXRsZSA9ICLwn5KXIFbDvXNsZWRreSDFoXR1ZGVudG92IHogdGVzdG92IiwKICAgIHggPSAixaB0dWRlbnQiLAogICAgeSA9ICJTa8OzcmUiLAogICAgZmlsbCA9ICJTa8OzcmUiCiAgKSArCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkgKwogIHRoZW1lKAogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSksCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjNGQwMDEyIiksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjNGQwMDEyIikKICApCmBgYAoKIyMjIEdyYWYgem9icmF6dWplIHNrw7NyZSDFoXR1ZGVudG92IHYgdGVzdG9jaC4gS2HFvmTDvSBzdMS6cGVjIHByZWRzdGF2dWplIGplZG7DqWhvIMWhdHVkZW50YS4gVG1hdsWhaWEgYnVyZ3VuZHkgZmFyYmEgb3puYcSNdWplIHZ5xaHFoWllIHNrw7NyZSwgc3ZldGxlasWhaWEgbmnFvsWhaWUuIEdyYWYgdW1vxb7FiHVqZSByw71jaGxvIGlkZW50aWZpa292YcWlIG5hasO6c3BlxaFuZWrFocOtY2ggxaF0dWRlbnRvdi4KCiMjIEhlYXRNYXAKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkocmVzaGFwZTIpCgojIFZ5YmVyaWVtZSBsZW4gxI3DrXNlbG7DqSBzdMS6cGNlIHogZGF0YXNldHUKbnVtZXJpY19kYXRhIDwtIFZ5c2xlZGt5ICU+JQogIHNlbGVjdChob3Vyc19zdHVkaWVkLCBzbGVlcF9ob3VycywgYXR0ZW5kYW5jZV9wZXJjZW50LCBwcmV2aW91c19zY29yZXMsIGV4YW1fc2NvcmUpCgojIFNwb8SNw610YW1lIGtvcmVsYcSNbsO6IG1hdGljdQpjb3JfbWF0cml4IDwtIGNvcihudW1lcmljX2RhdGEsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQoKIyBQcmVtZW7DrW1lIGtvcmVsYcSNbsO6IG1hdGljdSBkbyB0dmFydSB2aG9kbsOpaG8gcHJlIGdncGxvdApjb3JfZGF0YSA8LSBtZWx0KGNvcl9tYXRyaXgpCgojIFZ5dHZvcsOtbWUgaGVhdG1hcHUgcyBidXJndW5keSDFoWvDoWxvdSDwn5KXCmdncGxvdChjb3JfZGF0YSwgYWVzKHggPSBWYXIxLCB5ID0gVmFyMiwgZmlsbCA9IHZhbHVlKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIsIGxpbmV3aWR0aCA9IDAuOCkgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQyKAogICAgbG93ID0gIiNmOGM2YzkiLCBtaWQgPSAid2hpdGUiLCBoaWdoID0gIiM4MDAwMjAiLAogICAgbWlkcG9pbnQgPSAwLCBsaW1pdHMgPSBjKC0xLCAxKQogICkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZCh2YWx1ZSwgMikpLCBjb2xvciA9ICIjNGQwMDEyIiwgc2l6ZSA9IDQpICsKICBsYWJzKAogICAgdGl0bGUgPSAi8J+SlyBLb3JlbGHEjW7DoSBoZWF0bWFwYSDigJMgdsO9c2xlZGt5IMWhdHVkZW50b3YiLAogICAgeCA9ICIiLAogICAgeSA9ICIiLAogICAgZmlsbCA9ICJLb3JlbMOhY2lhIgogICkgKwogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsKICB0aGVtZSgKICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpLAogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCBjb2xvciA9ICIjNGQwMDEyIiksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjNGQwMDEyIikKICApCmBgYAoKIyMjIEhlYXRtYXBhIHpvYnJhenVqZSBrb3JlbMOhY2llIG1lZHppIMSNw61zZWxuw71taSBwcmVtZW5uw71taSBkYXRhc2V0dS5UbWF2xaFpYSBmYXJiYSB6bmFtZW7DoSBzaWxuZWrFoWl1IHBveml0w612bnUga29yZWzDoWNpdSxzdmV0bG9ydcW+b3bDoSBzbGFixaFpdSBhbGVibyBuZWdhdMOtdm51LlogZ3JhZnUgbW/Fvm5vIHZpZGllxaUsxb5lIHBvxI1ldCBob2TDrW4gxaF0w7pkaWEgc8O6dmlzw60gcyB2ecWhxaHDrW0gc2vDs3JlIG5hIHNrw7rFoWtlLgo=