PEMOGRAMAN SAINS DATA

Pratikum Pemograman Dasar

Fikaa.jpg


Pratikum Pemograman Dasar

1. Mengidentifikasi Tipe Data

a <- 42L

b <- 3.14

c <- “Hello”

d <- FALSE

e <- c(1, 2, 3)

f <- list(name <- “Alice”, age <- 25)

1.Identifikasi tipe data setiap variabel di atas.

a <- 42L # Integer

b <- 3.14 # Double (Numeric)

c <- “Hello” # Character

d <- FALSE # Logical

e <- c(1, 2, 3) # Vector (Numeric)

f <- list(name <- “Alice”, age <- 25} # List

2. Mencetak Tipe Data

# b = 3.14
b <- 3.14
print(class(b))  # Output: "numeric"
## [1] "numeric"
# c = "Hello"
c <- "Hello"
print(class(c))  # Output: "character"
## [1] "character"
# d = FALSE
d <- FALSE
print(class(d))  # Output: "logical"
## [1] "logical"
# e = c(1, 2, 3)
e <- c(1, 2, 3)
print(class(e))  # Output: "numeric"
## [1] "numeric"
# f = list(name = "Alice", age = 25)
f <- list(name = "Alice", age = 25)
print(class(f))  # Output: "list"
## [1] "list"

2. Variabel dan Manipulasi Data

x <- 20 y <- 5 text1 <- “Data” text2 <- “Science”

1. Perbarui nilai x dengan menambahkan 10

# Membuat variabel
x <- 20
y <- 5
text1 <- "Data"
text2 <- "Science"

# 1. Perbarui nilai dengan menambahkan 10
x <- x + 10  # Sekarang x = 30
y <- y + 10  # Sekarang y = 15
print(paste("Nilai x setelah ditambah 10 adalah:", x))
## [1] "Nilai x setelah ditambah 10 adalah: 30"
print(paste("Nilai y setelah ditambah 10 adalah:", y))
## [1] "Nilai y setelah ditambah 10 adalah: 15"

2. Gabungkan text1 dan text2 ke dalam “Data Science”

text_combined <- paste(text1, text2)
print(text_combined)  # Output: "Data Science"
## [1] "Data Science"

3. Ubah teks gabungan menjadi huruf besar

text_upper <- toupper(text_combined)
print(text_upper)  # Output: "DATA SCIENCE"
## [1] "DATA SCIENCE"

3. Operasi Aritmatika

a <- 15

b <- 4

1. Hitunglah jumlah, selisih, produk, pembagian, dan modulo dari a dan b

a <- 15
b <- 4

# Jumlah
jumlah <- a + b
print(paste("Jumlah:", jumlah)) 
## [1] "Jumlah: 19"
# Selisih
selisih <- a - b
print(paste("Selisih:", selisih)) 
## [1] "Selisih: 11"
# Produk
produk <- a * b
print(paste("Produk:", produk))
## [1] "Produk: 60"
# Pembagian
pembagian <- a / b
print(paste("Pembagian:", pembagian))
## [1] "Pembagian: 3.75"
# Modulo
modulo <- a %% b
print(paste("Modulo:", modulo))
## [1] "Modulo: 3"

2. Hitunglah a pangkat b

result <- a ^ b
print(result)
## [1] 50625

3. Buat variabel baru c <- a/b dan ubah menjadi integer

# Membuat variabel
a <- 15
b <- 4

# 3. Buat variabel baru c <- a/b dan ubah menjadi integer
c <- a / b
cat("Hasil c = a / b adalah:", c, "\n")  # Output: 3.75
## Hasil c = a / b adalah: 3.75
# Ubah menjadi integer
c_integer <- as.integer(c)
cat("Hasil c dalam bentuk integer adalah:", c_integer, "\n")  # Output: 3
## Hasil c dalam bentuk integer adalah: 3

4. Operasi String

1.1. Ekstrak 5 karakter pertama dari teks

# Membuat variabel teks
text <- "Hello, Data Science!"

# Ekstrak 5 karakter pertama
text_first5 <- substr(text, start = 1, stop = 5)
cat("5 karakter pertama adalah:", text_first5, "\n")
## 5 karakter pertama adalah: Hello

2.Hitung jumlah karakter dalam teks

# 2. Hitung jumlah karakter dalam teks
jumlah_karakter <- nchar(text)
cat("Jumlah karakter dalam teks adalah:", jumlah_karakter, "\n")
## Jumlah karakter dalam teks adalah: 20

3. Mengubah teks menjadi huruf kecil

# 3. Mengubah teks menjadi huruf kecil
text_lower <- tolower(text)
cat("Teks dalam huruf kecil adalah:", text_lower, "\n")
## Teks dalam huruf kecil adalah: hello, data science!

5. Operator Perbandingan dan Logika

1. Periksa apakah x lebih besar dari y

# Membuat variabel
x <- 7
y <- 10

# 1. Periksa apakah x lebih besar dari y
hasil <- x > y
cat("Apakah x lebih besar dari y?:", hasil, "\n")
## Apakah x lebih besar dari y?: FALSE

2. Periksa apakah x kurang dari atau sama dengan y

# Membuat variabel
x <- 7
y <- 10

# 2. Periksa apakah x kurang dari atau sama dengan y
hasil <- x <= y
cat("Apakah x kurang dari atau sama dengan y?:", hasil, "\n")
## Apakah x kurang dari atau sama dengan y?: TRUE

3. Periksa apakah x tidak sama dengan y

# Membuat variabel
x <- 7
y <- 10

# 3. Periksa apakah x tidak sama dengan y
hasil <- x != y
cat("Apakah x tidak sama dengan y?:", hasil, "\n")
## Apakah x tidak sama dengan y?: TRUE

4. Evaluasilah ekspresi (x > 5) AND (y < 20)

# Membuat variabel
x <- 7
y <- 10

# 4. Evaluasi ekspresi (x > 5) AND (y < 20)
hasil <- (x > 5) & (y < 20)
cat("Hasil evaluasi ekspresi (x > 5) AND (y < 20):", hasil, "\n")
## Hasil evaluasi ekspresi (x > 5) AND (y < 20): TRUE

6. Konversi Tipe Data

1. Ubah num_str ke bilangan bulat dan tambahkan 10

# Membuat variabel
num_str <- "123"
num_float <- 45.67

# 1. Ubah num_str ke bilangan bulat dan tambahkan 10
num_int <- as.integer(num_str)  # Mengubah string menjadi integer
hasil <- num_int + 10
cat("Hasil setelah menambahkan 10:", hasil, "\n")
## Hasil setelah menambahkan 10: 133

2. Ubah num_float ke bilangan bulat

# 2. Ubah num_float ke bilangan bulat
num_int <- as.integer(num_float)  # Mengubah float menjadi integer
cat("num_float setelah diubah menjadi bilangan bulat:", num_int, "\n")
## num_float setelah diubah menjadi bilangan bulat: 45

3. Konversikan num_float kembali menjadi string

# 3. Konversikan num_float kembali menjadi string
num_str_converted <- as.character(num_float)  # Mengubah float menjadi string
cat("num_float setelah diubah menjadi string:", num_str_converted, "\n")
## num_float setelah diubah menjadi string: 45.67
LS0tDQp0aXRsZTogIlBFTU9HUkFNQU4gU0FJTlMgREFUQSINCg0Kc3VidGl0bGU6ICJQcmF0aWt1bSBQZW1vZ3JhbWFuIERhc2FyIg0KDQphdXRob3I6IA0KICAtICIgRmlrYSBJcnNhbmRpIERlc3Z5YW50aSAoNTIyNDAwMDEzKSINCiAgDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IiAgIA0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogIlN0eWxlLmNzcyINCiAgICANCi0tLQ0KDQogPGltZyBpZD0ibG9nby11dGFtYSIgc3JjPSJGaWthYS5qcGciIGFsdD0iRmlrYWEuanBnIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCg0KLS0tDQoNCg0KIyBQcmF0aWt1bSBQZW1vZ3JhbWFuIERhc2FyDQoNCiMjIDEuIE1lbmdpZGVudGlmaWthc2kgVGlwZSBEYXRhDQoNCmEgPC0gNDJMDQoNCmIgPC0gMy4xNA0KDQpjIDwtICJIZWxsbyINCg0KZCA8LSBGQUxTRQ0KDQplIDwtIGMoMSwgMiwgMykNCg0KZiA8LSBsaXN0KG5hbWUgPC0gIkFsaWNlIiwgYWdlIDwtIDI1KQ0KDQoNCg0KICoqMS5JZGVudGlmaWthc2kgdGlwZSBkYXRhIHNldGlhcCB2YXJpYWJlbCBkaSBhdGFzLioqDQoNCmEgPC0gNDJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEludGVnZXINCg0KYiA8LSAzLjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRG91YmxlIChOdW1lcmljKQ0KDQpjIDwtICJIZWxsbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGFyYWN0ZXINCg0KZCA8LSBGQUxTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExvZ2ljYWwNCg0KZSA8LSBjKDEsIDIsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAjIFZlY3RvciAoTnVtZXJpYykNCg0KZiA8LSBsaXN0KG5hbWUgPC0gIkFsaWNlIiwgYWdlIDwtIDI1fSAgICAjIExpc3QNCg0KDQoqKjIuIE1lbmNldGFrIFRpcGUgRGF0YSoqDQoNCmBgYHtyICBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KDQojIGIgPSAzLjE0DQpiIDwtIDMuMTQNCnByaW50KGNsYXNzKGIpKSAgIyBPdXRwdXQ6ICJudW1lcmljIg0KDQojIGMgPSAiSGVsbG8iDQpjIDwtICJIZWxsbyINCnByaW50KGNsYXNzKGMpKSAgIyBPdXRwdXQ6ICJjaGFyYWN0ZXIiDQoNCiMgZCA9IEZBTFNFDQpkIDwtIEZBTFNFDQpwcmludChjbGFzcyhkKSkgICMgT3V0cHV0OiAibG9naWNhbCINCg0KIyBlID0gYygxLCAyLCAzKQ0KZSA8LSBjKDEsIDIsIDMpDQpwcmludChjbGFzcyhlKSkgICMgT3V0cHV0OiAibnVtZXJpYyINCg0KIyBmID0gbGlzdChuYW1lID0gIkFsaWNlIiwgYWdlID0gMjUpDQpmIDwtIGxpc3QobmFtZSA9ICJBbGljZSIsIGFnZSA9IDI1KQ0KcHJpbnQoY2xhc3MoZikpICAjIE91dHB1dDogImxpc3QiDQoNCmBgYA0KDQojIyAyLiBWYXJpYWJlbCBkYW4gTWFuaXB1bGFzaSBEYXRhDQoNCnggPC0gMjANCnkgPC0gNQ0KdGV4dDEgPC0gIkRhdGEiDQp0ZXh0MiA8LSAiU2NpZW5jZSINCg0KDQoqKjEuIFBlcmJhcnVpIG5pbGFpIHggZGVuZ2FuIG1lbmFtYmFoa2FuIDEwKioNCg0KDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KIyBNZW1idWF0IHZhcmlhYmVsDQp4IDwtIDIwDQp5IDwtIDUNCnRleHQxIDwtICJEYXRhIg0KdGV4dDIgPC0gIlNjaWVuY2UiDQoNCiMgMS4gUGVyYmFydWkgbmlsYWkgZGVuZ2FuIG1lbmFtYmFoa2FuIDEwDQp4IDwtIHggKyAxMCAgIyBTZWthcmFuZyB4ID0gMzANCnkgPC0geSArIDEwICAjIFNla2FyYW5nIHkgPSAxNQ0KcHJpbnQocGFzdGUoIk5pbGFpIHggc2V0ZWxhaCBkaXRhbWJhaCAxMCBhZGFsYWg6IiwgeCkpDQpwcmludChwYXN0ZSgiTmlsYWkgeSBzZXRlbGFoIGRpdGFtYmFoIDEwIGFkYWxhaDoiLCB5KSkNCg0KYGBgDQoNCiANCioqMi4gR2FidW5na2FuIHRleHQxIGRhbiB0ZXh0MiBrZSBkYWxhbSAiRGF0YSBTY2llbmNlIioqDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KdGV4dF9jb21iaW5lZCA8LSBwYXN0ZSh0ZXh0MSwgdGV4dDIpDQpwcmludCh0ZXh0X2NvbWJpbmVkKSAgIyBPdXRwdXQ6ICJEYXRhIFNjaWVuY2UiDQpgYGANCg0KKiozLiBVYmFoIHRla3MgZ2FidW5nYW4gbWVuamFkaSBodXJ1ZiBiZXNhcioqDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KdGV4dF91cHBlciA8LSB0b3VwcGVyKHRleHRfY29tYmluZWQpDQpwcmludCh0ZXh0X3VwcGVyKSAgIyBPdXRwdXQ6ICJEQVRBIFNDSUVOQ0UiDQpgYGANCg0KIyMgMy4gT3BlcmFzaSBBcml0bWF0aWthDQoNCmEgPC0gMTUNCg0KYiA8LSA0DQoNCioqMS4gSGl0dW5nbGFoIGp1bWxhaCwgc2VsaXNpaCwgcHJvZHVrLCBwZW1iYWdpYW4sIGRhbiBtb2R1bG8gZGFyaSBhIGRhbiBiKioNCg0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIGVjaG89VFJVRX0NCg0KYSA8LSAxNQ0KYiA8LSA0DQoNCiMgSnVtbGFoDQpqdW1sYWggPC0gYSArIGINCnByaW50KHBhc3RlKCJKdW1sYWg6IiwganVtbGFoKSkgDQoNCiMgU2VsaXNpaA0Kc2VsaXNpaCA8LSBhIC0gYg0KcHJpbnQocGFzdGUoIlNlbGlzaWg6Iiwgc2VsaXNpaCkpIA0KDQojIFByb2R1aw0KcHJvZHVrIDwtIGEgKiBiDQpwcmludChwYXN0ZSgiUHJvZHVrOiIsIHByb2R1aykpDQoNCiMgUGVtYmFnaWFuDQpwZW1iYWdpYW4gPC0gYSAvIGINCnByaW50KHBhc3RlKCJQZW1iYWdpYW46IiwgcGVtYmFnaWFuKSkNCg0KIyBNb2R1bG8NCm1vZHVsbyA8LSBhICUlIGINCnByaW50KHBhc3RlKCJNb2R1bG86IiwgbW9kdWxvKSkNCg0KYGBgDQoNCioqMi4gSGl0dW5nbGFoIGEgcGFuZ2thdCBiKioNCg0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIGVjaG89VFJVRX0NCg0KcmVzdWx0IDwtIGEgXiBiDQpwcmludChyZXN1bHQpDQoNCmBgYA0KDQoNCioqMy4gQnVhdCB2YXJpYWJlbCBiYXJ1IGMgPC0gYS9iIGRhbiB1YmFoIG1lbmphZGkgaW50ZWdlcioqDQoNCmBgYHtyIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBlY2hvPVRSVUV9DQojIE1lbWJ1YXQgdmFyaWFiZWwNCmEgPC0gMTUNCmIgPC0gNA0KDQojIDMuIEJ1YXQgdmFyaWFiZWwgYmFydSBjIDwtIGEvYiBkYW4gdWJhaCBtZW5qYWRpIGludGVnZXINCmMgPC0gYSAvIGINCmNhdCgiSGFzaWwgYyA9IGEgLyBiIGFkYWxhaDoiLCBjLCAiXG4iKSAgIyBPdXRwdXQ6IDMuNzUNCg0KIyBVYmFoIG1lbmphZGkgaW50ZWdlcg0KY19pbnRlZ2VyIDwtIGFzLmludGVnZXIoYykNCmNhdCgiSGFzaWwgYyBkYWxhbSBiZW50dWsgaW50ZWdlciBhZGFsYWg6IiwgY19pbnRlZ2VyLCAiXG4iKSAgIyBPdXRwdXQ6IDMNCg0KDQpgYGANCg0KIyMgNC4gT3BlcmFzaSBTdHJpbmcNCg0KKioxLjEuIEVrc3RyYWsgNSBrYXJha3RlciBwZXJ0YW1hIGRhcmkgdGVrcyoqDQoNCmBgYHtyIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBlY2hvPVRSVUV9DQojIE1lbWJ1YXQgdmFyaWFiZWwgdGVrcw0KdGV4dCA8LSAiSGVsbG8sIERhdGEgU2NpZW5jZSEiDQoNCiMgRWtzdHJhayA1IGthcmFrdGVyIHBlcnRhbWENCnRleHRfZmlyc3Q1IDwtIHN1YnN0cih0ZXh0LCBzdGFydCA9IDEsIHN0b3AgPSA1KQ0KY2F0KCI1IGthcmFrdGVyIHBlcnRhbWEgYWRhbGFoOiIsIHRleHRfZmlyc3Q1LCAiXG4iKQ0KDQpgYGANCg0KKioyLkhpdHVuZyBqdW1sYWgga2FyYWt0ZXIgZGFsYW0gdGVrcyoqDQoNCmBgYHtyIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBlY2hvPVRSVUV9DQojIDIuIEhpdHVuZyBqdW1sYWgga2FyYWt0ZXIgZGFsYW0gdGVrcw0KanVtbGFoX2thcmFrdGVyIDwtIG5jaGFyKHRleHQpDQpjYXQoIkp1bWxhaCBrYXJha3RlciBkYWxhbSB0ZWtzIGFkYWxhaDoiLCBqdW1sYWhfa2FyYWt0ZXIsICJcbiIpDQpgYGANCg0KDQoqKjMuIE1lbmd1YmFoIHRla3MgbWVuamFkaSBodXJ1ZiBrZWNpbCoqDQoNCmBgYHtyICBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KIyAzLiBNZW5ndWJhaCB0ZWtzIG1lbmphZGkgaHVydWYga2VjaWwNCnRleHRfbG93ZXIgPC0gdG9sb3dlcih0ZXh0KQ0KY2F0KCJUZWtzIGRhbGFtIGh1cnVmIGtlY2lsIGFkYWxhaDoiLCB0ZXh0X2xvd2VyLCAiXG4iKQ0KYGBgDQoNCiMjIDUuIE9wZXJhdG9yIFBlcmJhbmRpbmdhbiBkYW4gTG9naWthIA0KDQoqKjEuIFBlcmlrc2EgYXBha2FoIHggbGViaWggYmVzYXIgZGFyaSB5KioNCg0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIGVjaG89VFJVRX0NCiMgTWVtYnVhdCB2YXJpYWJlbA0KeCA8LSA3DQp5IDwtIDEwDQoNCiMgMS4gUGVyaWtzYSBhcGFrYWggeCBsZWJpaCBiZXNhciBkYXJpIHkNCmhhc2lsIDwtIHggPiB5DQpjYXQoIkFwYWthaCB4IGxlYmloIGJlc2FyIGRhcmkgeT86IiwgaGFzaWwsICJcbiIpDQoNCmBgYA0KDQoqKjIuIFBlcmlrc2EgYXBha2FoIHgga3VyYW5nIGRhcmkgYXRhdSBzYW1hIGRlbmdhbiB5KioNCg0KYGBge3IgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIGVjaG89VFJVRX0NCiMgTWVtYnVhdCB2YXJpYWJlbA0KeCA8LSA3DQp5IDwtIDEwDQoNCiMgMi4gUGVyaWtzYSBhcGFrYWggeCBrdXJhbmcgZGFyaSBhdGF1IHNhbWEgZGVuZ2FuIHkNCmhhc2lsIDwtIHggPD0geQ0KY2F0KCJBcGFrYWggeCBrdXJhbmcgZGFyaSBhdGF1IHNhbWEgZGVuZ2FuIHk/OiIsIGhhc2lsLCAiXG4iKQ0KDQpgYGANCg0KKiozLiBQZXJpa3NhIGFwYWthaCB4IHRpZGFrIHNhbWEgZGVuZ2FuIHkqKg0KDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KIyBNZW1idWF0IHZhcmlhYmVsDQp4IDwtIDcNCnkgPC0gMTANCg0KIyAzLiBQZXJpa3NhIGFwYWthaCB4IHRpZGFrIHNhbWEgZGVuZ2FuIHkNCmhhc2lsIDwtIHggIT0geQ0KY2F0KCJBcGFrYWggeCB0aWRhayBzYW1hIGRlbmdhbiB5PzoiLCBoYXNpbCwgIlxuIikNCg0KYGBgDQoNCioqNC4gRXZhbHVhc2lsYWggZWtzcHJlc2kgKHggPiA1KSBBTkQgKHkgPCAyMCkqKg0KDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KIyBNZW1idWF0IHZhcmlhYmVsDQp4IDwtIDcNCnkgPC0gMTANCg0KIyA0LiBFdmFsdWFzaSBla3NwcmVzaSAoeCA+IDUpIEFORCAoeSA8IDIwKQ0KaGFzaWwgPC0gKHggPiA1KSAmICh5IDwgMjApDQpjYXQoIkhhc2lsIGV2YWx1YXNpIGVrc3ByZXNpICh4ID4gNSkgQU5EICh5IDwgMjApOiIsIGhhc2lsLCAiXG4iKQ0KDQpgYGANCg0KIyMgNi4gS29udmVyc2kgVGlwZSBEYXRhDQoNCioqMS4gVWJhaCBudW1fc3RyIGtlIGJpbGFuZ2FuIGJ1bGF0IGRhbiB0YW1iYWhrYW4gMTAqKg0KDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KIyBNZW1idWF0IHZhcmlhYmVsDQpudW1fc3RyIDwtICIxMjMiDQpudW1fZmxvYXQgPC0gNDUuNjcNCg0KIyAxLiBVYmFoIG51bV9zdHIga2UgYmlsYW5nYW4gYnVsYXQgZGFuIHRhbWJhaGthbiAxMA0KbnVtX2ludCA8LSBhcy5pbnRlZ2VyKG51bV9zdHIpICAjIE1lbmd1YmFoIHN0cmluZyBtZW5qYWRpIGludGVnZXINCmhhc2lsIDwtIG51bV9pbnQgKyAxMA0KY2F0KCJIYXNpbCBzZXRlbGFoIG1lbmFtYmFoa2FuIDEwOiIsIGhhc2lsLCAiXG4iKQ0KDQpgYGANCg0KDQoqKjIuIFViYWggbnVtX2Zsb2F0IGtlIGJpbGFuZ2FuIGJ1bGF0KioNCg0KDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgZWNobz1UUlVFfQ0KDQojIDIuIFViYWggbnVtX2Zsb2F0IGtlIGJpbGFuZ2FuIGJ1bGF0DQpudW1faW50IDwtIGFzLmludGVnZXIobnVtX2Zsb2F0KSAgIyBNZW5ndWJhaCBmbG9hdCBtZW5qYWRpIGludGVnZXINCmNhdCgibnVtX2Zsb2F0IHNldGVsYWggZGl1YmFoIG1lbmphZGkgYmlsYW5nYW4gYnVsYXQ6IiwgbnVtX2ludCwgIlxuIikNCg0KYGBgDQoNCioqMy4gS29udmVyc2lrYW4gbnVtX2Zsb2F0IGtlbWJhbGkgbWVuamFkaSBzdHJpbmcqKg0KDQpgYGB7ciAgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIGVjaG89VFJVRX0NCiMgMy4gS29udmVyc2lrYW4gbnVtX2Zsb2F0IGtlbWJhbGkgbWVuamFkaSBzdHJpbmcNCm51bV9zdHJfY29udmVydGVkIDwtIGFzLmNoYXJhY3RlcihudW1fZmxvYXQpICAjIE1lbmd1YmFoIGZsb2F0IG1lbmphZGkgc3RyaW5nDQpjYXQoIm51bV9mbG9hdCBzZXRlbGFoIGRpdWJhaCBtZW5qYWRpIHN0cmluZzoiLCBudW1fc3RyX2NvbnZlcnRlZCwgIlxuIikNCg0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQo=