Pemprogram Ilmu Data

Syntax & Control Flow

Logo

1 Objective

1.1 Tujuan

  1. Memahami dan menerapkan pernyataan kondisional (if, if-else, if-elif-else).
  2. Menerapkan perulangan (for loop, while loop, break, continue) untuk menganalisis sebuah dataset.

Gunakan dataset dummy berikut:

ID Nama Usia Gaji Posisi Performa
1 Bagas 25 5000 Staf Baik
2 Joan 30 7000 Supervisor Sangat Baik
3 Alya 27 6500 Staf Rata-rata
4 Dwi 35 10000 Manajer Baik
5 Nabil 40 12000 Direktur Sangat Baik

2 Conditional Stantements

Tentukan tingkat bonus berdasarkan performa karyawan:

  • Sangat Baik → 20% dari gaji
  • Baik → 10% dari gaji
  • Rata-rata → 5% dari gaji

2.1 Tugas:

  • Buat program dalam Python dan R untuk menghitung bonus setiap karyawan.

  • Tampilkan output dalam format berikut:

    "Nama: Bagas, Bonus: 500"

2.2 Jawaban:

Kode R untuk Menghitung Bonus setiap karyawan.

# Dataset karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000),
  Performa = c("Baik", "Sangat Baik", "Rata-rata", "Baik", "Sangat Baik")
)

# Fungsi untuk menghitung bonus berdasarkan performa
hitung_bonus <- function(performa, gaji) {
  if (performa == "Sangat Baik") {
    return(gaji * 0.20)
  } else if (performa == "Baik") {
    return(gaji * 0.10)
  } else if (performa == "Rata-rata") {
    return(gaji * 0.05)
  } else {
    return(0)
  }
}

# Menambahkan kolom bonus ke dataset
karyawan$Bonus <- mapply(hitung_bonus, karyawan$Performa, karyawan$Gaji)

# Menampilkan output sesuai format yang diminta
for (i in 1:nrow(karyawan)) {
  cat(sprintf('Nama: %s, Bonus: %d\n', karyawan$Nama[i], karyawan$Bonus[i]))
}
## Nama: Bagas, Bonus: 500
## Nama: Joan, Bonus: 1400
## Nama: Alya, Bonus: 325
## Nama: Dwi, Bonus: 1000
## Nama: Nabil, Bonus: 2400

3 Loops (For & While)

3.1 for loop

Untuk menampilkan karyawan dengan gaji lebih dari 6000.

Output yang Diharapkan:

Nama: Joan, Gaji: 7000
Nama: Alya, Gaji: 6500
Nama: Dwi, Gaji: 10000
Nama: Nabil, Gaji: 12000

3.1.1 Jawaban:

Kode R untuk menampilkan karyawan dengan gaji lebih dari 6000.

# Menggunakan for loop untuk menampilkan karyawan dengan gaji lebih dari 6000
karyawan_gaji_tinggi <- subset(karyawan, Gaji > 6000)

# Menampilkan dalam format teks
for (i in 1:nrow(karyawan_gaji_tinggi)) {
  cat(sprintf("Nama: %s, Gaji: %d\n", karyawan_gaji_tinggi$Nama[i], karyawan_gaji_tinggi$Gaji[i]))
}
## Nama: Joan, Gaji: 7000
## Nama: Alya, Gaji: 6500
## Nama: Dwi, Gaji: 10000
## Nama: Nabil, Gaji: 12000

3.2 while loop

Untuk menampilkan karyawan hingga menemukan “Manajer”.

Nama: Bagas, Posisi: Staf
Nama: Joan, Posisi: Supervisor
Nama: Alya, Posisi: Staf
Nama: Dwi, Posisi: Manajer (Berhenti di sini)

3.2.1 Jawaban

Kode R untuk untuk menampilkan karyawan hingga menemukan “Manajer”.

# Dataset karyawan
karyawan <- data.frame(
  Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
  Gaji = c(5000, 7000, 6500, 10000, 12000),
  Posisi = c("Staf", "Supervisor", "Staf", "Manajer", "Direktur"),
  Performa = c("Good", "Very Good", "Average", "Good", "Very Good")
)

# Menggunakan while loop untuk menampilkan karyawan hingga menemukan "Manajer"
i <- 1
while (i <= nrow(karyawan)) {
  cat(sprintf("Nama: %s, Posisi: %s\n", karyawan$Nama[i], karyawan$Posisi[i]))
  if (karyawan$Posisi[i] == "Manajer") {
    cat("(Berhenti di sini)\n")
    break
  }
  i <- i + 1
}
## Nama: Bagas, Posisi: Staf
## Nama: Joan, Posisi: Supervisor
## Nama: Alya, Posisi: Staf
## Nama: Dwi, Posisi: Manajer
## (Berhenti di sini)

3.3 Break

Untuk menghentikan perulangan ketika menemukan karyawan dengan gaji lebih dari 10.000.

Output yang Diharapkan:

Nama: Bagas, Gaji: 5000
Nama: Joan, Gaji: 7000
Nama: Alya, Gaji: 6500
Nama: Dwi, Gaji: 10000
(Berhenti karena Nabil memiliki gaji di atas 10.000)

3.3.1 Jawaban:

Kode R untuk menghentikan perulangan ketika menemukan karyawan dengan gaji lebih dari 10.000.

# Menggunakan break untuk berhenti saat menemukan gaji lebih dari 10.000
for (i in 1:nrow(karyawan)) {
  cat(sprintf("Nama: %s, Gaji: %d\n", karyawan$Nama[i], karyawan$Gaji[i]))
  
  # Jika gaji lebih dari 10.000, hentikan perulangan
  if (karyawan$Gaji[i] > 10000) {
    cat(sprintf("(Berhenti karena %s memiliki gaji di atas 10.000)\n", karyawan$Nama[i]))
    break
  }
}
## Nama: Bagas, Gaji: 5000
## Nama: Joan, Gaji: 7000
## Nama: Alya, Gaji: 6500
## Nama: Dwi, Gaji: 10000
## Nama: Nabil, Gaji: 12000
## (Berhenti karena Nabil memiliki gaji di atas 10.000)

3.4 Continue

Untuk melewati karyawan dengan performa “Average”.

Output yang Diharapkan:

Nama: Bagas, Performa: Good
Nama: Joan, Performa: Very Good
Nama: Dwi, Performa: Good
Nama: Nabil, Performa: Very Good
(Alya dilewati karena performanya "Average")

3.4.1 Jawaban:

Kode R untuk melewati karyawan dengan performa “Average”.

# Menggunakan continue untuk melewati karyawan dengan performa "Average"
for (i in 1:nrow(karyawan)) {
  if (karyawan$Performa[i] == "Average") {
    next  # Lewati karyawan dengan performa "Average"
  }
  cat(sprintf("Nama: %s, Performa: %s\n", karyawan$Nama[i], karyawan$Performa[i]))
}
## Nama: Bagas, Performa: Good
## Nama: Joan, Performa: Very Good
## Nama: Dwi, Performa: Good
## Nama: Nabil, Performa: Very Good
LS0tDQp0aXRsZTogIlBlbXByb2dyYW0gSWxtdSBEYXRhIg0Kc3VidGl0bGU6ICJTeW50YXggJiBDb250cm9sIEZsb3ciDQphdXRob3I6IA0KICAtICJOb3ZhIFNpdG9ydXMgNTIyNDAwMjMiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlL3N0eWxlIGNzcy5jc3MiDQotLS0NCg0KPHN0eWxlPg0KICBib2R5IHsNCiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICB9DQo8L3N0eWxlPg0KDQo8aW1nIHNyYz0iTk9WQS5qcGciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjUwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIvPg0KDQoNCg0KIyBPYmplY3RpdmUgDQoNCiMjIFR1anVhbg0KDQoxLiBNZW1haGFtaSBkYW4gbWVuZXJhcGthbiAqKnBlcm55YXRhYW4ga29uZGlzaW9uYWwqKiAoKmlmKiwgKmlmLWVsc2UqLCAqaWYtZWxpZi1lbHNlKikuICANCjIuIE1lbmVyYXBrYW4gKipwZXJ1bGFuZ2FuKiogKCpmb3IgbG9vcCosICp3aGlsZSBsb29wKiwgKmJyZWFrKiwgKmNvbnRpbnVlKikgdW50dWsgbWVuZ2FuYWxpc2lzIHNlYnVhaCBkYXRhc2V0LiAgDQoNCkd1bmFrYW4gZGF0YXNldCAqKmR1bW15KiogYmVyaWt1dDogIA0KDQp8IElEICB8IE5hbWEgIHwgVXNpYSB8IEdhamkgIHwgUG9zaXNpICAgICAgIHwgUGVyZm9ybWEgICAgICB8ICANCnwtLS0tfC0tLS0tLXwtLS0tLXwtLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfCAgDQp8IDEgIHwgQmFnYXMgfCAyNSAgfCA1MDAwICB8IFN0YWYgICAgICAgfCBCYWlrICAgICAgICAgfCAgDQp8IDIgIHwgSm9hbiAgfCAzMCAgfCA3MDAwICB8IFN1cGVydmlzb3IgfCBTYW5nYXQgQmFpayAgfCAgDQp8IDMgIHwgQWx5YSAgfCAyNyAgfCA2NTAwICB8IFN0YWYgICAgICAgfCBSYXRhLXJhdGEgICAgfCAgDQp8IDQgIHwgRHdpICAgfCAzNSAgfCAxMDAwMCB8IE1hbmFqZXIgICAgfCBCYWlrICAgICAgICAgfCAgDQp8IDUgIHwgTmFiaWwgfCA0MCAgfCAxMjAwMCB8IERpcmVrdHVyICAgfCBTYW5nYXQgQmFpayAgfCAgDQoNCg0KIyBDb25kaXRpb25hbCBTdGFudGVtZW50cw0KDQpUZW50dWthbiAqKnRpbmdrYXQgYm9udXMqKiBiZXJkYXNhcmthbiAqKnBlcmZvcm1hKioga2FyeWF3YW46ICANCg0KLSAqKlNhbmdhdCBCYWlrKiog4oaSIDIwJSBkYXJpIGdhamkgIA0KLSAqKkJhaWsqKiDihpIgMTAlIGRhcmkgZ2FqaSAgDQotICoqUmF0YS1yYXRhKiog4oaSIDUlIGRhcmkgZ2FqaSAgDQoNCiMjIFR1Z2FzOiANCg0KLSBCdWF0IHByb2dyYW0gZGFsYW0gKipQeXRob24gZGFuIFIqKiB1bnR1ayBtZW5naGl0dW5nIGJvbnVzIHNldGlhcCBrYXJ5YXdhbi4gIA0KLSBUYW1waWxrYW4gb3V0cHV0IGRhbGFtIGZvcm1hdCBiZXJpa3V0OiAgDQogIGBgYHBsYWludGV4dA0KICAiTmFtYTogQmFnYXMsIEJvbnVzOiA1MDAiDQogIGBgYA0KICANCiMjIEphd2FiYW46DQoNCktvZGUgUiB1bnR1ayBNZW5naGl0dW5nIEJvbnVzIHNldGlhcCBrYXJ5YXdhbi4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIERhdGFzZXQga2FyeWF3YW4NCmthcnlhd2FuIDwtIGRhdGEuZnJhbWUoDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIEdhamkgPSBjKDUwMDAsIDcwMDAsIDY1MDAsIDEwMDAwLCAxMjAwMCksDQogIFBlcmZvcm1hID0gYygiQmFpayIsICJTYW5nYXQgQmFpayIsICJSYXRhLXJhdGEiLCAiQmFpayIsICJTYW5nYXQgQmFpayIpDQopDQoNCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgYm9udXMgYmVyZGFzYXJrYW4gcGVyZm9ybWENCmhpdHVuZ19ib251cyA8LSBmdW5jdGlvbihwZXJmb3JtYSwgZ2FqaSkgew0KICBpZiAocGVyZm9ybWEgPT0gIlNhbmdhdCBCYWlrIikgew0KICAgIHJldHVybihnYWppICogMC4yMCkNCiAgfSBlbHNlIGlmIChwZXJmb3JtYSA9PSAiQmFpayIpIHsNCiAgICByZXR1cm4oZ2FqaSAqIDAuMTApDQogIH0gZWxzZSBpZiAocGVyZm9ybWEgPT0gIlJhdGEtcmF0YSIpIHsNCiAgICByZXR1cm4oZ2FqaSAqIDAuMDUpDQogIH0gZWxzZSB7DQogICAgcmV0dXJuKDApDQogIH0NCn0NCg0KIyBNZW5hbWJhaGthbiBrb2xvbSBib251cyBrZSBkYXRhc2V0DQprYXJ5YXdhbiRCb251cyA8LSBtYXBwbHkoaGl0dW5nX2JvbnVzLCBrYXJ5YXdhbiRQZXJmb3JtYSwga2FyeWF3YW4kR2FqaSkNCg0KIyBNZW5hbXBpbGthbiBvdXRwdXQgc2VzdWFpIGZvcm1hdCB5YW5nIGRpbWludGENCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW4pKSB7DQogIGNhdChzcHJpbnRmKCdOYW1hOiAlcywgQm9udXM6ICVkXG4nLCBrYXJ5YXdhbiROYW1hW2ldLCBrYXJ5YXdhbiRCb251c1tpXSkpDQp9DQpgYGANCg0KIyBMb29wcyAoRm9yICYgV2hpbGUpDQoNCiMjICoqZm9yIGxvb3AqKg0KDQpVbnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpICoqNjAwMCoqLg0KDQpPdXRwdXQgeWFuZyBEaWhhcmFwa2FuOg0KDQpgYGBwbGFpbnRleHQNCk5hbWE6IEpvYW4sIEdhamk6IDcwMDANCk5hbWE6IEFseWEsIEdhamk6IDY1MDANCk5hbWE6IER3aSwgR2FqaTogMTAwMDANCk5hbWE6IE5hYmlsLCBHYWppOiAxMjAwMA0KYGBgDQojIyMgSmF3YWJhbjoNCktvZGUgUiB1bnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpICoqNjAwMCoqLg0KDQpgYGB7ciwgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW5nZ3VuYWthbiBmb3IgbG9vcCB1bnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpIDYwMDANCmthcnlhd2FuX2dhamlfdGluZ2dpIDwtIHN1YnNldChrYXJ5YXdhbiwgR2FqaSA+IDYwMDApDQoNCiMgTWVuYW1waWxrYW4gZGFsYW0gZm9ybWF0IHRla3MNCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW5fZ2FqaV90aW5nZ2kpKSB7DQogIGNhdChzcHJpbnRmKCJOYW1hOiAlcywgR2FqaTogJWRcbiIsIGthcnlhd2FuX2dhamlfdGluZ2dpJE5hbWFbaV0sIGthcnlhd2FuX2dhamlfdGluZ2dpJEdhamlbaV0pKQ0KfQ0KDQpgYGANCg0KIyMgKip3aGlsZSBsb29wKiogDQoNClVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSBtZW5lbXVrYW4gKioiTWFuYWplciIqKi4NCg0KYGBgcGxhaW50ZXh0DQpOYW1hOiBCYWdhcywgUG9zaXNpOiBTdGFmDQpOYW1hOiBKb2FuLCBQb3Npc2k6IFN1cGVydmlzb3INCk5hbWE6IEFseWEsIFBvc2lzaTogU3RhZg0KTmFtYTogRHdpLCBQb3Npc2k6IE1hbmFqZXIgKEJlcmhlbnRpIGRpIHNpbmkpDQpgYGANCg0KIyMjIEphd2FiYW4NCg0KS29kZSBSIHVudHVrIHVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSBtZW5lbXVrYW4gKioiTWFuYWplciIqKi4NCg0KYGBge3IsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgRGF0YXNldCBrYXJ5YXdhbg0Ka2FyeWF3YW4gPC0gZGF0YS5mcmFtZSgNCiAgTmFtYSA9IGMoIkJhZ2FzIiwgIkpvYW4iLCAiQWx5YSIsICJEd2kiLCAiTmFiaWwiKSwNCiAgR2FqaSA9IGMoNTAwMCwgNzAwMCwgNjUwMCwgMTAwMDAsIDEyMDAwKSwNCiAgUG9zaXNpID0gYygiU3RhZiIsICJTdXBlcnZpc29yIiwgIlN0YWYiLCAiTWFuYWplciIsICJEaXJla3R1ciIpLA0KICBQZXJmb3JtYSA9IGMoIkdvb2QiLCAiVmVyeSBHb29kIiwgIkF2ZXJhZ2UiLCAiR29vZCIsICJWZXJ5IEdvb2QiKQ0KKQ0KDQojIE1lbmdndW5ha2FuIHdoaWxlIGxvb3AgdW50dWsgbWVuYW1waWxrYW4ga2FyeWF3YW4gaGluZ2dhIG1lbmVtdWthbiAiTWFuYWplciINCmkgPC0gMQ0Kd2hpbGUgKGkgPD0gbnJvdyhrYXJ5YXdhbikpIHsNCiAgY2F0KHNwcmludGYoIk5hbWE6ICVzLCBQb3Npc2k6ICVzXG4iLCBrYXJ5YXdhbiROYW1hW2ldLCBrYXJ5YXdhbiRQb3Npc2lbaV0pKQ0KICBpZiAoa2FyeWF3YW4kUG9zaXNpW2ldID09ICJNYW5hamVyIikgew0KICAgIGNhdCgiKEJlcmhlbnRpIGRpIHNpbmkpXG4iKQ0KICAgIGJyZWFrDQogIH0NCiAgaSA8LSBpICsgMQ0KfQ0KDQoNCmBgYA0KDQojIyAqKkJyZWFrKiogDQoNClVudHVrIG1lbmdoZW50aWthbiBwZXJ1bGFuZ2FuIGtldGlrYSBtZW5lbXVrYW4ga2FyeWF3YW4gZGVuZ2FuIGdhamkgbGViaWggZGFyaSAqKjEwLjAwMC4qKg0KDQoqKk91dHB1dCB5YW5nIERpaGFyYXBrYW46KioNCmBgYHBsYWludGV4dA0KTmFtYTogQmFnYXMsIEdhamk6IDUwMDANCk5hbWE6IEpvYW4sIEdhamk6IDcwMDANCk5hbWE6IEFseWEsIEdhamk6IDY1MDANCk5hbWE6IER3aSwgR2FqaTogMTAwMDANCihCZXJoZW50aSBrYXJlbmEgTmFiaWwgbWVtaWxpa2kgZ2FqaSBkaSBhdGFzIDEwLjAwMCkNCmBgYA0KIyMjIEphd2FiYW46DQoNCktvZGUgUiB1bnR1ayBtZW5naGVudGlrYW4gcGVydWxhbmdhbiBrZXRpa2EgbWVuZW11a2FuIGthcnlhd2FuIGRlbmdhbiBnYWppIGxlYmloIGRhcmkgKioxMC4wMDAuKioNCg0KYGBge3IsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVuZ2d1bmFrYW4gYnJlYWsgdW50dWsgYmVyaGVudGkgc2FhdCBtZW5lbXVrYW4gZ2FqaSBsZWJpaCBkYXJpIDEwLjAwMA0KZm9yIChpIGluIDE6bnJvdyhrYXJ5YXdhbikpIHsNCiAgY2F0KHNwcmludGYoIk5hbWE6ICVzLCBHYWppOiAlZFxuIiwga2FyeWF3YW4kTmFtYVtpXSwga2FyeWF3YW4kR2FqaVtpXSkpDQogIA0KICAjIEppa2EgZ2FqaSBsZWJpaCBkYXJpIDEwLjAwMCwgaGVudGlrYW4gcGVydWxhbmdhbg0KICBpZiAoa2FyeWF3YW4kR2FqaVtpXSA+IDEwMDAwKSB7DQogICAgY2F0KHNwcmludGYoIihCZXJoZW50aSBrYXJlbmEgJXMgbWVtaWxpa2kgZ2FqaSBkaSBhdGFzIDEwLjAwMClcbiIsIGthcnlhd2FuJE5hbWFbaV0pKQ0KICAgIGJyZWFrDQogIH0NCn0NCg0KYGBgDQoNCiMjICoqQ29udGludWUqKiANCg0KVW50dWsgbWVsZXdhdGkga2FyeWF3YW4gZGVuZ2FuIHBlcmZvcm1hICoqIkF2ZXJhZ2UiKiouDQoNCioqT3V0cHV0IHlhbmcgRGloYXJhcGthbjoqKg0KDQpgYGBwbGFpbnRleHQNCk5hbWE6IEJhZ2FzLCBQZXJmb3JtYTogR29vZA0KTmFtYTogSm9hbiwgUGVyZm9ybWE6IFZlcnkgR29vZA0KTmFtYTogRHdpLCBQZXJmb3JtYTogR29vZA0KTmFtYTogTmFiaWwsIFBlcmZvcm1hOiBWZXJ5IEdvb2QNCihBbHlhIGRpbGV3YXRpIGthcmVuYSBwZXJmb3JtYW55YSAiQXZlcmFnZSIpDQpgYGANCg0KIyMjIEphd2FiYW46DQoNCktvZGUgUiAgdW50dWsgbWVsZXdhdGkga2FyeWF3YW4gZGVuZ2FuIHBlcmZvcm1hICoqIkF2ZXJhZ2UiKiouDQoNCmBgYHtyLCBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbmdndW5ha2FuIGNvbnRpbnVlIHVudHVrIG1lbGV3YXRpIGthcnlhd2FuIGRlbmdhbiBwZXJmb3JtYSAiQXZlcmFnZSINCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW4pKSB7DQogIGlmIChrYXJ5YXdhbiRQZXJmb3JtYVtpXSA9PSAiQXZlcmFnZSIpIHsNCiAgICBuZXh0ICAjIExld2F0aSBrYXJ5YXdhbiBkZW5nYW4gcGVyZm9ybWEgIkF2ZXJhZ2UiDQogIH0NCiAgY2F0KHNwcmludGYoIk5hbWE6ICVzLCBQZXJmb3JtYTogJXNcbiIsIGthcnlhd2FuJE5hbWFbaV0sIGthcnlhd2FuJFBlcmZvcm1hW2ldKSkNCn0NCg0KYGBgDQoNCg==