This is an R Markdown
Notebook. When you execute code within the notebook, the results appear
beneath the code.
Try executing this chunk by clicking the Run button within
the chunk or by placing your cursor inside it and pressing
Ctrl+Shift+Enter.
# Load libraries
library(ggplot2)
library(lubridate)
library(dplyr)
# Create your data frame
tasks <- data.frame(
objective = c(
"Conservation Action Plan for Coco de Mer", "Conservation Action Plan for Coco de Mer", "Conservation Action Plan for Coco de Mer",
"Conservation Action Plan for Coco de Mer", "Conservation Action Plan for Coco de Mer", "Conservation Action Plan for Coco de Mer",
"Conservation Action Plan for Coco de Mer", "Conservation Action Plan for Coco de Mer", "Conservation Action Plan for Coco de Mer",
"Conservation Action Plan for Coco de Mer", "Complete the IUCN Red List Assessment for Coco de Mer", "Complete the IUCN Red List Assessment for Coco de Mer",
"Complete the IUCN Red List Assessment for Coco de Mer", "Complete the IUCN Red List Assessment for Coco de Mer", "Complete the IUCN Red List Assessment for Coco de Mer",
"Collation of Data Available for Lodoicea maldivica and Other Species", "Collation of Data Available for Lodoicea maldivica and Other Species",
"Collation of Data Available for Lodoicea maldivica and Other Species", "Collation of Data Available for Lodoicea maldivica and Other Species",
"Collation of Data Available for Lodoicea maldivica and Other Species", "Conservation Action Tracker Information for Endemic Tree Species",
"Conservation Action Tracker Information for Endemic Tree Species", "Conservation Action Tracker Information for Endemic Tree Species",
"Conservation Action Tracker Information for Endemic Tree Species"
),
task = c(
"1.1 Update initial action plan", "1.2 Review second action plan", "1.3 Update action plan",
"1.4 Prepare for stakeholder workshop", "1.5 Conduct the stakeholder workshop",
"1.6 Integrate workshop output", "1.7 Internal review of action plan", "1.8 External review of action plan",
"1.9 Review and finalize the assessment", "1.10 Submit the assessment",
"2.1 Gather all necessary data", "2.2 Analyze data and compile the report",
"2.3 Internal review and finalize assessment", "2.4 External review and finalize assessment",
"2.5 Submit the assessment", "3.1 Identify available data", "3.2 Collect habitat details",
"3.3 Collate data", "3.4 Prepare data for submission", "3.5 Submit data",
"4.1 Gather information on endemic tree species", "4.2 Document current conservation actions",
"4.3 Compile and review tracker information", "4.4 Submit the Conservation Action Tracker"
),
start_date = as.Date(c(
"2024-10-25", "2024-11-15", "2024-12-16", "2025-02-01", "2025-02-20", "2025-02-21",
"2025-03-01", "2025-03-15", "2025-04-21", "2025-04-30", "2025-01-01", "2025-02-01",
"2025-03-21", "2025-04-01", "2025-04-30", "2024-11-01", "2024-11-16", "2025-01-01",
"2025-02-01", "2025-02-16", "2024-11-01", "2024-11-16", "2025-01-01", "2025-01-20"
)),
end_date = as.Date(c(
"2024-11-15", "2024-12-15", "2025-01-31", "2025-02-15", "2025-02-20", "2025-02-28",
"2025-03-15", "2025-03-31", "2025-04-28", "2025-04-30", "2025-01-31", "2025-02-20",
"2025-03-28", "2025-04-28", "2025-04-30", "2024-11-15", "2024-12-31", "2025-01-31",
"2025-02-15", "2025-02-16", "2024-11-15", "2024-12-31", "2025-01-15", "2025-01-20"
)),
responsibilities = c(
"AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB",
"AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB",
"AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB", "AbC, FFD, NB, MJB",
"LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC",
"LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC", "LM, SW, JM, NB, AbC"
)
)
# Print the table
print(tasks)
# Ensure dates are recognized as Date objects
tasks$start_date <- as.Date(tasks$start_date)
tasks$end_date <- as.Date(tasks$end_date)
tasks <- tasks %>%
mutate(end_date = if_else(start_date == end_date, start_date + days(1), end_date))
# Ensure tasks are ordered by their task numbers
tasks$task <- factor(tasks$task, levels = c(
"1.1 Update initial action plan", "1.2 Review second action plan", "1.3 Update action plan",
"1.4 Prepare for stakeholder workshop", "1.5 Conduct the stakeholder workshop",
"1.6 Integrate workshop output", "1.7 Internal review of action plan", "1.8 External review of action plan",
"1.9 Review and finalize the assessment", "1.10 Submit the assessment",
"2.1 Gather all necessary data", "2.2 Analyze data and compile the report",
"2.3 Internal review and finalize assessment", "2.4 External review and finalize assessment",
"2.5 Submit the assessment", "3.1 Identify available data", "3.2 Collect habitat details",
"3.3 Collate data", "3.4 Prepare data for submission", "3.5 Submit data",
"4.1 Gather information on endemic tree species", "4.2 Document current conservation actions",
"4.3 Compile and review tracker information", "4.4 Submit the Conservation Action Tracker"
))
# # Plotting the Gantt chart
# ggplot(tasks, aes(x = start_date, xend = end_date, y = task, yend = task)) +
# geom_segment(size = 5, color = "skyblue") +
# scale_x_date(date_breaks = "1 month", date_labels = "%b-%Y") +
# scale_y_discrete(limits = rev(levels(tasks$task))) + # Reverse the order of tasks
# labs(title = "Gantt Chart",
# x = "Date",
# y = "Tasks") +
# theme_minimal() +
# theme(axis.text.y = element_text(size = 8))
# Plotting the Gantt chart
ggplot(tasks, aes(x = start_date, xend = end_date, y = task, yend = task)) +
geom_segment(size = 5, color = "#50C878") +
scale_x_date(date_breaks = "2 weeks", date_labels = "%d-%b-%Y") +
scale_y_discrete(limits = rev(levels(tasks$task))) + # Reverse the order of tasks
labs(title = "Botanic gardens conservation international grant timeline",
y = "Tasks", x=NULL) +
theme_minimal() +
theme(axis.text.y = element_text(size = 8))

LS0tDQp0aXRsZTogIkdBTlQgQ0hBUlQgRk9SIENETSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rLiBXaGVuIHlvdSBleGVjdXRlIGNvZGUgd2l0aGluIHRoZSBub3RlYm9vaywgdGhlIHJlc3VsdHMgYXBwZWFyIGJlbmVhdGggdGhlIGNvZGUuIA0KDQpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIA0KDQoNCmBgYHtyfQ0KIyBMb2FkIGxpYnJhcmllcw0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGRwbHlyKQ0KDQojIENyZWF0ZSB5b3VyIGRhdGEgZnJhbWUNCnRhc2tzIDwtIGRhdGEuZnJhbWUoDQogIG9iamVjdGl2ZSA9IGMoDQogICAgIkNvbnNlcnZhdGlvbiBBY3Rpb24gUGxhbiBmb3IgQ29jbyBkZSBNZXIiLCAiQ29uc2VydmF0aW9uIEFjdGlvbiBQbGFuIGZvciBDb2NvIGRlIE1lciIsICJDb25zZXJ2YXRpb24gQWN0aW9uIFBsYW4gZm9yIENvY28gZGUgTWVyIiwNCiAgICAiQ29uc2VydmF0aW9uIEFjdGlvbiBQbGFuIGZvciBDb2NvIGRlIE1lciIsICJDb25zZXJ2YXRpb24gQWN0aW9uIFBsYW4gZm9yIENvY28gZGUgTWVyIiwgIkNvbnNlcnZhdGlvbiBBY3Rpb24gUGxhbiBmb3IgQ29jbyBkZSBNZXIiLA0KICAgICJDb25zZXJ2YXRpb24gQWN0aW9uIFBsYW4gZm9yIENvY28gZGUgTWVyIiwgIkNvbnNlcnZhdGlvbiBBY3Rpb24gUGxhbiBmb3IgQ29jbyBkZSBNZXIiLCAiQ29uc2VydmF0aW9uIEFjdGlvbiBQbGFuIGZvciBDb2NvIGRlIE1lciIsDQogICAgIkNvbnNlcnZhdGlvbiBBY3Rpb24gUGxhbiBmb3IgQ29jbyBkZSBNZXIiLCAiQ29tcGxldGUgdGhlIElVQ04gUmVkIExpc3QgQXNzZXNzbWVudCBmb3IgQ29jbyBkZSBNZXIiLCAiQ29tcGxldGUgdGhlIElVQ04gUmVkIExpc3QgQXNzZXNzbWVudCBmb3IgQ29jbyBkZSBNZXIiLA0KICAgICJDb21wbGV0ZSB0aGUgSVVDTiBSZWQgTGlzdCBBc3Nlc3NtZW50IGZvciBDb2NvIGRlIE1lciIsICJDb21wbGV0ZSB0aGUgSVVDTiBSZWQgTGlzdCBBc3Nlc3NtZW50IGZvciBDb2NvIGRlIE1lciIsICJDb21wbGV0ZSB0aGUgSVVDTiBSZWQgTGlzdCBBc3Nlc3NtZW50IGZvciBDb2NvIGRlIE1lciIsDQogICAgIkNvbGxhdGlvbiBvZiBEYXRhIEF2YWlsYWJsZSBmb3IgTG9kb2ljZWEgbWFsZGl2aWNhIGFuZCBPdGhlciBTcGVjaWVzIiwgIkNvbGxhdGlvbiBvZiBEYXRhIEF2YWlsYWJsZSBmb3IgTG9kb2ljZWEgbWFsZGl2aWNhIGFuZCBPdGhlciBTcGVjaWVzIiwgDQogICAgIkNvbGxhdGlvbiBvZiBEYXRhIEF2YWlsYWJsZSBmb3IgTG9kb2ljZWEgbWFsZGl2aWNhIGFuZCBPdGhlciBTcGVjaWVzIiwgIkNvbGxhdGlvbiBvZiBEYXRhIEF2YWlsYWJsZSBmb3IgTG9kb2ljZWEgbWFsZGl2aWNhIGFuZCBPdGhlciBTcGVjaWVzIiwgDQogICAgIkNvbGxhdGlvbiBvZiBEYXRhIEF2YWlsYWJsZSBmb3IgTG9kb2ljZWEgbWFsZGl2aWNhIGFuZCBPdGhlciBTcGVjaWVzIiwgIkNvbnNlcnZhdGlvbiBBY3Rpb24gVHJhY2tlciBJbmZvcm1hdGlvbiBmb3IgRW5kZW1pYyBUcmVlIFNwZWNpZXMiLCANCiAgICAiQ29uc2VydmF0aW9uIEFjdGlvbiBUcmFja2VyIEluZm9ybWF0aW9uIGZvciBFbmRlbWljIFRyZWUgU3BlY2llcyIsICJDb25zZXJ2YXRpb24gQWN0aW9uIFRyYWNrZXIgSW5mb3JtYXRpb24gZm9yIEVuZGVtaWMgVHJlZSBTcGVjaWVzIiwgDQogICAgIkNvbnNlcnZhdGlvbiBBY3Rpb24gVHJhY2tlciBJbmZvcm1hdGlvbiBmb3IgRW5kZW1pYyBUcmVlIFNwZWNpZXMiDQogICksDQogIHRhc2sgPSBjKA0KICAgICIxLjEgVXBkYXRlIGluaXRpYWwgYWN0aW9uIHBsYW4iLCAiMS4yIFJldmlldyBzZWNvbmQgYWN0aW9uIHBsYW4iLCAiMS4zIFVwZGF0ZSBhY3Rpb24gcGxhbiIsDQogICAgIjEuNCBQcmVwYXJlIGZvciBzdGFrZWhvbGRlciB3b3Jrc2hvcCIsICIxLjUgQ29uZHVjdCB0aGUgc3Rha2Vob2xkZXIgd29ya3Nob3AiLA0KICAgICIxLjYgSW50ZWdyYXRlIHdvcmtzaG9wIG91dHB1dCIsICIxLjcgSW50ZXJuYWwgcmV2aWV3IG9mIGFjdGlvbiBwbGFuIiwgIjEuOCBFeHRlcm5hbCByZXZpZXcgb2YgYWN0aW9uIHBsYW4iLA0KICAgICIxLjkgUmV2aWV3IGFuZCBmaW5hbGl6ZSB0aGUgYXNzZXNzbWVudCIsICIxLjEwIFN1Ym1pdCB0aGUgYXNzZXNzbWVudCIsDQogICAgIjIuMSBHYXRoZXIgYWxsIG5lY2Vzc2FyeSBkYXRhIiwgIjIuMiBBbmFseXplIGRhdGEgYW5kIGNvbXBpbGUgdGhlIHJlcG9ydCIsDQogICAgIjIuMyBJbnRlcm5hbCByZXZpZXcgYW5kIGZpbmFsaXplIGFzc2Vzc21lbnQiLCAiMi40IEV4dGVybmFsIHJldmlldyBhbmQgZmluYWxpemUgYXNzZXNzbWVudCIsDQogICAgIjIuNSBTdWJtaXQgdGhlIGFzc2Vzc21lbnQiLCAiMy4xIElkZW50aWZ5IGF2YWlsYWJsZSBkYXRhIiwgIjMuMiBDb2xsZWN0IGhhYml0YXQgZGV0YWlscyIsDQogICAgIjMuMyBDb2xsYXRlIGRhdGEiLCAiMy40IFByZXBhcmUgZGF0YSBmb3Igc3VibWlzc2lvbiIsICIzLjUgU3VibWl0IGRhdGEiLA0KICAgICI0LjEgR2F0aGVyIGluZm9ybWF0aW9uIG9uIGVuZGVtaWMgdHJlZSBzcGVjaWVzIiwgIjQuMiBEb2N1bWVudCBjdXJyZW50IGNvbnNlcnZhdGlvbiBhY3Rpb25zIiwNCiAgICAiNC4zIENvbXBpbGUgYW5kIHJldmlldyB0cmFja2VyIGluZm9ybWF0aW9uIiwgIjQuNCBTdWJtaXQgdGhlIENvbnNlcnZhdGlvbiBBY3Rpb24gVHJhY2tlciINCiAgKSwNCiAgc3RhcnRfZGF0ZSA9IGFzLkRhdGUoYygNCiAgICAiMjAyNC0xMC0yNSIsICIyMDI0LTExLTE1IiwgIjIwMjQtMTItMTYiLCAiMjAyNS0wMi0wMSIsICIyMDI1LTAyLTIwIiwgIjIwMjUtMDItMjEiLA0KICAgICIyMDI1LTAzLTAxIiwgIjIwMjUtMDMtMTUiLCAiMjAyNS0wNC0yMSIsICIyMDI1LTA0LTMwIiwgIjIwMjUtMDEtMDEiLCAiMjAyNS0wMi0wMSIsDQogICAgIjIwMjUtMDMtMjEiLCAiMjAyNS0wNC0wMSIsICIyMDI1LTA0LTMwIiwgIjIwMjQtMTEtMDEiLCAiMjAyNC0xMS0xNiIsICIyMDI1LTAxLTAxIiwNCiAgICAiMjAyNS0wMi0wMSIsICIyMDI1LTAyLTE2IiwgIjIwMjQtMTEtMDEiLCAiMjAyNC0xMS0xNiIsICIyMDI1LTAxLTAxIiwgIjIwMjUtMDEtMjAiDQogICkpLA0KICBlbmRfZGF0ZSA9IGFzLkRhdGUoYygNCiAgICAiMjAyNC0xMS0xNSIsICIyMDI0LTEyLTE1IiwgIjIwMjUtMDEtMzEiLCAiMjAyNS0wMi0xNSIsICIyMDI1LTAyLTIwIiwgIjIwMjUtMDItMjgiLA0KICAgICIyMDI1LTAzLTE1IiwgIjIwMjUtMDMtMzEiLCAiMjAyNS0wNC0yOCIsICIyMDI1LTA0LTMwIiwgIjIwMjUtMDEtMzEiLCAiMjAyNS0wMi0yMCIsDQogICAgIjIwMjUtMDMtMjgiLCAiMjAyNS0wNC0yOCIsICIyMDI1LTA0LTMwIiwgIjIwMjQtMTEtMTUiLCAiMjAyNC0xMi0zMSIsICIyMDI1LTAxLTMxIiwNCiAgICAiMjAyNS0wMi0xNSIsICIyMDI1LTAyLTE2IiwgIjIwMjQtMTEtMTUiLCAiMjAyNC0xMi0zMSIsICIyMDI1LTAxLTE1IiwgIjIwMjUtMDEtMjAiDQogICkpLA0KICByZXNwb25zaWJpbGl0aWVzID0gYygNCiAgICAiQWJDLCBGRkQsIE5CLCBNSkIiLCAiQWJDLCBGRkQsIE5CLCBNSkIiLCAiQWJDLCBGRkQsIE5CLCBNSkIiLCAiQWJDLCBGRkQsIE5CLCBNSkIiLCAiQWJDLCBGRkQsIE5CLCBNSkIiLA0KICAgICJBYkMsIEZGRCwgTkIsIE1KQiIsICJBYkMsIEZGRCwgTkIsIE1KQiIsICJBYkMsIEZGRCwgTkIsIE1KQiIsICJBYkMsIEZGRCwgTkIsIE1KQiIsICJBYkMsIEZGRCwgTkIsIE1KQiIsDQogICAgIkFiQywgRkZELCBOQiwgTUpCIiwgIkFiQywgRkZELCBOQiwgTUpCIiwgIkFiQywgRkZELCBOQiwgTUpCIiwgIkFiQywgRkZELCBOQiwgTUpCIiwgIkFiQywgRkZELCBOQiwgTUpCIiwNCiAgICAiTE0sIFNXLCBKTSwgTkIsIEFiQyIsICJMTSwgU1csIEpNLCBOQiwgQWJDIiwgIkxNLCBTVywgSk0sIE5CLCBBYkMiLCAiTE0sIFNXLCBKTSwgTkIsIEFiQyIsICJMTSwgU1csIEpNLCBOQiwgQWJDIiwNCiAgICAiTE0sIFNXLCBKTSwgTkIsIEFiQyIsICJMTSwgU1csIEpNLCBOQiwgQWJDIiwgIkxNLCBTVywgSk0sIE5CLCBBYkMiLCAiTE0sIFNXLCBKTSwgTkIsIEFiQyINCiAgKQ0KKQ0KDQojIFByaW50IHRoZSB0YWJsZQ0KcHJpbnQodGFza3MpIA0KDQojIEVuc3VyZSBkYXRlcyBhcmUgcmVjb2duaXplZCBhcyBEYXRlIG9iamVjdHMNCnRhc2tzJHN0YXJ0X2RhdGUgPC0gYXMuRGF0ZSh0YXNrcyRzdGFydF9kYXRlKQ0KdGFza3MkZW5kX2RhdGUgPC0gYXMuRGF0ZSh0YXNrcyRlbmRfZGF0ZSkNCg0KDQp0YXNrcyA8LSB0YXNrcyAlPiUNCiAgbXV0YXRlKGVuZF9kYXRlID0gaWZfZWxzZShzdGFydF9kYXRlID09IGVuZF9kYXRlLCBzdGFydF9kYXRlICsgZGF5cygxKSwgZW5kX2RhdGUpKQ0KDQoNCg0KDQojIEVuc3VyZSB0YXNrcyBhcmUgb3JkZXJlZCBieSB0aGVpciB0YXNrIG51bWJlcnMNCnRhc2tzJHRhc2sgPC0gZmFjdG9yKHRhc2tzJHRhc2ssIGxldmVscyA9IGMoDQogICIxLjEgVXBkYXRlIGluaXRpYWwgYWN0aW9uIHBsYW4iLCAiMS4yIFJldmlldyBzZWNvbmQgYWN0aW9uIHBsYW4iLCAiMS4zIFVwZGF0ZSBhY3Rpb24gcGxhbiIsDQogICIxLjQgUHJlcGFyZSBmb3Igc3Rha2Vob2xkZXIgd29ya3Nob3AiLCAiMS41IENvbmR1Y3QgdGhlIHN0YWtlaG9sZGVyIHdvcmtzaG9wIiwNCiAgIjEuNiBJbnRlZ3JhdGUgd29ya3Nob3Agb3V0cHV0IiwgIjEuNyBJbnRlcm5hbCByZXZpZXcgb2YgYWN0aW9uIHBsYW4iLCAiMS44IEV4dGVybmFsIHJldmlldyBvZiBhY3Rpb24gcGxhbiIsDQogICIxLjkgUmV2aWV3IGFuZCBmaW5hbGl6ZSB0aGUgYXNzZXNzbWVudCIsICIxLjEwIFN1Ym1pdCB0aGUgYXNzZXNzbWVudCIsDQogICIyLjEgR2F0aGVyIGFsbCBuZWNlc3NhcnkgZGF0YSIsICIyLjIgQW5hbHl6ZSBkYXRhIGFuZCBjb21waWxlIHRoZSByZXBvcnQiLA0KICAiMi4zIEludGVybmFsIHJldmlldyBhbmQgZmluYWxpemUgYXNzZXNzbWVudCIsICIyLjQgRXh0ZXJuYWwgcmV2aWV3IGFuZCBmaW5hbGl6ZSBhc3Nlc3NtZW50IiwNCiAgIjIuNSBTdWJtaXQgdGhlIGFzc2Vzc21lbnQiLCAiMy4xIElkZW50aWZ5IGF2YWlsYWJsZSBkYXRhIiwgIjMuMiBDb2xsZWN0IGhhYml0YXQgZGV0YWlscyIsDQogICIzLjMgQ29sbGF0ZSBkYXRhIiwgIjMuNCBQcmVwYXJlIGRhdGEgZm9yIHN1Ym1pc3Npb24iLCAiMy41IFN1Ym1pdCBkYXRhIiwNCiAgIjQuMSBHYXRoZXIgaW5mb3JtYXRpb24gb24gZW5kZW1pYyB0cmVlIHNwZWNpZXMiLCAiNC4yIERvY3VtZW50IGN1cnJlbnQgY29uc2VydmF0aW9uIGFjdGlvbnMiLA0KICAiNC4zIENvbXBpbGUgYW5kIHJldmlldyB0cmFja2VyIGluZm9ybWF0aW9uIiwgIjQuNCBTdWJtaXQgdGhlIENvbnNlcnZhdGlvbiBBY3Rpb24gVHJhY2tlciINCikpDQoNCiMgIyBQbG90dGluZyB0aGUgR2FudHQgY2hhcnQNCiMgZ2dwbG90KHRhc2tzLCBhZXMoeCA9IHN0YXJ0X2RhdGUsIHhlbmQgPSBlbmRfZGF0ZSwgeSA9IHRhc2ssIHllbmQgPSB0YXNrKSkgKw0KIyAgIGdlb21fc2VnbWVudChzaXplID0gNSwgY29sb3IgPSAic2t5Ymx1ZSIpICsNCiMgICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSBtb250aCIsIGRhdGVfbGFiZWxzID0gIiViLSVZIikgKw0KIyAgIHNjYWxlX3lfZGlzY3JldGUobGltaXRzID0gcmV2KGxldmVscyh0YXNrcyR0YXNrKSkpICsgICMgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGFza3MNCiMgICBsYWJzKHRpdGxlID0gIkdhbnR0IENoYXJ0IiwNCiMgICAgICAgIHggPSAiRGF0ZSIsDQojICAgICAgICB5ID0gIlRhc2tzIikgKw0KIyAgIHRoZW1lX21pbmltYWwoKSArDQojICAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCiMgUGxvdHRpbmcgdGhlIEdhbnR0IGNoYXJ0DQpnZ3Bsb3QodGFza3MsIGFlcyh4ID0gc3RhcnRfZGF0ZSwgeGVuZCA9IGVuZF9kYXRlLCB5ID0gdGFzaywgeWVuZCA9IHRhc2spKSArDQogIGdlb21fc2VnbWVudChzaXplID0gNSwgY29sb3IgPSAiIzUwQzg3OCIpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjIgd2Vla3MiLCBkYXRlX2xhYmVscyA9ICIlZC0lYi0lWSIpICsNCiAgc2NhbGVfeV9kaXNjcmV0ZShsaW1pdHMgPSByZXYobGV2ZWxzKHRhc2tzJHRhc2spKSkgKyAgIyBSZXZlcnNlIHRoZSBvcmRlciBvZiB0YXNrcw0KICBsYWJzKHRpdGxlID0gIkJvdGFuaWMgZ2FyZGVucyBjb25zZXJ2YXRpb24gaW50ZXJuYXRpb25hbCBncmFudCB0aW1lbGluZSIsDQogICAgICAgeSA9ICJUYXNrcyIsIHg9TlVMTCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQpgYGANCg0KDQoNCg0K