Praktikum 2

Pemrograman Sains Data I

2.5 Praktikum

2.5.1 Objective

  1. Memahami dan menerapkan pernyataan kondisional (if, if-else, if-elif-else).
  2. Terapkan loop (for loop, while loop, break, continue) untuk menganalisis himpunan data.

Gunakan dataset dummy berikut ini

ID Nama Umur Gaji Posisi Performa
1 Bagas 25 5000 Staff Baik
2 Joan 30 7000 Supervisor Sangat Baik
3 Alya 27 6500 Staff Rata-rata
4 Dwi 35 10000 Manager Baik
5 Nabil 40 12000 Director Sangat Baik
library(knitr)

data <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Umur = c(25, 30, 27, 35, 40),
  Gaji = c(5000, 7000, 6500, 10000, 12000),
  Posisi = c("Staff", "Supervisor", "Staff", "Manager", "Director"),
  Performa = c("Baik", "Sangat Baik", "Rata-rata", "Baik", "Sangat Baik")
)
kable(data)
ID Nama Umur Gaji Posisi Performa
1 Bagas 25 5000 Staff Baik
2 Joan 30 7000 Supervisor Sangat Baik
3 Alya 27 6500 Staff Rata-rata
4 Dwi 35 10000 Manager Baik
5 Nabil 40 12000 Director Sangat Baik

2.5.2 Conditional Statements

Tentukan tingkat bonus berdasarkan kinerja karyawan: - Sangat Baik -> 20% dari gaji - Baik -> 10% dari gaji - Rata-rata -> 5% dari gaji

Tugas Anda: - Tulis program dalam Python dan R untuk menghitung bonus setiap karyawan. - Menampilkan output dalam format ini:

“Name: Bagas, Bonus: 500”

# Data lengkap
data <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Umur = c(25, 30, 27, 35, 40),
  Gaji = c(5000, 7000, 6500, 10000, 12000),
  Posisi = c("Staff", "Supervisor", "Staff", "Manager", "Director"),
  Performa = c("Baik", "Sangat Baik", "Rata-rata", "Baik", "Sangat Baik")
)

# Menghitung bonus dan menampilkan output
for (i in 1:nrow(data)) {
  if (data$Performa[i] == "Sangat Baik") {
    bonus <- data$Gaji[i] * 0.2
  } else if (data$Performa[i] == "Baik") {
    bonus <- data$Gaji[i] * 0.1
  } else {
    bonus <- data$Gaji[i] * 0.05
  }
  
  cat(sprintf("Name: %s, Bonus: %d\n", data$Nama[i], as.integer(bonus)))
}
## Name: Bagas, Bonus: 500
## Name: Joan, Bonus: 1400
## Name: Alya, Bonus: 325
## Name: Dwi, Bonus: 1000
## Name: Nabil, Bonus: 2400

2.5.3 Loops (For & While)

2.5.3.1 Gunakan for loop untuk membuat daftar karyawan dengan gaji lebih dari 6000.

Hasil yang Diharapkan:
Name: Joan, Salary: 7000
Name: Alya, Salary: 6500
Name: Dwi, Salary: 10000
Name: Nabil, Salary: 12000

# Data lengkap
data <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000)
)

# Menampilkan karyawan dengan gaji lebih dari 6000
for (i in 1:nrow(data)) {
  if (data$Gaji[i] > 6000) {
    cat(sprintf("Name: %s, Salary: %d\n", data$Nama[i], data$Gaji[i]))
  }
}
## Name: Joan, Salary: 7000
## Name: Alya, Salary: 6500
## Name: Dwi, Salary: 10000
## Name: Nabil, Salary: 12000

2.5.3.2 Gunakan while loop untuk menampilkan karyawan hingga “Manajer” ditemukan.

Hasil yang Diharapkan:
Name: Bagas, Position: Staff
Name: Joan, Position: Supervisor
Name: Alya, Position: Staff
Name: Dwi, Position: Manager (Stop here)

# Data lengkap
data <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Posisi = c("Staff", "Supervisor", "Staff", "Manager", "Director")
)

# Menggunakan while loop untuk menampilkan hingga "Manager" ditemukan
i <- 1
while (i <= nrow(data)) {
  if (data$Posisi[i] == "Manager") {
    cat(sprintf("Name: %s, Position: %s (Stop here)\n", data$Nama[i], data$Posisi[i]))
    break
  }
  cat(sprintf("Name: %s, Position: %s\n", data$Nama[i], data$Posisi[i]))
  i <- i + 1
}
## Name: Bagas, Position: Staff
## Name: Joan, Position: Supervisor
## Name: Alya, Position: Staff
## Name: Dwi, Position: Manager (Stop here)

2.5.3.3 Gunakan break untuk menghentikan loop ketika karyawan dengan gaji di atas 10.000 ditemukan.

Hasil yang Diharapkan:
Name: Bagas, Salary: 5000
Name: Joan, Salary: 7000
Name: Alya, Salary: 6500
Name: Dwi, Salary: 10000
(Stopped because Nabil has a salary above 10,000)

# Data lengkap
data <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000)
)

# Menggunakan for loop dengan break
for (i in 1:nrow(data)) {
  if (data$Gaji[i] > 10000) {
    cat(sprintf("(Stopped because %s has a salary above 10,000)\n", data$Nama[i]))
    break
  }
  cat(sprintf("Name: %s, Salary: %d\n", data$Nama[i], data$Gaji[i]))
}
## Name: Bagas, Salary: 5000
## Name: Joan, Salary: 7000
## Name: Alya, Salary: 6500
## Name: Dwi, Salary: 10000
## (Stopped because Nabil has a salary above 10,000)

2.5.3.4. Gunakan lanjutkan untuk melewati karyawan dengan kinerja “Rata-rata”.

Hasil yang Diharapkan:
Name: Bagas, Performance: Good
Name: Joan, Performance: Very Good
Name: Dwi, Performance: Good
Name: Nabil, Performance: Very Good
(Alya is skipped because the performance is “Average”)

# Data lengkap
data <- data.frame(
  ID = c(1, 2, 3, 4, 5),
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Performa = c("Good", "Very Good", "Average", "Good", "Very Good")
)

# Menggunakan for loop dengan next (setara dengan continue di Python)
skipped <- ""
for (i in 1:nrow(data)) {
  if (data$Performa[i] == "Average") {
    skipped <- data$Nama[i]  # Simpan nama karyawan yang dilewati
    next
  }
  cat(sprintf("Name: %s, Performance: %s\n", data$Nama[i], data$Performa[i]))
}
## Name: Bagas, Performance: Good
## Name: Joan, Performance: Very Good
## Name: Dwi, Performance: Good
## Name: Nabil, Performance: Very Good
# Menampilkan pesan bahwa Alya dilewati
cat(sprintf("(%s is skipped because the performance is \"Average\")\n", skipped))
## (Alya is skipped because the performance is "Average")
LS0tDQp0aXRsZTogIlByYWt0aWt1bSAyIg0Kc3VidGl0bGU6ICJQZW1yb2dyYW1hbiBTYWlucyBEYXRhIEkiDQphdXRob3I6ICJKT0FOUyBIRU5LWSBTRVJWQVRJVVMgU0lNQU5VTExBTkciDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUgMS5jc3MiDQotLS0NCg0KIyAyLjUgUHJha3Rpa3VtDQoNCiMjIDIuNS4xIE9iamVjdGl2ZQ0KMS4gTWVtYWhhbWkgZGFuIG1lbmVyYXBrYW4gcGVybnlhdGFhbiBrb25kaXNpb25hbCAoaWYsIGlmLWVsc2UsIGlmLWVsaWYtZWxzZSkuDQoyLiBUZXJhcGthbiBsb29wIChmb3IgbG9vcCwgd2hpbGUgbG9vcCwgYnJlYWssIGNvbnRpbnVlKSB1bnR1ayBtZW5nYW5hbGlzaXMgaGltcHVuYW4gZGF0YS4NCg0KR3VuYWthbiAqKmRhdGFzZXQgZHVtbXkqKiBiZXJpa3V0IGluaQ0KDQp8IElEIHwgTmFtYSB8IFVtdXIgfCBHYWppIHwgUG9zaXNpIHwgUGVyZm9ybWEgfA0KfC0tLS18LS0tLS0tfC0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwNCnwgMSB8IEJhZ2FzIHwgMjUgfCA1MDAwIHwgU3RhZmYgfCBCYWlrIHwNCnwgMiB8IEpvYW4gfCAzMCB8IDcwMDAgfCBTdXBlcnZpc29yIHwgU2FuZ2F0IEJhaWsgfA0KfCAzIHwgQWx5YSB8IDI3IHwgNjUwMCB8IFN0YWZmIHwgUmF0YS1yYXRhIHwNCnwgNCB8IER3aSB8IDM1IHwgMTAwMDAgfCBNYW5hZ2VyIHwgQmFpayB8DQp8IDUgfCBOYWJpbCB8IDQwIHwgMTIwMDAgfCBEaXJlY3RvciB8IFNhbmdhdCBCYWlrIHwNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIElEID0gYygxLCAyLCAzLCA0LCA1KSwNCiAgTmFtYSA9IGMoIkJhZ2FzIiwgIkpvYW4iLCAiQWx5YSIsICJEd2kiLCAiTmFiaWwiKSwNCiAgVW11ciA9IGMoMjUsIDMwLCAyNywgMzUsIDQwKSwNCiAgR2FqaSA9IGMoNTAwMCwgNzAwMCwgNjUwMCwgMTAwMDAsIDEyMDAwKSwNCiAgUG9zaXNpID0gYygiU3RhZmYiLCAiU3VwZXJ2aXNvciIsICJTdGFmZiIsICJNYW5hZ2VyIiwgIkRpcmVjdG9yIiksDQogIFBlcmZvcm1hID0gYygiQmFpayIsICJTYW5nYXQgQmFpayIsICJSYXRhLXJhdGEiLCAiQmFpayIsICJTYW5nYXQgQmFpayIpDQopDQprYWJsZShkYXRhKQ0KYGBgDQoNCg0KDQojIyAyLjUuMiBDb25kaXRpb25hbCBTdGF0ZW1lbnRzDQoNClRlbnR1a2FuIHRpbmdrYXQgYm9udXMgYmVyZGFzYXJrYW4ga2luZXJqYSBrYXJ5YXdhbjoNCi0gU2FuZ2F0IEJhaWsgLT4gMjAlIGRhcmkgZ2FqaQ0KLSBCYWlrIC0+IDEwJSBkYXJpIGdhamkNCi0gUmF0YS1yYXRhIC0+IDUlIGRhcmkgZ2FqaQ0KDQpUdWdhcyBBbmRhOg0KLSBUdWxpcyBwcm9ncmFtIGRhbGFtIFB5dGhvbiBkYW4gUiB1bnR1ayBtZW5naGl0dW5nIGJvbnVzIHNldGlhcCBrYXJ5YXdhbi4NCi0gTWVuYW1waWxrYW4gb3V0cHV0IGRhbGFtIGZvcm1hdCBpbmk6DQoNCiAgIk5hbWU6IEJhZ2FzLCBCb251czogNTAwIg0KICANCmBgYHtyfQ0KIyBEYXRhIGxlbmdrYXANCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgSUQgPSBjKDEsIDIsIDMsIDQsIDUpLA0KICBOYW1hID0gYygiQmFnYXMiLCAiSm9hbiIsICJBbHlhIiwgIkR3aSIsICJOYWJpbCIpLA0KICBVbXVyID0gYygyNSwgMzAsIDI3LCAzNSwgNDApLA0KICBHYWppID0gYyg1MDAwLCA3MDAwLCA2NTAwLCAxMDAwMCwgMTIwMDApLA0KICBQb3Npc2kgPSBjKCJTdGFmZiIsICJTdXBlcnZpc29yIiwgIlN0YWZmIiwgIk1hbmFnZXIiLCAiRGlyZWN0b3IiKSwNCiAgUGVyZm9ybWEgPSBjKCJCYWlrIiwgIlNhbmdhdCBCYWlrIiwgIlJhdGEtcmF0YSIsICJCYWlrIiwgIlNhbmdhdCBCYWlrIikNCikNCg0KIyBNZW5naGl0dW5nIGJvbnVzIGRhbiBtZW5hbXBpbGthbiBvdXRwdXQNCmZvciAoaSBpbiAxOm5yb3coZGF0YSkpIHsNCiAgaWYgKGRhdGEkUGVyZm9ybWFbaV0gPT0gIlNhbmdhdCBCYWlrIikgew0KICAgIGJvbnVzIDwtIGRhdGEkR2FqaVtpXSAqIDAuMg0KICB9IGVsc2UgaWYgKGRhdGEkUGVyZm9ybWFbaV0gPT0gIkJhaWsiKSB7DQogICAgYm9udXMgPC0gZGF0YSRHYWppW2ldICogMC4xDQogIH0gZWxzZSB7DQogICAgYm9udXMgPC0gZGF0YSRHYWppW2ldICogMC4wNQ0KICB9DQogIA0KICBjYXQoc3ByaW50ZigiTmFtZTogJXMsIEJvbnVzOiAlZFxuIiwgZGF0YSROYW1hW2ldLCBhcy5pbnRlZ2VyKGJvbnVzKSkpDQp9DQpgYGANCg0KIyMgMi41LjMgTG9vcHMgKEZvciAmIFdoaWxlKQ0KDQojIyMgMi41LjMuMSBHdW5ha2FuIGZvciBsb29wIHVudHVrIG1lbWJ1YXQgZGFmdGFyIGthcnlhd2FuIGRlbmdhbiBnYWppIGxlYmloIGRhcmkgNjAwMC4NCkhhc2lsIHlhbmcgRGloYXJhcGthbjogIA0KTmFtZTogSm9hbiwgU2FsYXJ5OiA3MDAwICANCk5hbWU6IEFseWEsIFNhbGFyeTogNjUwMCAgDQpOYW1lOiBEd2ksIFNhbGFyeTogMTAwMDAgIA0KTmFtZTogTmFiaWwsIFNhbGFyeTogMTIwMDANCg0KYGBge3J9DQojIERhdGEgbGVuZ2thcA0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBJRCA9IGMoMSwgMiwgMywgNCwgNSksDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIEdhamkgPSBjKDUwMDAsIDcwMDAsIDY1MDAsIDEwMDAwLCAxMjAwMCkNCikNCg0KIyBNZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpIDYwMDANCmZvciAoaSBpbiAxOm5yb3coZGF0YSkpIHsNCiAgaWYgKGRhdGEkR2FqaVtpXSA+IDYwMDApIHsNCiAgICBjYXQoc3ByaW50ZigiTmFtZTogJXMsIFNhbGFyeTogJWRcbiIsIGRhdGEkTmFtYVtpXSwgZGF0YSRHYWppW2ldKSkNCiAgfQ0KfQ0KDQpgYGANCg0KIyMjIDIuNS4zLjIgR3VuYWthbiB3aGlsZSBsb29wIHVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSAiTWFuYWplciIgZGl0ZW11a2FuLg0KSGFzaWwgeWFuZyBEaWhhcmFwa2FuOiAgDQpOYW1lOiBCYWdhcywgUG9zaXRpb246IFN0YWZmICANCk5hbWU6IEpvYW4sIFBvc2l0aW9uOiBTdXBlcnZpc29yICANCk5hbWU6IEFseWEsIFBvc2l0aW9uOiBTdGFmZiAgIA0KTmFtZTogRHdpLCBQb3NpdGlvbjogTWFuYWdlciAoU3RvcCBoZXJlKQ0KDQpgYGB7cn0NCiMgRGF0YSBsZW5na2FwDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIElEID0gYygxLCAyLCAzLCA0LCA1KSwNCiAgTmFtYSA9IGMoIkJhZ2FzIiwgIkpvYW4iLCAiQWx5YSIsICJEd2kiLCAiTmFiaWwiKSwNCiAgUG9zaXNpID0gYygiU3RhZmYiLCAiU3VwZXJ2aXNvciIsICJTdGFmZiIsICJNYW5hZ2VyIiwgIkRpcmVjdG9yIikNCikNCg0KIyBNZW5nZ3VuYWthbiB3aGlsZSBsb29wIHVudHVrIG1lbmFtcGlsa2FuIGhpbmdnYSAiTWFuYWdlciIgZGl0ZW11a2FuDQppIDwtIDENCndoaWxlIChpIDw9IG5yb3coZGF0YSkpIHsNCiAgaWYgKGRhdGEkUG9zaXNpW2ldID09ICJNYW5hZ2VyIikgew0KICAgIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgUG9zaXRpb246ICVzIChTdG9wIGhlcmUpXG4iLCBkYXRhJE5hbWFbaV0sIGRhdGEkUG9zaXNpW2ldKSkNCiAgICBicmVhaw0KICB9DQogIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgUG9zaXRpb246ICVzXG4iLCBkYXRhJE5hbWFbaV0sIGRhdGEkUG9zaXNpW2ldKSkNCiAgaSA8LSBpICsgMQ0KfQ0KYGBgDQoNCiMjIyAyLjUuMy4zIEd1bmFrYW4gYnJlYWsgdW50dWsgbWVuZ2hlbnRpa2FuIGxvb3Aga2V0aWthIGthcnlhd2FuIGRlbmdhbiBnYWppIGRpIGF0YXMgMTAuMDAwIGRpdGVtdWthbi4NCkhhc2lsIHlhbmcgRGloYXJhcGthbjogIA0KTmFtZTogQmFnYXMsIFNhbGFyeTogNTAwMCAgIA0KTmFtZTogSm9hbiwgU2FsYXJ5OiA3MDAwICANCk5hbWU6IEFseWEsIFNhbGFyeTogNjUwMCAgDQpOYW1lOiBEd2ksIFNhbGFyeTogMTAwMDAgIA0KKFN0b3BwZWQgYmVjYXVzZSBOYWJpbCBoYXMgYSBzYWxhcnkgYWJvdmUgMTAsMDAwKQ0KDQpgYGB7cn0NCiMgRGF0YSBsZW5na2FwDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIElEID0gYygxLCAyLCAzLCA0LCA1KSwNCiAgTmFtYSA9IGMoIkJhZ2FzIiwgIkpvYW4iLCAiQWx5YSIsICJEd2kiLCAiTmFiaWwiKSwNCiAgR2FqaSA9IGMoNTAwMCwgNzAwMCwgNjUwMCwgMTAwMDAsIDEyMDAwKQ0KKQ0KDQojIE1lbmdndW5ha2FuIGZvciBsb29wIGRlbmdhbiBicmVhaw0KZm9yIChpIGluIDE6bnJvdyhkYXRhKSkgew0KICBpZiAoZGF0YSRHYWppW2ldID4gMTAwMDApIHsNCiAgICBjYXQoc3ByaW50ZigiKFN0b3BwZWQgYmVjYXVzZSAlcyBoYXMgYSBzYWxhcnkgYWJvdmUgMTAsMDAwKVxuIiwgZGF0YSROYW1hW2ldKSkNCiAgICBicmVhaw0KICB9DQogIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgU2FsYXJ5OiAlZFxuIiwgZGF0YSROYW1hW2ldLCBkYXRhJEdhamlbaV0pKQ0KfQ0KDQpgYGANCg0KIyMjIDIuNS4zLjQuIEd1bmFrYW4gbGFuanV0a2FuIHVudHVrIG1lbGV3YXRpIGthcnlhd2FuIGRlbmdhbiBraW5lcmphICJSYXRhLXJhdGEiLg0KSGFzaWwgeWFuZyBEaWhhcmFwa2FuOiAgDQpOYW1lOiBCYWdhcywgUGVyZm9ybWFuY2U6IEdvb2QgIA0KTmFtZTogSm9hbiwgUGVyZm9ybWFuY2U6IFZlcnkgR29vZCAgDQpOYW1lOiBEd2ksIFBlcmZvcm1hbmNlOiBHb29kICANCk5hbWU6IE5hYmlsLCBQZXJmb3JtYW5jZTogVmVyeSBHb29kICAgDQooQWx5YSBpcyBza2lwcGVkIGJlY2F1c2UgdGhlIHBlcmZvcm1hbmNlIGlzICJBdmVyYWdlIikNCg0KYGBge3J9DQojIERhdGEgbGVuZ2thcA0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBJRCA9IGMoMSwgMiwgMywgNCwgNSksDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIFBlcmZvcm1hID0gYygiR29vZCIsICJWZXJ5IEdvb2QiLCAiQXZlcmFnZSIsICJHb29kIiwgIlZlcnkgR29vZCIpDQopDQoNCiMgTWVuZ2d1bmFrYW4gZm9yIGxvb3AgZGVuZ2FuIG5leHQgKHNldGFyYSBkZW5nYW4gY29udGludWUgZGkgUHl0aG9uKQ0Kc2tpcHBlZCA8LSAiIg0KZm9yIChpIGluIDE6bnJvdyhkYXRhKSkgew0KICBpZiAoZGF0YSRQZXJmb3JtYVtpXSA9PSAiQXZlcmFnZSIpIHsNCiAgICBza2lwcGVkIDwtIGRhdGEkTmFtYVtpXSAgIyBTaW1wYW4gbmFtYSBrYXJ5YXdhbiB5YW5nIGRpbGV3YXRpDQogICAgbmV4dA0KICB9DQogIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgUGVyZm9ybWFuY2U6ICVzXG4iLCBkYXRhJE5hbWFbaV0sIGRhdGEkUGVyZm9ybWFbaV0pKQ0KfQ0KDQojIE1lbmFtcGlsa2FuIHBlc2FuIGJhaHdhIEFseWEgZGlsZXdhdGkNCmNhdChzcHJpbnRmKCIoJXMgaXMgc2tpcHBlZCBiZWNhdXNlIHRoZSBwZXJmb3JtYW5jZSBpcyBcIkF2ZXJhZ2VcIilcbiIsIHNraXBwZWQpKQ0KDQpgYGANCg==