Tugas week 11 ~ Probability Distribution

Practicum ~ Week 11

library(htmltools)
## Warning: package 'htmltools' was built under R version 4.5.2
HTML('
<div class="profile-card">

  <div>
    <img src="Almetcokkk.JPG">
  </div>

  <div class="profile-text">
    <h3>Verónica Maria L F Xavier</h3>

    <div class="profile-description">
      as a Student Data Science in Institut Teknologi Sains Bandung
    </div>

    <div class="profile-info-row">
      <p class="profile-info-item">
        <b>Mentored by:</b> <span class="mentor-name">Mr. Bakti Siregar M.Sc.,CDS</span>
      </p>
    </div>
    </div>
    
    
</div>
')

Verónica Maria L F Xavier

as a Student Data Science in Institut Teknologi Sains Bandung

Mentored by: Mr. Bakti Siregar M.Sc.,CDS

1 PENDAHULUAN

Probability Distributions membahas peran fundamental distribusi probabilitas dalam statistik dan pengambilan keputusan. Konten tersebut menjelaskan bahwa ketika suatu proses menghasilkan berbagai kemungkinan hasil, variabel acak digunakan untuk merepresentasikan hasil-hasil tersebut, sedangkan distribusi probabilitas mendeskripsikan bagaimana probabilitas didistribusikan ke setiap nilai yang mungkin. Memahami bentuk dan sifat suatu distribusi sangat penting karena menentukan perilaku data, perhitungan probabilitas, dan cara membuat prediksi. Distribusi ini menjadi inti dari statistik inferensial.

Materi ini akan membimbing pembaca melalui beberapa konsep kunci berikut:

  1. Variabel Acak Kontinu (Continuous Random Variables): Digunakan untuk variabel kontinu yang menggambarkan kemungkinan (likelihood) nilai-nilai dalam suatu rentang yang berkesinambungan.

  2. Distribusi Sampling (Sampling Distributions): Merepresentasikan distribusi dari statistik sampel, seperti rata-rata sampel (sample mean) atau proporsi sampel (sample proportion). Distribusi ini menjelaskan bagaimana statistik tersebut bervariasi dari satu sampel ke sampel lainnya.

  3. Teorema Limit Pusat (Central Limit Theorem - CLT): Dijelaskan sebagai salah satu hasil terpenting dalam statistik. Teorema ini menyatakan bahwa distribusi dari rata-rata sampel akan cenderung mengikuti distribusi normal, terlepas dari bentuk distribusi populasi asalnya, asalkan ukuran sampel cukup besar.

  4. Distribusi Proporsi Sampel (Sample Proportion Distributions): Merupakan jenis distribusi sampling yang sangat luas penerapannya, terutama dalam analisis survei dan penelitian kuantitatif.

Setiap bagian konsep didukung dengan penjelasan video untuk meningkatkan pemahaman secara konseptual. Dengan menguasai topik-topik ini, pembaca akan lebih siap untuk menganalisis data, membangun model statistik, dan menarik kesimpulan berdasarkan prinsip-prinsip probabilitas yang kuat.


VIDEO 1:Introduction to the Probability of Continuous Variables

2 CONTINUOS RANDOM

Video ini membahas peluang pada variabel kontinu, tetapi sebelum itu dijelaskan kembali apa itu variabel diskrit, agar kita dapat memahami perbedaan kedua konsep.

2.1 Variabel Diskrit (Discrete Variables)

Variabel diskrit adalah variabel yang hanya dapat memiliki jumlah nilai yang dapat dihitung (countable).

Contoh :

  • Jumlah kepala saat melempar koin.

  • Jumlah kelereng biru yang diambil dari sebuah kotak.

  • Nilai ujian seorang siswa.

Semua contoh tersebut hanya bisa memiliki nilai tertentu yang terbatas dan terhitung.

contoh lain:

Saat survei jumlah anak dalam keluarga: tidak mungkin bilang punya “setengah” anak atau “0.73” anak. Maka nilainya hanya bisa 0, 1, 2, 3, 4, dan seterusnya (nilai yang dapat dihitung.)

Variabel diskrit tidak selalu harus bilangan bulat.

Contoh dari video:

Saldo bank bisa saja $420.69

Nilai ujian bisa 5/10

Selama jumlahnya berhingga (finite) dan bisa dihitung, itu tetap disebut variabel diskrit.

2.2 Variabel Kontinu (Continuous Variables)

Berbeda dari variabel diskrit, variabel kontinu adalah variabel yang dapat memiliki nilai apa pun dalam suatu rentang bilangan.

Ciri utama dari video:

Diperoleh dengan mengukur, bukan menghitung.

Nilainya tak terbatas (infinite) dan tidak bisa dihitung satu per satu (uncountable).

Contoh :

  • Berat badan

  • Usia

  • Suhu

  • Jarak

Penjelasan detail dari video:

Misalnya usia seseorang:

Bisa 23 tahun

Tapi sebenarnya bisa 23 tahun 6 bulan

Atau 23 tahun 6 bulan 2 hari 3 detik 8 milidetik 1 nanodetik 32 pikodetik, dan seterusnya.

Video menekankan bahwa semakin detail kita mengukur, semakin panjang angka desimalnya, dan nilainya tidak terbatas—itulah sebabnya variabel ini kontinu.

Contoh lain: Berat badan

Seseorang mungkin 150 pound, tetapi jika diukur lebih presisi, bisa menjadi: 150.305482 dan seterusnya tanpa batas.

2.3 Perbedaan Representasi: Bar Chart vs Histogram

Video menjelaskan bahwa cara menampilkan variabel diskrit dan kontinu berbeda.

  1. Variabel Diskrit (Bar Chart)

Setiap nilai muncul sebagai batang terpisah. Ada celah antara batang untuk menunjukkan bahwa datanya tidak kontinu.

Contohnya: mencatat berapa kali muncul “heads” ketika 4 koin dilempar berulang kali.

library(ggplot2)

# Data diskrit
jumlah_heads <- c(0, 1, 2, 3, 4)
frekuensi <- c(5, 15, 10, 5, 3)

data_diskrit <- data.frame(
  heads = jumlah_heads,
  freq = frekuensi
)

ggplot(data_diskrit, aes(x = factor(heads), y = freq)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  xlab("Jumlah Heads") +
  ylab("Frekuensi") +
  ggtitle("Bar Chart untuk Variabel Diskrit") +
  theme_minimal()

  1. Variabel Kontinu (Histogram)

Tidak ada celah antar batang. Tanpa celah menggambarkan bahwa data bersifat berkelanjutan/ kontinyu. Setiap nilai bisa ditempatkan di posisi mana pun dalam rentang.

Variabel kontinu bisa digambarkan dengan density curve (kurva kerapatan).

library(ggplot2)


# Data
set.seed(42)
data <- data.frame(
  x = rnorm(500, mean = 4, sd = 1.2)
)

# Plot histogram (
ggplot(data, aes(x)) +
  geom_histogram(
    bins = 8,                
    fill = "#3c2a4d",        # ungu gelap
    color = "white",         # outline putih
    linewidth = 1
  ) +
  theme_minimal(base_size = 14) +
  labs(title = "Continuous Random Variables",
       x = "", y = "") +
  
  theme(
    plot.background = element_rect(fill = "#c8add8", color = NA),
    panel.background = element_rect(fill = "#c8add8", color = NA),
    panel.grid = element_blank(),
    
    axis.text = element_text(color = "white", size = 12),
    axis.title = element_text(color = "white"),
    plot.title = element_text(color = "white", size = 18, face = "bold"),

    axis.line = element_line(color = "white", linewidth = 1.1),
    axis.ticks = element_line(color = "white")
  )

library(ggplot2)

set.seed(123)

# Data kontinu untuk density curve (0 sampai 8)
data_kontinu <- data.frame(
  x = rnorm(2000, mean = 4, sd = 1.2)  
)

# Batasi data hanya di antara 0–8 
data_kontinu <- subset(data_kontinu, x >= 0 & x <= 8)

ggplot(data_kontinu, aes(x = x)) +
  geom_area(stat = "density", fill = "#3b4a6b", alpha = 0.8, color = NA) +  # Area
  geom_line(stat = "density", color = "black", linewidth = 1) +  # Garis kurva hitam
  scale_x_continuous(breaks = 0:8, limits = c(0, 8)) +
  scale_y_continuous(breaks = NULL) + 
  
  theme_minimal(base_size = 14) +
  labs(title = "Density Curve",
       x = "", y = "") +
  
   theme(
    panel.background = element_rect(fill = "#c8add8", color = NA),
    plot.background = element_rect(fill = "#c8add8", color = NA),
    panel.grid = element_blank(),
    
    axis.text = element_text(color = "white", size = 12),
    axis.title = element_text(color = "white"),
    plot.title = element_text(color = "white", size = 18, face = "bold"),

    axis.line = element_line(color = "white", linewidth = 1.1),
    axis.ticks = element_line(color = "white")
  )


2.4 Perbedaan Rumus Probabilitas untuk Variabel Diskrit dan Kontinu

  • Untuk variabel diskrit:

Kita dapat menggunakan rumus-rumus peluang yang telah dibahas sebelumnya di video lain.

Contohnya:

  • Rumus probabilitas Distribusi Bimodal

\(P(k)=\frac{n}{k} p^{k}(1-p)^{n-k}\)


  • Penjumlahan peluang

\(P(A \cup B) = P(A) + P(B) - P(A \cap B)\)


  • Perkalian peluang

\(P(A ∩ B) = P(A) × P(B)\)


  • Aturan peluang pada kejadian diskrit

\(P(Aᶜ) = 1 - P(A)\)


  • Untuk variabel kontinu:

Kita menggunakan:

Rumus-rumus pada density curve, karena luas di bawah kurva = probabilitas

\(A= L × W\)


\(A= bh/2\)


\(Z = \frac{x - μ}σ:\)


Termasuk rumus-rumus pada normal distribution, karena normal distribution merupakan bentuk dari density curve itu sendiri.

2.5 KESIMPULAN

Diskrit hitung peluang berdasarkan titik-titik nilai.

Kontinu hitung peluang berdasarkan luas area di bawah kurva.


VIDEO 2 : Sampling Distributions

3 SAMPLING DISTRUBUTION

3.1 Population Distribution (Distribusi Populasi)

Population distribution menggambarkan penyebaran data seluruh anggota populasi.

Karakteristiknya:

Mean = μ

Standar deviasi = σ

Menunjukkan variasi individu, bukan rata-rata.

Notasi:

\(X \sim N(\mu, \sigma)\)

Untuk mengubah nilai X menjadi nilai z, digunakan rumus:

\(z = \frac{X - \mu}{\sigma}\)

3.2 Sample Distribution (Distribusi Sampel)

Distribusi sampel adalah distribusi nilai-nilai individu dalam satu sampel.

  • Tidak mewakili seluruh populasi.

  • Rata-rata sampel (x̄) dapat berbeda dari μ.

  • Setiap sampel berbeda x̄ juga bisa berbeda.

Contoh:

Sampel 1 x̄ = 160

Sampel 2 x̄ = 157

Sampel 3 x̄ = 164

3.3 Sampling Distribution (Distribusi Sampling)

Sampling distribution adalah distribusi ratusan atau ribuan rata-rata sampel (x̄).

Cara terbentuk:

  1. Ambil sampel acak ukuran n

  2. Hitung x̄

  3. Ulangi banyak sekali

  4. Plot seluruh nilai x̄ dalam histogram

library(ggplot2)

set.seed(123)

population <- data.frame(
  x = runif(50000, min = 0, max = 8)
)

n <- 40
k <- 2000

sample_means <- numeric(k)

for (i in 1:k) {
  sampel_i <- sample(population$x, size = n, replace = TRUE)
  sample_means[i] <- mean(sampel_i)
}

data_sampling <- data.frame(mean = sample_means)

ggplot(data_sampling, aes(x = mean)) +
  geom_histogram(
    bins = 15,                    
    color = "white",
    fill = "skyblue",
    alpha = 0.7
  ) +
  labs(
    title = "Sampling Distribution of the Sample Mean (X̄)",
    x = "Nilai X̄ (Sample Mean)",
    y = "Frekuensi"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.background = element_rect(fill = "#001c3d", color = NA),
    panel.background = element_rect(fill = "#001c3d", color = NA),
    panel.grid = element_line(color = "#32527b"),
    text = element_text(color = "white"),
    axis.text = element_text(color = "white")
  )

3.4 Mengapa Sampling Distribution Penting?

Karena menghitung data seluruh populasi sering tidak mungkin,

contohnya: Mengukur tinggi seluruh manusia di dunia (8 miliar orang).

Sampling distribution memungkinkan kita:

  • memperkirakan nilai populasi

  • menghitung probabilitas

  • membuat kesimpulan tanpa mengukur semua orang lebih murah, cepat, efisien

3.5 Ilustrasi Kasus Tinggi Badan Warga Kanada

Diketahui populasi warga Kanada memiliki:

Mean (μ) = 160 cm

Standar deviasi (σ) = 7 cm

Distribusi normal

A. Population Distribution

Dapat digambarkan seperti ini:

μ = 160

μ + 1σ = 167

μ − 1σ = 153

μ + 2σ = 174 dll.

Ini menggambarkan penyebaran seluruh individu.

B. Sampling Distribution untuk Sampel n = 10

Pertanyaan pertama menyebut rata-rata 10 orang, maka yang digunakan adalah sampling distribution.

$_{x̄} = 16$0

\(SE = \frac{7}{\sqrt{10}} = 2.21\)

3.6 Contoh

Contoh 1: Probabilitas rata-rata tinggi 10 orang < 157 cm, Karena menyebut rata-rata sampel, pakai sampling distribution.

Standardisasi

\(z = \frac{157 - 160}{2.21} = -1.36\)

Dari tabel Z:

\(z = –1.36~~ memiliki~~area ~~0.0869.\)

Kesimpulan:

\(P(\bar{X} < 157) = 0.0869 = 8.69\%\)

Artinya, peluang rata-rata tinggi 10 orang Kanada kurang dari 157 cm adalah 8.69%.

Contoh 2: Proporsi semua orang dengan tinggi > 170 cm

Kali ini pertanyaannya jelas: “semua orang” gunakan population distribution, bukan sampling distribution.

Standardisasi

\(z = \frac{170 - 160}{7} = 1.43\)

Dari tabel Z:

Area kiri = 0.9236

Area kanan: 1 - 0.9236 = 0.0764

Kesimpulan:

\(P(X > 170) = 0.0764 = 7.64\%\)

Artinya, sekitar 7.64% penduduk Kanada memiliki tinggi > 170 cm.

3.7 Kesimpulan

Perbedaan utama:

Konsep Isi Dipakai ketika

Population Distribution Distribusi seluruh individu (μ, σ) Pertanyaan soal “semua orang” atau individu Sample Distribution Data satu sampel
Tidak dipakai untuk probabilitas besar Sampling Distribution
Distribusi rata-rata sampel Jika pertanyaan menyebut rata-rata sampel

Hasil Dua Perhitungan

  1. Probabilitas rata-rata 10 orang < 157 cm 8.69%

  2. Proporsi semua orang > 170 cm 7.64%

Prinsip yang harus diingat

Jika yang ditanya rata-rata sampel, gunakan SE = σ / √n.

Jika yang ditanya individu/populasi, gunakan σ biasa.

Sampling distribution selalu lebih sempit daripada population distribution.

Sampling distribution sangat penting untuk inferensi statistik.


VIDEO 3 : The Central Limit Theorem

4 CENTRAL LIMIT THEOREM

4.1 Central Limit Theorem (CLT)

CLT menyatakan bahwa:

Jika ukuran sampel cukup besar (n ≥ 30), maka distribusi rata-rata sampel (X) akan mendekati normal, meskipun populasi awal tidak normal.

  • Rumus :

\(\bar{X} \sim N\left( \mu , \frac{\sigma}{\sqrt{n}} \right)\)

4.2 Syarat CLT

n ≥ 30 CLT berlaku sampling distribution normal

n < 30 CLT tidak berlaku (kecuali populasi awal normal)

  • Rumus :

\(n\ge 30\Rightarrow \bar{X} \approx N\left( \mu, \frac{\sigma}{\sqrt{n}} \right)\)

Jika populasi sudah normal, maka sampling distribution selalu normal, meski n kecil.

\(n\ \text{boleh kecil, tetap}\ \bar{X} \sim \text{Normal}\)

4.3 Hubungan X̄ dan μ

  • Rumus X sama dengan μ :

\(E(\bar{X}) = \mu\)

  • Rumus Variance semakin kecil saat n besar :

\(Var(\bar{X}) = \frac{\sigma^2}{n}\)

X̄ = rata-rata sampel

μ = rata-rata populasi Sebagian besar X̄ berkumpul dekat μ membentuk pola seperti normal.

4.4 Kenapa n kecil tidak cukup?

Karena :

\(SE = \frac{\sigma}{\sqrt{n}}\)

  • Variabilitas tinggi

  • Sampling distribution tidak stabil

  • Tidak bisa pakai pendekatan normal

4.5 KESIMPULAN

  • Sampling distribution menggambarkan distribusi statistik dari banyak sampel.

  • CLT memastikan bahwa rata-rata sampel akan normal jika n besar.

  • Mean sampling distribution = μ.

  • Varians dan SE mengecil saat n meningkat.

  • Populasi normal n kecil tidak apa-apa.

  • Populasi tidak normal harus n ≥ 30.


VIDEO 4 : Sampling Distribution of the Sample Proportion

5 SAMPLE PROPORTION

5.1 Apa Itu Sampling Distribution?

Sampling distribution adalah distribusi dari statistik sampel (misalnya rata-rata X̄) yang diperoleh dari banyak sampel acak. Jika kita mengambil sampel berkali-kali hitung X̄ tiap sampel lalu digambar terbentuklah sampling distribution.

5.2 Apa itu Proporsi?

Proporsi adalah perbandingan antara jumlah kejadian yang dianggap “berhasil” dengan jumlah keseluruhan.

  • Rumus proporsi:

\(p = \frac{\text{jumlah hasil yang diinginkan}}{\text{jumlah total}}\)

Proporsi pada populasi dilambangkan P.

Proporsi pada sampel dilambangkan (p-hat).

Contoh:

Jika dari 10 orang terdapat 2 orang bermata hijau, maka:

\(\hat{p} = \frac{2}{10} = 0.2\)

5.3 Sampling Distribution of the Sample Proportion

Jika kita mengambil banyak sampel dari populasi dan menghitung pada setiap sampel, kita akan mendapatkan banyak nilai . Nilai-nilai ini membentuk distribusi sampling dari proporsi sampel.

Distribusi ini memiliki:

  • Mean (rata-rata): rata-rata semua sama dengan proporsi populasi.

  • Standar deviasi (standard error): \(\sigma_{\hat{p}} = \sqrt{\frac{P(1-P)}{N}}\)

dengan:

= proporsi keberhasilan,

= proporsi tidak berhasil,

= ukuran sampel.

5.4 Syarat Central Limit Theorem (CLT) untuk Proporsi

Syarat yang ini Berbeda dengan sampel mean yang butuh , proporsi memiliki syarat khusus.

CLT berlaku jika:

  1. \(NP ≥ 10\)

  2. \(N(1 - p) ≥ 10\)

Jika kedua syarat ini terpenuhi, maka:

Distribusi mendekati normal.

Rumus Z-score dapat digunakan.

5.5 Rumus Standarisasi (Z-score) untuk Proporsi

Jika distribusi normal, maka Z-score dihitung dengan: \(Z = \frac{\hat{p} - P}{\sqrt{\frac{P(1-P)}{N}}}\)

Z-score ini dapat digunakan untuk:

  • menghitung peluang,

  • mencari area di bawah kurva normal,

  • melakukan uji hipotesis dengan tabel Z.

5.6 Hubungan dengan Distribusi Binomial

Distribusi sampling dari proporsi berhubungan erat dengan Distribusi binomial, dan Aturan peluang (probability rules).

Karena itu, memahami proporsi juga membantu dalam memutuskan kapan menggunakan rumus binomial dan kapan menggunakan Z-score.

5.7 Kesimpulan

  1. Proporsi ( dan ) menggambarkan perbandingan antara hasil yang diinginkan dan total keseluruhan.

  2. Sampling distribution of adalah distribusi dari nilai proporsi sampel yang dihasilkan dari banyak sampel.

  3. Distribusi ini memiliki: Rata-rata dan Standar deviasi .

  4. CLT untuk proporsi berlaku jika dan .

  5. Jika terpenuhi, distribusi mendekati normal dan rumus Z-score dapat digunakan untuk menghitung peluang.


VIDEO 5 : Review: Sampling Distribution of the Sample Proportion, Binomial Distribution, Probability

6 REVIEW SAMPLING DISTRIBUTION

Untuk mengetahui lebih dalam tentang topik tersebut, terutama kita Review materi yang sudah dibahas atau dijelaskan di topik sebelumnya.

6.1 Probability (Probabilitas)

Probabilitas adalah dasar matematika dari data science. Ia mendeskripsikan ketidakpastian suatu peristiwa dan menjadi fondasi untuk:

  • inferensi statistik

  • model probabilistik

  • algoritma machine learning (Naive Bayes, Bayesian models)

  • simulasi data

6.2 Binomial Distribution (Distribusi Binomial)

Distribusi binomial memodelkan jumlah keberhasilan dalam 𝑛 percobaan independen, dengan peluang keberhasilan 𝑝

Cocok untuk:

  • klasifikasi biner

  • model AB testing

  • menghitung error rate classifier

  • probabilitas “kejadian” pada data diskrit

Dalam data science, binomial sering digunakan untuk :

  • memperkirakan proporsi error (misal: misclassification rate)

  • menghitung confidence interval untuk proporsi keberhasilan

  • memodelkan probabilitas click-through rate (CTR)

6.3 Menentukan Peluang Dasar

Kita memiliki 200 kelereng hijau dan 300 kelereng biru (total 500). Jika kita mengambil kelereng 3 kali dengan pengembalian (with replacement), maka setiap pengambilan tetap memiliki peluang yang sama.

Peluang mengambil kelereng hijau

\(P(G) = \frac{200}{500} = 0.4\)

\(P(B) = \frac{300}{500} = 0.6\)

Karena ada pengembalian, setiap percobaan adalah independen.

6.4 Ruang Sampel (Semua Kemungkinan)

Untuk 3 kali pengambilan, setiap percobaan bisa menghasilkan G (green) atau B (blue).

Contoh hasil:

GGB

BGB

BBB

dan seterusnya

Untuk menghitung peluang sebuah urutan tertentu, kita mengalikan peluang setiap langkah, contohnya:

\(P(GGB) = 0.4 \times 0.4 \times 0.6 = 0.096\)

6.5 Peluang “Minimal 2 Hijau”

“At least two green” artinya:

tepat 2 hijau

atau tepat 3 hijau

Tepat 2 hijau

Ada 3 urutan yang menghasilkan dua hijau:

GGB

GBG

BGG

Masing-masing peluangnya = 0.096

Total:

\(3 \times 0.096 = 0.288\)

Tepat 3 hijau

\(P(GGG) = 0.4^3 = 0.064\)

Total minimal 2 hijau

\(P(\text{≥2 hijau}) = 0.288 + 0.064 = 0.352\)

6.6 Jika Percobaan Diperpanjang Menjadi 5 Kali

Jika mengambil 5 kelereng, ruang sampel jadi sangat besar (32 kemungkinan). Supaya lebih efisien, kita gunakan Distribusi Binomial, karena:

Setiap percobaan hanya memiliki 2 hasil (G atau B)

Peluangnya tetap (p = 0.4)

Percobaan independen

Rumus binomial:

\(P(X = k) = \binom{n}{k} p^{k}(1-p)^{n-k}\)

di mana:

= jumlah percobaan

= jumlah sukses yang diinginkan

= peluang sukses

Untuk “minimal 2 hijau”, kita jumlahkan:

\(P(X \ge 2) = P(X=2)+P(X=3)+P(X=4)+P(X=5)\)

6.7 Tujuan

Mencari probabilitas mendekati (approximate probability) untuk kejadian “menarik setidaknya 35 kelereng hijau dari 100 percobaan”, dengan menggunakan:

  • Sampling distribution of the sample proportion (p-hat)

  • Central Limit Theorem (CLT) untuk proporsi

6.8 Syarat CLT untuk Sampling Distribution of p-hat

Agar distribusi sample proportion bisa mendekati normal, harus memenuhi 2 kondisi:

  1. \(n × p ≥ 10\)

  2. \(n × (1 − p) ≥ 10\)

Pada soal:

n = 100

p = 0.4 (peluang kelereng hijau)

Check

\(n·p = 100 × 0.4 = 40 ≥ 10\)

\(n·(1–p) = 100 × 0.6 = 60 ≥ 10\)

6.9 Rumus Standardisasi (Z-Score) untuk Proporsi

Rumus :

\(z = \frac{\hat{p} - p}{\sqrt{\frac{p(1-p)}{n}}} = sample~proportion (target minimal)\)

\(= 35/100 = 0.35\)

\(p = 0.4\)

\(n = 100\)

Hitung standar deviasi:

\(\sigma_{\hat{p}} = \sqrt{\frac{0.4(0.6)}{100}}\)

Masukkan ke rumus menghasilkan: \(z = -1.02\)

6.10 Interpretasi Z-Score

Z = –1.02 area di kiri nilai ini pada kurva normal = 0.1539 (berdasarkan tabel Z)

Artinya:

Probabilitas \(p-hat ≤ 0.35 = 0.1539\)

Yang dicari adalah \(p-hat ≥ 0.35\), jadi area kanan:

\(1 - 0.1539 = 0.8461\)

6.11 Kesimpulan

Distribusi binomial sangat sering digunakan dalam kasus “berhasil/gagal” berulang kali: contoh survei, lempar koin, dan pengambilan objek acak.

Probabilitas mendekati bahwa kita menarik minimal 35 kelereng hijau dari 100 percobaan = 0.8461 atau 84.61%.

Ini pendekatan, bukan probabilitas eksak.

Probabilitas eksak hanya bisa didapat dengan:

  • metode ruang sampel lengkap, atau

  • rumus binomial.

7 REFERENSI

1.“Probability and Statistics” – Morris H. DeGroot & Mark Schervish

2.“Introduction to Probability” – Dimitri P. Bertsekas & John Tsitsiklis

3.“Statistics” – Robert S. Witte & John S. Witte

4.Practical Statistics for Data Scientists - Peter Bruce, Andrew Bruce, Peter Gedeck

5.“Probability and Random Processes” – Geoffrey Grimmett & David Stirzaker

6.Statistical Inference” – Casella & Berger

7.All of Statistics — A Concise Course in Statistical Inference - Larry Wasserman

LS0tDQp0aXRsZTogIlR1Z2FzIHdlZWsgMTEgfiBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb24iICAgICAgICMgTWFpbiB0aXRsZSBvZiB0aGUgZG9jdW1lbnQNCnN1YnRpdGxlOiAiUHJhY3RpY3VtIH4gV2VlayAxMSIgICMgU3VidGl0bGUgb3IgdG9waWMgZm9yIHdlZWsgNA0KYXV0aG9yOiANCi0gIlZlcm9uaWNhIE0gTCBGIFhhdmllciIgICAgICAgIyBSZXBsYWNlIHdpdGggeW91ciBmdWxsIG5hbWUNCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiICMgQXV0byBkaXNwbGF5cyB0aGUgY3VycmVudCBkYXRlDQpvdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICMgT3V0cHV0IHNlY3Rpb24gZGVmaW5lcyB0aGUgZm9ybWF0IGFuZCBsYXlvdXQgDQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlICAgICAgICAjIEVtYmVkcyBhbGwgcmVzb3VyY2VzIChDU1MsIEpTLCBpbWFnZXMpIA0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgICAgICAgICAjIERpc3BsYXlzIGltYWdlIHRodW1ibmFpbHMgaW4gdGhlIGRvYw0KICAgIGxpZ2h0Ym94OiB0cnVlICAgICAgICAgICAgICAjIEVuYWJsZXMgY2xpY2sgdG8gZW5sYXJnZSBpbWFnZXMNCiAgICBnYWxsZXJ5OiB0cnVlICAgICAgICAgICAgICAgIyBHcm91cHMgaW1hZ2VzIGludG8gYW4gaW50ZXJhY3RpdmUgZ2FsbGVyeQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZSAgICAgICAjIEF1dG9tYXRpY2FsbHkgbnVtYmVycyBhbGwgc2VjdGlvbnMNCiAgICBsaWJfZGlyOiBsaWJzICAgICAgICAgICAgICAgIyBEaXJlY3Rvcnkgd2hlcmUgSmF2YVNjcmlwdC9DU1MgbGlicmFyaWVzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCIgICAgICAgICAgICMgRGlzcGxheXMgZGF0YSBmcmFtZXMgYXMgaW50ZXJhY3RpdmUgcGFnZWQgDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyIgICAgICAgICMgQWxsb3dzIGZvbGRpbmcvdW5mb2xkaW5nIFIgY29kZSBibG9ja3MgDQogICAgY29kZV9kb3dubG9hZDogeWVzICAgICAgICAgICMgQWRkcyBhIGJ1dHRvbiB0byBkb3dubG9hZCBhbGwgUiBjb2RlDQogICAgY3NzOjpTdHlsZS5jc3M6DQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KPGJvZHk+DQo8c3R5bGU+DQogICAgYm9keSB7DQogICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgcGFkZGluZzogNDBweDsNCiAgICAgICAgYmFja2dyb3VuZDogI2ZmZDZlODsgDQogICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICB9DQoucHJvZmlsZS1jYXJkIHsNCiAgZGlzcGxheTogZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgZ2FwOiAyNXB4Ow0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAyMHB4Ow0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZlNmVmLCAjZmFkN2U4LCAjZmZlZWY3KTsNCiAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDI1NSwgMTgyLCAxOTMsIDAuMyk7DQogIG1heC13aWR0aDogOTAwcHg7DQogIG1hcmdpbjogMjBweCBhdXRvOw0KfQ0KDQoucHJvZmlsZS1jYXJkIGltZyB7DQogIHdpZHRoOiAxODBweDsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBib3JkZXI6IDRweCBzb2xpZCB3aGl0ZTsNCiAgYm94LXNoYWRvdzogMCAwIDEycHggcmdiYSgwLDAsMCwwLjI1KTsNCn0NCg0KLnByb2ZpbGUtdGV4dCBoMyB7DQogIGZvbnQtc2l6ZTogMzBweDsNCiAgZm9udC13ZWlnaHQ6IDkwMDsNCiAgbWFyZ2luLWJvdHRvbTogNnB4Ow0KICBjb2xvcjogIzhCMUU0MTsNCiAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLnByb2ZpbGUtZGVzY3JpcHRpb24gew0KICBmb250LXNpemU6IDE0cHg7DQogIGZvbnQtd2VpZ2h0OiA3MDA7DQogIGZvbnQtc3R5bGU6IGl0YWxpYzsNCiAgY29sb3I6ICM0YTRhNGE7DQogIG1hcmdpbi1ib3R0b206IDE4cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi5wcm9maWxlLWluZm8tcm93IHsNCiAgZGlzcGxheTogZmxleDsNCiAgDQogIGdhcDogMjVweDsNCiAgZmxleC13cmFwOiB3cmFwOw0KfQ0KDQoucHJvZmlsZS1pbmZvLWl0ZW0gYiB7DQogIGZvbnQtd2VpZ2h0OiA3MDA7DQp9DQoNCi5wcm9maWxlLWluZm8taXRlbSAubWVudG9yLW5hbWUgew0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiA3MDA7DQogIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0gIA0KPC9zdHlsZT4NCg0KYGBge3J9DQpsaWJyYXJ5KGh0bWx0b29scykNCg0KSFRNTCgnDQo8ZGl2IGNsYXNzPSJwcm9maWxlLWNhcmQiPg0KDQogIDxkaXY+DQogICAgPGltZyBzcmM9IkFsbWV0Y29ra2suSlBHIj4NCiAgPC9kaXY+DQoNCiAgPGRpdiBjbGFzcz0icHJvZmlsZS10ZXh0Ij4NCiAgICA8aDM+VmVyw7NuaWNhIE1hcmlhIEwgRiBYYXZpZXI8L2gzPg0KDQogICAgPGRpdiBjbGFzcz0icHJvZmlsZS1kZXNjcmlwdGlvbiI+DQogICAgICBhcyBhIFN0dWRlbnQgRGF0YSBTY2llbmNlIGluIEluc3RpdHV0IFRla25vbG9naSBTYWlucyBCYW5kdW5nDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGNsYXNzPSJwcm9maWxlLWluZm8tcm93Ij4NCiAgICAgIDxwIGNsYXNzPSJwcm9maWxlLWluZm8taXRlbSI+DQogICAgICAgIDxiPk1lbnRvcmVkIGJ5OjwvYj4gPHNwYW4gY2xhc3M9Im1lbnRvci1uYW1lIj5Nci4gQmFrdGkgU2lyZWdhciBNLlNjLixDRFM8L3NwYW4+DQogICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgDQogICAgDQo8L2Rpdj4NCicpDQpgYGANCg0KIyMgUEVOREFIVUxVQU4NClByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnMgbWVtYmFoYXMgcGVyYW4gZnVuZGFtZW50YWwgZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMgZGFsYW0gDQpzdGF0aXN0aWsgZGFuIHBlbmdhbWJpbGFuIGtlcHV0dXNhbi4gS29udGVuIHRlcnNlYnV0IG1lbmplbGFza2FuIGJhaHdhIGtldGlrYSBzdWF0dSANCnByb3NlcyBtZW5naGFzaWxrYW4gYmVyYmFnYWkga2VtdW5na2luYW4gaGFzaWwsIHZhcmlhYmVsIGFjYWsgZGlndW5ha2FuIHVudHVrDQptZXJlcHJlc2VudGFzaWthbiBoYXNpbC1oYXNpbCB0ZXJzZWJ1dCwgc2VkYW5na2FuIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIA0KbWVuZGVza3JpcHNpa2FuIGJhZ2FpbWFuYSBwcm9iYWJpbGl0YXMgZGlkaXN0cmlidXNpa2FuIGtlIHNldGlhcCBuaWxhaSB5YW5nIG11bmdraW4uDQpNZW1haGFtaSBiZW50dWsgZGFuIHNpZmF0IHN1YXR1IGRpc3RyaWJ1c2kgc2FuZ2F0IHBlbnRpbmcga2FyZW5hIG1lbmVudHVrYW4gDQpwZXJpbGFrdSBkYXRhLCBwZXJoaXR1bmdhbiBwcm9iYWJpbGl0YXMsIGRhbiBjYXJhIG1lbWJ1YXQgcHJlZGlrc2kuIERpc3RyaWJ1c2kgaW5pDQptZW5qYWRpIGludGkgZGFyaSBzdGF0aXN0aWsgaW5mZXJlbnNpYWwuDQoNCk1hdGVyaSBpbmkgYWthbiBtZW1iaW1iaW5nIHBlbWJhY2EgbWVsYWx1aSBiZWJlcmFwYSBrb25zZXAga3VuY2kgYmVyaWt1dDoNCg0KMS4gKipWYXJpYWJlbCBBY2FrIEtvbnRpbnUgKENvbnRpbnVvdXMgUmFuZG9tIFZhcmlhYmxlcykqKjogRGlndW5ha2FuIHVudHVrDQp2YXJpYWJlbCBrb250aW51IHlhbmcgbWVuZ2dhbWJhcmthbiBrZW11bmdraW5hbiAobGlrZWxpaG9vZCkgbmlsYWktbmlsYWkgZGFsYW0gc3VhdHUgDQpyZW50YW5nIHlhbmcgYmVya2VzaW5hbWJ1bmdhbi4NCg0KDQoyLiAqKkRpc3RyaWJ1c2kgU2FtcGxpbmcgKFNhbXBsaW5nIERpc3RyaWJ1dGlvbnMpKio6IE1lcmVwcmVzZW50YXNpa2FuIGRpc3RyaWJ1c2kgDQpkYXJpIHN0YXRpc3RpayBzYW1wZWwsIHNlcGVydGkgcmF0YS1yYXRhIHNhbXBlbCAoc2FtcGxlIG1lYW4pIGF0YXUgcHJvcG9yc2kgc2FtcGVsDQooc2FtcGxlIHByb3BvcnRpb24pLiBEaXN0cmlidXNpIGluaSBtZW5qZWxhc2thbiBiYWdhaW1hbmEgc3RhdGlzdGlrIHRlcnNlYnV0IA0KYmVydmFyaWFzaSBkYXJpIHNhdHUgc2FtcGVsIGtlIHNhbXBlbCBsYWlubnlhLg0KDQoNCjMuICoqVGVvcmVtYSBMaW1pdCBQdXNhdCAoQ2VudHJhbCBMaW1pdCBUaGVvcmVtIC0gQ0xUKSoqOiBEaWplbGFza2FuIHNlYmFnYWkgc2FsYWgNCnNhdHUgaGFzaWwgdGVycGVudGluZyBkYWxhbSBzdGF0aXN0aWsuIFRlb3JlbWEgaW5pIG1lbnlhdGFrYW4gYmFod2EgZGlzdHJpYnVzaSANCmRhcmkgcmF0YS1yYXRhIHNhbXBlbCBha2FuIGNlbmRlcnVuZyBtZW5naWt1dGkgZGlzdHJpYnVzaSBub3JtYWwsIHRlcmxlcGFzIGRhcmkNCmJlbnR1ayBkaXN0cmlidXNpIHBvcHVsYXNpIGFzYWxueWEsIGFzYWxrYW4gdWt1cmFuIHNhbXBlbCBjdWt1cCBiZXNhci4NCg0KDQo0LiAqKkRpc3RyaWJ1c2kgUHJvcG9yc2kgU2FtcGVsIChTYW1wbGUgUHJvcG9ydGlvbiBEaXN0cmlidXRpb25zKSoqOiBNZXJ1cGFrYW4gamVuaXMNCmRpc3RyaWJ1c2kgc2FtcGxpbmcgeWFuZyBzYW5nYXQgbHVhcyBwZW5lcmFwYW5ueWEsIHRlcnV0YW1hIGRhbGFtIGFuYWxpc2lzIHN1cnZlaQ0KZGFuIHBlbmVsaXRpYW4ga3VhbnRpdGF0aWYuDQoNCg0KU2V0aWFwIGJhZ2lhbiBrb25zZXAgZGlkdWt1bmcgZGVuZ2FuIHBlbmplbGFzYW4gdmlkZW8gdW50dWsgbWVuaW5na2F0a2FuIHBlbWFoYW1hbiANCnNlY2FyYSBrb25zZXB0dWFsLiBEZW5nYW4gbWVuZ3Vhc2FpIHRvcGlrLXRvcGlrIGluaSwgcGVtYmFjYSBha2FuIGxlYmloIHNpYXAgdW50dWsNCm1lbmdhbmFsaXNpcyBkYXRhLCBtZW1iYW5ndW4gbW9kZWwgc3RhdGlzdGlrLCBkYW4gbWVuYXJpayBrZXNpbXB1bGFuIGJlcmRhc2Fya2FuIA0KcHJpbnNpcC1wcmluc2lwIHByb2JhYmlsaXRhcyB5YW5nIGt1YXQuDQoNCi0tLQ0KDQo8Y2VudGVyPg0KKipWSURFTyAxOkludHJvZHVjdGlvbiB0byB0aGUgUHJvYmFiaWxpdHkgb2YgQ29udGludW91cyBWYXJpYWJsZXMqKiANCg0KPGNlbnRlcj4NCjxpZnJhbWUgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9aeVV6UlZhNmhDTT9zaSIgd2lkdGg9Ijc2OCIgDQpoZWlnaHQ9IjQwMHB4IiBkYXRhLWV4dGVybmFsPSIxIj4gDQo8L2lmcmFtZT4NCjwvY2VudGVyPg0KDQoNCiMjIENPTlRJTlVPUyBSQU5ET00NCg0KVmlkZW8gaW5pIG1lbWJhaGFzIHBlbHVhbmcgcGFkYSB2YXJpYWJlbCBrb250aW51LCB0ZXRhcGkgc2ViZWx1bSBpdHUgZGlqZWxhc2thbg0Ka2VtYmFsaSBhcGEgaXR1IHZhcmlhYmVsIGRpc2tyaXQsIGFnYXIga2l0YSBkYXBhdCBtZW1haGFtaSBwZXJiZWRhYW4ga2VkdWEga29uc2VwLg0KDQoNCiMjIyBWYXJpYWJlbCBEaXNrcml0IChEaXNjcmV0ZSBWYXJpYWJsZXMpDQoNClZhcmlhYmVsIGRpc2tyaXQgYWRhbGFoIHZhcmlhYmVsIHlhbmcgaGFueWEgZGFwYXQgbWVtaWxpa2kganVtbGFoIG5pbGFpIHlhbmcgDQpkYXBhdCBkaWhpdHVuZyAoY291bnRhYmxlKS4NCg0KQ29udG9oIDoNCg0KLSBKdW1sYWgga2VwYWxhIHNhYXQgbWVsZW1wYXIga29pbi4NCg0KLSBKdW1sYWgga2VsZXJlbmcgYmlydSB5YW5nIGRpYW1iaWwgZGFyaSBzZWJ1YWgga290YWsuDQoNCi0gTmlsYWkgdWppYW4gc2VvcmFuZyBzaXN3YS4NCg0KDQpTZW11YSBjb250b2ggdGVyc2VidXQgaGFueWEgYmlzYSBtZW1pbGlraSBuaWxhaSB0ZXJ0ZW50dSB5YW5nIHRlcmJhdGFzIGRhbiB0ZXJoaXR1bmcuDQoNCg0KY29udG9oIGxhaW46DQoNClNhYXQgc3VydmVpIGp1bWxhaCBhbmFrIGRhbGFtIGtlbHVhcmdhOiB0aWRhayBtdW5na2luIGJpbGFuZyBwdW55YSDigJxzZXRlbmdhaOKAnSANCmFuYWsgYXRhdSDigJwwLjcz4oCdIGFuYWsuIE1ha2EgbmlsYWlueWEgaGFueWEgYmlzYSAwLCAxLCAyLCAzLCA0LCBkYW4gDQpzZXRlcnVzbnlhICAobmlsYWkgeWFuZyBkYXBhdCBkaWhpdHVuZy4pDQoNCg0KVmFyaWFiZWwgZGlza3JpdCB0aWRhayBzZWxhbHUgaGFydXMgYmlsYW5nYW4gYnVsYXQuDQoNCkNvbnRvaCBkYXJpIHZpZGVvOg0KDQpTYWxkbyBiYW5rIGJpc2Egc2FqYSAkNDIwLjY5DQoNCk5pbGFpIHVqaWFuIGJpc2EgNS8xMA0KDQoNClNlbGFtYSBqdW1sYWhueWEgYmVyaGluZ2dhIChmaW5pdGUpIGRhbiBiaXNhIGRpaGl0dW5nLCBpdHUgdGV0YXAgZGlzZWJ1dA0KdmFyaWFiZWwgZGlza3JpdC4NCg0KDQojIyMgVmFyaWFiZWwgS29udGludSAoQ29udGludW91cyBWYXJpYWJsZXMpDQoNCkJlcmJlZGEgZGFyaSB2YXJpYWJlbCBkaXNrcml0LCB2YXJpYWJlbCBrb250aW51IGFkYWxhaCB2YXJpYWJlbCB5YW5nIGRhcGF0IG1lbWlsaWtpDQpuaWxhaSBhcGEgcHVuIGRhbGFtIHN1YXR1IHJlbnRhbmcgYmlsYW5nYW4uDQoNCkNpcmkgdXRhbWEgZGFyaSB2aWRlbzoNCg0KRGlwZXJvbGVoIGRlbmdhbiBtZW5ndWt1ciwgYnVrYW4gbWVuZ2hpdHVuZy4NCg0KTmlsYWlueWEgdGFrIHRlcmJhdGFzIChpbmZpbml0ZSkgZGFuIHRpZGFrIGJpc2EgZGloaXR1bmcgc2F0dSBwZXIgc2F0dSAodW5jb3VudGFibGUpLg0KDQoNCkNvbnRvaCA6DQoNCi0gQmVyYXQgYmFkYW4NCg0KLSBVc2lhDQoNCi0gU3VodQ0KDQotIEphcmFrDQoNCg0KUGVuamVsYXNhbiBkZXRhaWwgZGFyaSB2aWRlbzoNCg0KTWlzYWxueWEgdXNpYSBzZXNlb3Jhbmc6DQoNCkJpc2EgMjMgdGFodW4NCg0KVGFwaSBzZWJlbmFybnlhIGJpc2EgMjMgdGFodW4gNiBidWxhbg0KDQpBdGF1IDIzIHRhaHVuIDYgYnVsYW4gMiBoYXJpIDMgZGV0aWsgOCBtaWxpZGV0aWsgMSBuYW5vZGV0aWsgMzIgcGlrb2RldGlrLCANCmRhbiBzZXRlcnVzbnlhLg0KDQoNClZpZGVvIG1lbmVrYW5rYW4gYmFod2Egc2VtYWtpbiBkZXRhaWwga2l0YSBtZW5ndWt1ciwgc2VtYWtpbiBwYW5qYW5nIGFuZ2thDQpkZXNpbWFsbnlhLCBkYW4gbmlsYWlueWEgdGlkYWsgdGVyYmF0YXPigJRpdHVsYWggc2ViYWJueWEgdmFyaWFiZWwgaW5pIGtvbnRpbnUuDQoNCkNvbnRvaCBsYWluOiBCZXJhdCBiYWRhbg0KDQpTZXNlb3JhbmcgbXVuZ2tpbiAxNTAgcG91bmQsIHRldGFwaSBqaWthIGRpdWt1ciBsZWJpaCBwcmVzaXNpLCBiaXNhIG1lbmphZGk6DQoxNTAuMzA1NDgyICBkYW4gc2V0ZXJ1c255YSB0YW5wYSBiYXRhcy4NCg0KDQojIyMgUGVyYmVkYWFuIFJlcHJlc2VudGFzaTogQmFyIENoYXJ0IHZzIEhpc3RvZ3JhbQ0KDQpWaWRlbyBtZW5qZWxhc2thbiBiYWh3YSBjYXJhIG1lbmFtcGlsa2FuIHZhcmlhYmVsIGRpc2tyaXQgZGFuIGtvbnRpbnUgYmVyYmVkYS4NCg0KYS4gVmFyaWFiZWwgRGlza3JpdCAoQmFyIENoYXJ0KQ0KDQpTZXRpYXAgbmlsYWkgbXVuY3VsIHNlYmFnYWkgYmF0YW5nIHRlcnBpc2FoLiBBZGEgY2VsYWggYW50YXJhIGJhdGFuZyB1bnR1aw0KbWVudW5qdWtrYW4gYmFod2EgZGF0YW55YSB0aWRhayBrb250aW51Lg0KDQpDb250b2hueWE6IG1lbmNhdGF0IGJlcmFwYSBrYWxpIG11bmN1bCDigJxoZWFkc+KAnSBrZXRpa2EgNCBrb2luIGRpbGVtcGFyIGJlcnVsYW5nIGthbGkuDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQojIERhdGEgZGlza3JpdA0KanVtbGFoX2hlYWRzIDwtIGMoMCwgMSwgMiwgMywgNCkNCmZyZWt1ZW5zaSA8LSBjKDUsIDE1LCAxMCwgNSwgMykNCg0KZGF0YV9kaXNrcml0IDwtIGRhdGEuZnJhbWUoDQogIGhlYWRzID0ganVtbGFoX2hlYWRzLA0KICBmcmVxID0gZnJla3VlbnNpDQopDQoNCmdncGxvdChkYXRhX2Rpc2tyaXQsIGFlcyh4ID0gZmFjdG9yKGhlYWRzKSwgeSA9IGZyZXEpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gInNreWJsdWUiKSArDQogIHhsYWIoIkp1bWxhaCBIZWFkcyIpICsNCiAgeWxhYigiRnJla3VlbnNpIikgKw0KICBnZ3RpdGxlKCJCYXIgQ2hhcnQgdW50dWsgVmFyaWFiZWwgRGlza3JpdCIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KDQoNCmIuIFZhcmlhYmVsIEtvbnRpbnUgIChIaXN0b2dyYW0pDQoNClRpZGFrIGFkYSBjZWxhaCBhbnRhciBiYXRhbmcuIFRhbnBhIGNlbGFoIG1lbmdnYW1iYXJrYW4gYmFod2EgZGF0YSBiZXJzaWZhdCANCmJlcmtlbGFuanV0YW4vIGtvbnRpbnl1LiBTZXRpYXAgbmlsYWkgYmlzYSBkaXRlbXBhdGthbiBkaSBwb3Npc2kgbWFuYSBwdW4gZGFsYW0gcmVudGFuZy4NCg0KVmFyaWFiZWwga29udGludSBiaXNhIGRpZ2FtYmFya2FuIGRlbmdhbiBkZW5zaXR5IGN1cnZlIChrdXJ2YSBrZXJhcGF0YW4pLg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KDQojIERhdGENCnNldC5zZWVkKDQyKQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICB4ID0gcm5vcm0oNTAwLCBtZWFuID0gNCwgc2QgPSAxLjIpDQopDQoNCiMgUGxvdCBoaXN0b2dyYW0gKA0KZ2dwbG90KGRhdGEsIGFlcyh4KSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgNCiAgICBiaW5zID0gOCwgICAgICAgICAgICAgICAgDQogICAgZmlsbCA9ICIjM2MyYTRkIiwgICAgICAgICMgdW5ndSBnZWxhcA0KICAgIGNvbG9yID0gIndoaXRlIiwgICAgICAgICAjIG91dGxpbmUgcHV0aWgNCiAgICBsaW5ld2lkdGggPSAxDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIGxhYnModGl0bGUgPSAiQ29udGludW91cyBSYW5kb20gVmFyaWFibGVzIiwNCiAgICAgICB4ID0gIiIsIHkgPSAiIikgKw0KICANCiAgdGhlbWUoDQogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI2M4YWRkOCIsIGNvbG9yID0gTkEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjYzhhZGQ4IiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICANCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMTIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAid2hpdGUiKSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIndoaXRlIiwgc2l6ZSA9IDE4LCBmYWNlID0gImJvbGQiKSwNCg0KICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ3aGl0ZSIsIGxpbmV3aWR0aCA9IDEuMSksDQogICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ3aGl0ZSIpDQogICkNCg0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCnNldC5zZWVkKDEyMykNCg0KIyBEYXRhIGtvbnRpbnUgdW50dWsgZGVuc2l0eSBjdXJ2ZSAoMCBzYW1wYWkgOCkNCmRhdGFfa29udGludSA8LSBkYXRhLmZyYW1lKA0KICB4ID0gcm5vcm0oMjAwMCwgbWVhbiA9IDQsIHNkID0gMS4yKSAgDQopDQoNCiMgQmF0YXNpIGRhdGEgaGFueWEgZGkgYW50YXJhIDDigJM4IA0KZGF0YV9rb250aW51IDwtIHN1YnNldChkYXRhX2tvbnRpbnUsIHggPj0gMCAmIHggPD0gOCkNCg0KZ2dwbG90KGRhdGFfa29udGludSwgYWVzKHggPSB4KSkgKw0KICBnZW9tX2FyZWEoc3RhdCA9ICJkZW5zaXR5IiwgZmlsbCA9ICIjM2I0YTZiIiwgYWxwaGEgPSAwLjgsIGNvbG9yID0gTkEpICsgICMgQXJlYQ0KICBnZW9tX2xpbmUoc3RhdCA9ICJkZW5zaXR5IiwgY29sb3IgPSAiYmxhY2siLCBsaW5ld2lkdGggPSAxKSArICAjIEdhcmlzIGt1cnZhIGhpdGFtDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAwOjgsIGxpbWl0cyA9IGMoMCwgOCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IE5VTEwpICsgDQogIA0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIGxhYnModGl0bGUgPSAiRGVuc2l0eSBDdXJ2ZSIsDQogICAgICAgeCA9ICIiLCB5ID0gIiIpICsNCiAgDQogICB0aGVtZSgNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI2M4YWRkOCIsIGNvbG9yID0gTkEpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNjOGFkZDgiLCBjb2xvciA9IE5BKSwNCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgIA0KICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAxMiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJ3aGl0ZSIpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMTgsIGZhY2UgPSAiYm9sZCIpLA0KDQogICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG9yID0gIndoaXRlIiwgbGluZXdpZHRoID0gMS4xKSwNCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKGNvbG9yID0gIndoaXRlIikNCiAgKQ0KDQpgYGANCg0KLS0tDQoNCg0KIyMjIFBlcmJlZGFhbiBSdW11cyBQcm9iYWJpbGl0YXMgdW50dWsgVmFyaWFiZWwgRGlza3JpdCBkYW4gS29udGludQ0KDQotICpVbnR1ayB2YXJpYWJlbCBkaXNrcml0OioNCg0KS2l0YSBkYXBhdCBtZW5nZ3VuYWthbiBydW11cy1ydW11cyBwZWx1YW5nIHlhbmcgdGVsYWggZGliYWhhcyBzZWJlbHVtbnlhIGRpIHZpZGVvIGxhaW4uDQoNCkNvbnRvaG55YToNCg0KLSBSdW11cyBwcm9iYWJpbGl0YXMgRGlzdHJpYnVzaSBCaW1vZGFsDQoNCiRQKGspPVxmcmFje259e2t9IHBee2t9KDEtcClee24ta30kDQoNCi0tLQ0KDQoNCi0gUGVuanVtbGFoYW4gcGVsdWFuZw0KDQokUChBIFxjdXAgQikgPSBQKEEpICsgUChCKSAtIFAoQSBcY2FwIEIpJA0KDQotLS0NCg0KLSBQZXJrYWxpYW4gcGVsdWFuZw0KDQokUChBIOKIqSBCKSA9IFAoQSkgw5cgUChCKSQNCiAgICAgICANCi0tLSAgICAgICANCiAgICAgICANCg0KLSBBdHVyYW4gcGVsdWFuZyBwYWRhIGtlamFkaWFuIGRpc2tyaXQNCg0KJFAoQeG2nCkgPSAxIC0gUChBKSQNCg0KLS0tDQoNCi0gKlVudHVrIHZhcmlhYmVsIGtvbnRpbnU6Kg0KDQpLaXRhIG1lbmdndW5ha2FuOg0KDQpSdW11cy1ydW11cyBwYWRhIGRlbnNpdHkgY3VydmUsIGthcmVuYSBsdWFzIGRpIGJhd2FoIGt1cnZhID0gcHJvYmFiaWxpdGFzDQoNCiRBPSBMIMOXIFckDQoNCi0tLQ0KDQokQT0gYmgvMiQNCg0KLS0tDQoNCiRaID0gXGZyYWN7eCAtIM68fc+DOiQNCg0KLS0tDQoNClRlcm1hc3VrIHJ1bXVzLXJ1bXVzIHBhZGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiwga2FyZW5hIG5vcm1hbCBkaXN0cmlidXRpb24gDQptZXJ1cGFrYW4gYmVudHVrIGRhcmkgZGVuc2l0eSBjdXJ2ZSBpdHUgc2VuZGlyaS4NCg0KDQojIyMgS0VTSU1QVUxBTg0KDQoqKkRpc2tyaXQqKiBoaXR1bmcgcGVsdWFuZyBiZXJkYXNhcmthbiB0aXRpay10aXRpayBuaWxhaS4NCg0KKipLb250aW51KiogIGhpdHVuZyBwZWx1YW5nIGJlcmRhc2Fya2FuIGx1YXMgYXJlYSBkaSBiYXdhaCBrdXJ2YS4NCg0KLS0tDQoNCjxjZW50ZXI+DQoqKlZJREVPIDIgOiBTYW1wbGluZyBEaXN0cmlidXRpb25zKiogDQoNCjxjZW50ZXI+DQo8aWZyYW1lIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvN1M3ajc1ZDNHTTQ/c2kiIHdpZHRoPSI3NjgiIA0KaGVpZ2h0PSI0MDBweCIgZGF0YS1leHRlcm5hbD0iMSI+IA0KPC9pZnJhbWU+DQo8L2NlbnRlcj4NCg0KIyMgU0FNUExJTkcgRElTVFJVQlVUSU9ODQoNCiMjIyBQb3B1bGF0aW9uIERpc3RyaWJ1dGlvbiAoRGlzdHJpYnVzaSBQb3B1bGFzaSkNClBvcHVsYXRpb24gZGlzdHJpYnV0aW9uIG1lbmdnYW1iYXJrYW4gcGVueWViYXJhbiBkYXRhIHNlbHVydWggYW5nZ290YSBwb3B1bGFzaS4NCg0KS2FyYWt0ZXJpc3Rpa255YToNCg0KTWVhbiA9IM68DQoNClN0YW5kYXIgZGV2aWFzaSA9IM+DDQoNCk1lbnVuanVra2FuIHZhcmlhc2kgaW5kaXZpZHUsIGJ1a2FuIHJhdGEtcmF0YS4NCg0KTm90YXNpOg0KDQokWCBcc2ltIE4oXG11LCBcc2lnbWEpJA0KDQpVbnR1ayBtZW5ndWJhaCBuaWxhaSBYIG1lbmphZGkgbmlsYWkgeiwgZGlndW5ha2FuIHJ1bXVzOg0KDQokeiA9IFxmcmFje1ggLSBcbXV9e1xzaWdtYX0kDQoNCg0KIyMjIFNhbXBsZSBEaXN0cmlidXRpb24gKERpc3RyaWJ1c2kgU2FtcGVsKQ0KRGlzdHJpYnVzaSBzYW1wZWwgYWRhbGFoIGRpc3RyaWJ1c2kgbmlsYWktbmlsYWkgaW5kaXZpZHUgZGFsYW0gc2F0dSBzYW1wZWwuDQoNCi0gVGlkYWsgbWV3YWtpbGkgc2VsdXJ1aCBwb3B1bGFzaS4NCg0KLSBSYXRhLXJhdGEgc2FtcGVsICh4zIQpIGRhcGF0IGJlcmJlZGEgZGFyaSDOvC4NCg0KLSBTZXRpYXAgc2FtcGVsIGJlcmJlZGEgeMyEIGp1Z2EgYmlzYSBiZXJiZWRhLg0KDQoNCkNvbnRvaDoNCg0KU2FtcGVsIDEgeMyEID0gMTYwDQoNClNhbXBlbCAyIHjMhCA9IDE1Nw0KDQpTYW1wZWwgMyB4zIQgPSAxNjQNCg0KDQojIyMgU2FtcGxpbmcgRGlzdHJpYnV0aW9uIChEaXN0cmlidXNpIFNhbXBsaW5nKQ0KDQpTYW1wbGluZyBkaXN0cmlidXRpb24gYWRhbGFoIGRpc3RyaWJ1c2kgcmF0dXNhbiBhdGF1IHJpYnVhbiByYXRhLXJhdGEgc2FtcGVsICh4zIQpLg0KDQpDYXJhIHRlcmJlbnR1azoNCg0KMS4gQW1iaWwgc2FtcGVsIGFjYWsgdWt1cmFuIG4NCg0KDQoyLiBIaXR1bmcgeMyEDQoNCg0KMy4gVWxhbmdpIGJhbnlhayBzZWthbGkNCg0KDQo0LiBQbG90IHNlbHVydWggbmlsYWkgeMyEIGRhbGFtIGhpc3RvZ3JhbQ0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0Kc2V0LnNlZWQoMTIzKQ0KDQpwb3B1bGF0aW9uIDwtIGRhdGEuZnJhbWUoDQogIHggPSBydW5pZig1MDAwMCwgbWluID0gMCwgbWF4ID0gOCkNCikNCg0KbiA8LSA0MA0KayA8LSAyMDAwDQoNCnNhbXBsZV9tZWFucyA8LSBudW1lcmljKGspDQoNCmZvciAoaSBpbiAxOmspIHsNCiAgc2FtcGVsX2kgPC0gc2FtcGxlKHBvcHVsYXRpb24keCwgc2l6ZSA9IG4sIHJlcGxhY2UgPSBUUlVFKQ0KICBzYW1wbGVfbWVhbnNbaV0gPC0gbWVhbihzYW1wZWxfaSkNCn0NCg0KZGF0YV9zYW1wbGluZyA8LSBkYXRhLmZyYW1lKG1lYW4gPSBzYW1wbGVfbWVhbnMpDQoNCmdncGxvdChkYXRhX3NhbXBsaW5nLCBhZXMoeCA9IG1lYW4pKSArDQogIGdlb21faGlzdG9ncmFtKA0KICAgIGJpbnMgPSAxNSwgICAgICAgICAgICAgICAgICAgIA0KICAgIGNvbG9yID0gIndoaXRlIiwNCiAgICBmaWxsID0gInNreWJsdWUiLA0KICAgIGFscGhhID0gMC43DQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlNhbXBsaW5nIERpc3RyaWJ1dGlvbiBvZiB0aGUgU2FtcGxlIE1lYW4gKFjMhCkiLA0KICAgIHggPSAiTmlsYWkgWMyEIChTYW1wbGUgTWVhbikiLA0KICAgIHkgPSAiRnJla3VlbnNpIg0KICApICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkgKw0KICB0aGVtZSgNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjMDAxYzNkIiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMwMDFjM2QiLCBjb2xvciA9IE5BKSwNCiAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiMzMjUyN2IiKSwNCiAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIndoaXRlIiksDQogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIndoaXRlIikNCiAgKQ0KDQpgYGANCg0KIyMjIE1lbmdhcGEgU2FtcGxpbmcgRGlzdHJpYnV0aW9uIFBlbnRpbmc/DQpLYXJlbmEgbWVuZ2hpdHVuZyBkYXRhIHNlbHVydWggcG9wdWxhc2kgc2VyaW5nIHRpZGFrIG11bmdraW4sIA0KDQpjb250b2hueWE6DQpNZW5ndWt1ciB0aW5nZ2kgc2VsdXJ1aCBtYW51c2lhIGRpIGR1bmlhICg4IG1pbGlhciBvcmFuZykuDQoNClNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBtZW11bmdraW5rYW4ga2l0YToNCg0KLSBtZW1wZXJraXJha2FuIG5pbGFpIHBvcHVsYXNpDQoNCi0gbWVuZ2hpdHVuZyBwcm9iYWJpbGl0YXMNCg0KLSBtZW1idWF0IGtlc2ltcHVsYW4gdGFucGEgbWVuZ3VrdXIgc2VtdWEgb3JhbmcgbGViaWggbXVyYWgsIGNlcGF0LCBlZmlzaWVuDQoNCg0KIyMjIElsdXN0cmFzaSBLYXN1cyBUaW5nZ2kgQmFkYW4gV2FyZ2EgS2FuYWRhDQoNCkRpa2V0YWh1aSBwb3B1bGFzaSB3YXJnYSBLYW5hZGEgbWVtaWxpa2k6DQoNCk1lYW4gKM68KSA9IDE2MCBjbQ0KDQpTdGFuZGFyIGRldmlhc2kgKM+DKSA9IDcgY20NCg0KRGlzdHJpYnVzaSBub3JtYWwNCg0KDQpBLiBQb3B1bGF0aW9uIERpc3RyaWJ1dGlvbg0KDQpEYXBhdCBkaWdhbWJhcmthbiBzZXBlcnRpIGluaToNCg0KzrwgPSAxNjANCg0KzrwgKyAxz4MgPSAxNjcNCg0Kzrwg4oiSIDHPgyA9IDE1Mw0KDQrOvCArIDLPgyA9IDE3NA0KZGxsLg0KDQpJbmkgbWVuZ2dhbWJhcmthbiBwZW55ZWJhcmFuIHNlbHVydWggaW5kaXZpZHUuDQoNCg0KQi4gU2FtcGxpbmcgRGlzdHJpYnV0aW9uIHVudHVrIFNhbXBlbCBuID0gMTANCg0KUGVydGFueWFhbiBwZXJ0YW1hIG1lbnllYnV0IHJhdGEtcmF0YSAxMCBvcmFuZywgbWFrYSB5YW5nIGRpZ3VuYWthbiBhZGFsYWgNCnNhbXBsaW5nIGRpc3RyaWJ1dGlvbi4NCg0KDQokXG11X3t4zIR9ID0gMTYkMA0KDQokU0UgPSBcZnJhY3s3fXtcc3FydHsxMH19ID0gMi4yMSQNCg0KDQojIyMgQ29udG9oIA0KDQoqKkNvbnRvaCAxKio6IFByb2JhYmlsaXRhcyByYXRhLXJhdGEgdGluZ2dpIDEwIG9yYW5nIDwgMTU3IGNtLCBLYXJlbmEgbWVueWVidXQgDQpyYXRhLXJhdGEgc2FtcGVsLCBwYWthaSBzYW1wbGluZyBkaXN0cmlidXRpb24uDQoNClN0YW5kYXJkaXNhc2kNCg0KJHogPSBcZnJhY3sxNTcgLSAxNjB9ezIuMjF9ID0gLTEuMzYkDQoNCkRhcmkgdGFiZWwgWjoNCg0KJHogPSDigJMxLjM2fn4gbWVtaWxpa2l+fmFyZWEgfn4wLjA4NjkuJA0KDQpLZXNpbXB1bGFuOg0KDQokUChcYmFye1h9IDwgMTU3KSA9IDAuMDg2OSA9IDguNjlcJSQNCg0KQXJ0aW55YSwgcGVsdWFuZyByYXRhLXJhdGEgdGluZ2dpIDEwIG9yYW5nIEthbmFkYSBrdXJhbmcgZGFyaSAxNTcgY20gYWRhbGFoIDguNjklLg0KDQoNCioqQ29udG9oIDI6IFByb3BvcnNpIHNlbXVhIG9yYW5nIGRlbmdhbiB0aW5nZ2kgPiAxNzAgY20qKg0KDQpLYWxpIGluaSBwZXJ0YW55YWFubnlhIGplbGFzOiAic2VtdWEgb3JhbmciDQpndW5ha2FuIHBvcHVsYXRpb24gZGlzdHJpYnV0aW9uLCBidWthbiBzYW1wbGluZyBkaXN0cmlidXRpb24uDQoNClN0YW5kYXJkaXNhc2kNCg0KJHogPSBcZnJhY3sxNzAgLSAxNjB9ezd9ID0gMS40MyQNCg0KRGFyaSB0YWJlbCBaOg0KDQpBcmVhIGtpcmkgPSAwLjkyMzYNCg0KQXJlYSBrYW5hbjogMSAtIDAuOTIzNiA9IDAuMDc2NA0KDQpLZXNpbXB1bGFuOg0KDQokUChYID4gMTcwKSA9IDAuMDc2NCA9IDcuNjRcJSQNCg0KQXJ0aW55YSwgc2VraXRhciA3LjY0JSBwZW5kdWR1ayBLYW5hZGEgbWVtaWxpa2kgdGluZ2dpID4gMTcwIGNtLg0KDQoNCiMjIyBLZXNpbXB1bGFuDQoNClBlcmJlZGFhbiB1dGFtYToNCg0KS29uc2VwCUlzaQlEaXBha2FpIGtldGlrYQ0KDQpQb3B1bGF0aW9uIERpc3RyaWJ1dGlvbglEaXN0cmlidXNpIHNlbHVydWggaW5kaXZpZHUgKM68LCDPgykJUGVydGFueWFhbiBzb2FsIA0K4oCcc2VtdWEgb3JhbmfigJ0gYXRhdSBpbmRpdmlkdSBTYW1wbGUgRGlzdHJpYnV0aW9uCURhdGEgc2F0dSBzYW1wZWwJDQpUaWRhayBkaXBha2FpIHVudHVrIHByb2JhYmlsaXRhcyBiZXNhciBTYW1wbGluZyBEaXN0cmlidXRpb24JDQpEaXN0cmlidXNpIHJhdGEtcmF0YSBzYW1wZWwJSmlrYSBwZXJ0YW55YWFuIG1lbnllYnV0IHJhdGEtcmF0YSBzYW1wZWwNCg0KSGFzaWwgRHVhIFBlcmhpdHVuZ2FuDQoNCjEuIFByb2JhYmlsaXRhcyByYXRhLXJhdGEgMTAgb3JhbmcgPCAxNTcgY20NCjguNjklDQoNCjIuIFByb3BvcnNpIHNlbXVhIG9yYW5nID4gMTcwIGNtDQo3LjY0JQ0KDQpQcmluc2lwIHlhbmcgaGFydXMgZGlpbmdhdA0KDQpKaWthIHlhbmcgZGl0YW55YSByYXRhLXJhdGEgc2FtcGVsLCBndW5ha2FuIFNFID0gz4MgLyDiiJpuLg0KDQpKaWthIHlhbmcgZGl0YW55YSBpbmRpdmlkdS9wb3B1bGFzaSwgZ3VuYWthbiDPgyBiaWFzYS4NCg0KU2FtcGxpbmcgZGlzdHJpYnV0aW9uIHNlbGFsdSBsZWJpaCBzZW1waXQgZGFyaXBhZGEgcG9wdWxhdGlvbiBkaXN0cmlidXRpb24uDQoNClNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBzYW5nYXQgcGVudGluZyB1bnR1ayBpbmZlcmVuc2kgc3RhdGlzdGlrLg0KDQotLS0NCg0KDQo8Y2VudGVyPg0KKipWSURFTyAzIDogVGhlIENlbnRyYWwgTGltaXQgVGhlb3JlbSoqIA0KDQo8Y2VudGVyPg0KPGlmcmFtZSBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2l2ZDh3RUhuTUNnP3NpIiB3aWR0aD0iNzY4IiANCmhlaWdodD0iNDAwcHgiIGRhdGEtZXh0ZXJuYWw9IjEiPiANCjwvaWZyYW1lPg0KPC9jZW50ZXI+DQoNCiMjIENFTlRSQUwgTElNSVQgVEhFT1JFTQ0KDQojIyMgQ2VudHJhbCBMaW1pdCBUaGVvcmVtIChDTFQpDQoNCkNMVCBtZW55YXRha2FuIGJhaHdhOg0KDQpKaWthIHVrdXJhbiBzYW1wZWwgY3VrdXAgYmVzYXIgKG4g4omlIDMwKSwgbWFrYSBkaXN0cmlidXNpIHJhdGEtcmF0YSBzYW1wZWwgKFgpDQpha2FuIG1lbmRla2F0aSBub3JtYWwsIG1lc2tpcHVuIHBvcHVsYXNpIGF3YWwgdGlkYWsgbm9ybWFsLg0KDQoNCi0gUnVtdXMgOg0KDQokXGJhcntYfSBcc2ltIE5cbGVmdCggXG11ICwgXGZyYWN7XHNpZ21hfXtcc3FydHtufX0gXHJpZ2h0KSQNCg0KDQojIyMgU3lhcmF0IENMVA0KDQpuIOKJpSAzMCBDTFQgYmVybGFrdSBzYW1wbGluZyBkaXN0cmlidXRpb24gbm9ybWFsDQoNCm4gPCAzMCBDTFQgdGlkYWsgYmVybGFrdSAoa2VjdWFsaSBwb3B1bGFzaSBhd2FsIG5vcm1hbCkNCg0KDQotIFJ1bXVzIDoNCg0KJG5cZ2UgMzBcUmlnaHRhcnJvdyBcYmFye1h9IFxhcHByb3ggTlxsZWZ0KCBcbXUsIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxyaWdodCkkDQoNCg0KSmlrYSBwb3B1bGFzaSBzdWRhaCBub3JtYWwsIG1ha2Egc2FtcGxpbmcgZGlzdHJpYnV0aW9uIHNlbGFsdSBub3JtYWwsIG1lc2tpIG4ga2VjaWwuDQoNCg0KJG5cIFx0ZXh0e2JvbGVoIGtlY2lsLCB0ZXRhcH1cIFxiYXJ7WH0gXHNpbSBcdGV4dHtOb3JtYWx9JA0KDQoNCiMjIyBIdWJ1bmdhbiBYzIQgZGFuIM68DQoNCg0KLSBSdW11cyBYIHNhbWEgZGVuZ2FuIM68IDoNCg0KJEUoXGJhcntYfSkgPSBcbXUkDQoNCg0KLSBSdW11cyBWYXJpYW5jZSBzZW1ha2luIGtlY2lsIHNhYXQgbiBiZXNhciA6DQoNCg0KJFZhcihcYmFye1h9KSA9IFxmcmFje1xzaWdtYV4yfXtufSQNCg0KDQpYzIQgPSByYXRhLXJhdGEgc2FtcGVsDQoNCs68ID0gcmF0YS1yYXRhIHBvcHVsYXNpDQpTZWJhZ2lhbiBiZXNhciBYzIQgYmVya3VtcHVsIGRla2F0IM68ICBtZW1iZW50dWsgcG9sYSBzZXBlcnRpIG5vcm1hbC4NCg0KDQojIyMgS2VuYXBhIG4ga2VjaWwgdGlkYWsgY3VrdXA/DQoNCkthcmVuYSA6DQoNCiRTRSA9IFxmcmFje1xzaWdtYX17XHNxcnR7bn19JA0KDQotIFZhcmlhYmlsaXRhcyB0aW5nZ2kNCg0KLSBTYW1wbGluZyBkaXN0cmlidXRpb24gdGlkYWsgc3RhYmlsDQoNCi0gVGlkYWsgYmlzYSBwYWthaSBwZW5kZWthdGFuIG5vcm1hbA0KDQoNCiMjIyBLRVNJTVBVTEFODQoNCi0gU2FtcGxpbmcgZGlzdHJpYnV0aW9uIG1lbmdnYW1iYXJrYW4gZGlzdHJpYnVzaSBzdGF0aXN0aWsgZGFyaSBiYW55YWsgc2FtcGVsLg0KDQotIENMVCBtZW1hc3Rpa2FuIGJhaHdhIHJhdGEtcmF0YSBzYW1wZWwgYWthbiBub3JtYWwgamlrYSBuIGJlc2FyLg0KDQotIE1lYW4gc2FtcGxpbmcgZGlzdHJpYnV0aW9uID0gzrwuDQoNCi0gVmFyaWFucyBkYW4gU0UgbWVuZ2VjaWwgc2FhdCBuIG1lbmluZ2thdC4NCg0KLSBQb3B1bGFzaSBub3JtYWwgbiBrZWNpbCB0aWRhayBhcGEtYXBhLg0KDQotIFBvcHVsYXNpIHRpZGFrIG5vcm1hbCBoYXJ1cyBuIOKJpSAzMC4NCg0KLS0tDQoNCjxjZW50ZXI+DQoqKlZJREVPIDQgOiBTYW1wbGluZyBEaXN0cmlidXRpb24gb2YgdGhlIFNhbXBsZSBQcm9wb3J0aW9uKiogDQoNCjxjZW50ZXI+DQo8aWZyYW1lIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvcTJlNG1LMEZUYnc/c2kiIHdpZHRoPSI3NjgiIA0KaGVpZ2h0PSI0MDBweCIgZGF0YS1leHRlcm5hbD0iMSI+IA0KPC9pZnJhbWU+DQo8L2NlbnRlcj4NCg0KIyMgU0FNUExFIFBST1BPUlRJT04NCg0KIyMjIEFwYSBJdHUgU2FtcGxpbmcgRGlzdHJpYnV0aW9uPw0KU2FtcGxpbmcgZGlzdHJpYnV0aW9uIGFkYWxhaCBkaXN0cmlidXNpIGRhcmkgc3RhdGlzdGlrIHNhbXBlbCANCihtaXNhbG55YSByYXRhLXJhdGEgWMyEKSB5YW5nIGRpcGVyb2xlaCBkYXJpIGJhbnlhayBzYW1wZWwgYWNhay4gSmlrYSBraXRhDQptZW5nYW1iaWwgc2FtcGVsIGJlcmthbGkta2FsaSBoaXR1bmcgWMyEIHRpYXAgc2FtcGVsIGxhbHUgZGlnYW1iYXIgdGVyYmVudHVrbGFoDQpzYW1wbGluZyBkaXN0cmlidXRpb24uDQoNCg0KIyMjIEFwYSBpdHUgUHJvcG9yc2k/DQpQcm9wb3JzaSBhZGFsYWggcGVyYmFuZGluZ2FuIGFudGFyYSBqdW1sYWgga2VqYWRpYW4geWFuZyBkaWFuZ2dhcCDigJxiZXJoYXNpbOKAnSANCmRlbmdhbiBqdW1sYWgga2VzZWx1cnVoYW4uDQoNCg0KLSBSdW11cyBwcm9wb3JzaToNCg0KJHAgPSBcZnJhY3tcdGV4dHtqdW1sYWggaGFzaWwgeWFuZyBkaWluZ2lua2FufX17XHRleHR7anVtbGFoIHRvdGFsfX0kDQoNCg0KUHJvcG9yc2kgcGFkYSBwb3B1bGFzaSBkaWxhbWJhbmdrYW4gUC4NCg0KUHJvcG9yc2kgcGFkYSBzYW1wZWwgZGlsYW1iYW5na2FuICAocC1oYXQpLg0KDQoNCkNvbnRvaDoNCg0KSmlrYSBkYXJpIDEwIG9yYW5nIHRlcmRhcGF0IDIgb3JhbmcgYmVybWF0YSBoaWphdSwgbWFrYToNCg0KJFxoYXR7cH0gPSBcZnJhY3syfXsxMH0gPSAwLjIkDQoNCg0KIyMjIFNhbXBsaW5nIERpc3RyaWJ1dGlvbiBvZiB0aGUgU2FtcGxlIFByb3BvcnRpb24NCg0KSmlrYSBraXRhIG1lbmdhbWJpbCBiYW55YWsgc2FtcGVsIGRhcmkgcG9wdWxhc2kgZGFuIG1lbmdoaXR1bmcgIHBhZGEgc2V0aWFwIHNhbXBlbCwNCmtpdGEgYWthbiBtZW5kYXBhdGthbiBiYW55YWsgbmlsYWkgLiBOaWxhaS1uaWxhaSBpbmkgbWVtYmVudHVrIGRpc3RyaWJ1c2kgDQpzYW1wbGluZyBkYXJpIHByb3BvcnNpIHNhbXBlbC4NCg0KDQpEaXN0cmlidXNpIGluaSBtZW1pbGlraToNCg0KLSBNZWFuIChyYXRhLXJhdGEpOiByYXRhLXJhdGEgc2VtdWEgc2FtYSBkZW5nYW4gcHJvcG9yc2kgcG9wdWxhc2kuDQoNCi0gU3RhbmRhciBkZXZpYXNpIChzdGFuZGFyZCBlcnJvcik6ICRcc2lnbWFfe1xoYXR7cH19ID0gXHNxcnR7XGZyYWN7UCgxLVApfXtOfX0kDQoNCg0KZGVuZ2FuOg0KDQogPSBwcm9wb3JzaSBrZWJlcmhhc2lsYW4sDQoNCiA9IHByb3BvcnNpIHRpZGFrIGJlcmhhc2lsLA0KDQogPSB1a3VyYW4gc2FtcGVsLg0KDQoNCiMjIyBTeWFyYXQgQ2VudHJhbCBMaW1pdCBUaGVvcmVtIChDTFQpIHVudHVrIFByb3BvcnNpDQoNClN5YXJhdCB5YW5nIGluaSBCZXJiZWRhIGRlbmdhbiBzYW1wZWwgbWVhbiB5YW5nIGJ1dHVoICwgDQpwcm9wb3JzaSBtZW1pbGlraSBzeWFyYXQga2h1c3VzLg0KDQpDTFQgYmVybGFrdSBqaWthOg0KDQoxLiAkTlAg4omlIDEwJA0KDQoNCjIuICROKDEgLSBwKSDiiaUgMTAkDQoNCg0KSmlrYSBrZWR1YSBzeWFyYXQgaW5pIHRlcnBlbnVoaSwgbWFrYToNCg0KRGlzdHJpYnVzaSAgbWVuZGVrYXRpIG5vcm1hbC4NCg0KUnVtdXMgWi1zY29yZSBkYXBhdCBkaWd1bmFrYW4uDQoNCg0KDQojIyMgUnVtdXMgU3RhbmRhcmlzYXNpIChaLXNjb3JlKSB1bnR1ayBQcm9wb3JzaQ0KDQpKaWthIGRpc3RyaWJ1c2kgIG5vcm1hbCwgbWFrYSBaLXNjb3JlIGRpaGl0dW5nIGRlbmdhbjogDQokWiA9IFxmcmFje1xoYXR7cH0gLSBQfXtcc3FydHtcZnJhY3tQKDEtUCl9e059fX0kDQoNCg0KWi1zY29yZSBpbmkgZGFwYXQgZGlndW5ha2FuIHVudHVrOg0KDQotIG1lbmdoaXR1bmcgcGVsdWFuZywNCg0KLSBtZW5jYXJpIGFyZWEgZGkgYmF3YWgga3VydmEgbm9ybWFsLA0KDQotIG1lbGFrdWthbiB1amkgaGlwb3Rlc2lzIGRlbmdhbiB0YWJlbCBaLg0KDQoNCiMjIyBIdWJ1bmdhbiBkZW5nYW4gRGlzdHJpYnVzaSBCaW5vbWlhbA0KDQpEaXN0cmlidXNpIHNhbXBsaW5nIGRhcmkgcHJvcG9yc2kgYmVyaHVidW5nYW4gZXJhdCBkZW5nYW4gRGlzdHJpYnVzaSBiaW5vbWlhbCwNCmRhbiBBdHVyYW4gcGVsdWFuZyAocHJvYmFiaWxpdHkgcnVsZXMpLg0KDQoNCkthcmVuYSBpdHUsIG1lbWFoYW1pIHByb3BvcnNpIGp1Z2EgbWVtYmFudHUgZGFsYW0gbWVtdXR1c2thbiBrYXBhbiBtZW5nZ3VuYWthbiANCnJ1bXVzIGJpbm9taWFsIGRhbiBrYXBhbiBtZW5nZ3VuYWthbiBaLXNjb3JlLg0KDQoNCiMjIyBLZXNpbXB1bGFuIA0KDQoxLiBQcm9wb3JzaSAoIGRhbiApIG1lbmdnYW1iYXJrYW4gcGVyYmFuZGluZ2FuIGFudGFyYSBoYXNpbCB5YW5nIGRpaW5naW5rYW4gZGFuIA0KdG90YWwga2VzZWx1cnVoYW4uDQoNCg0KMi4gU2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mICBhZGFsYWggZGlzdHJpYnVzaSBkYXJpIG5pbGFpIHByb3BvcnNpIHNhbXBlbCB5YW5nIA0KZGloYXNpbGthbiBkYXJpIGJhbnlhayBzYW1wZWwuDQoNCg0KMy4gRGlzdHJpYnVzaSBpbmkgbWVtaWxpa2k6IFJhdGEtcmF0YSBkYW4gU3RhbmRhciBkZXZpYXNpIC4NCg0KDQo0LiBDTFQgdW50dWsgcHJvcG9yc2kgYmVybGFrdSBqaWthIGRhbiAuDQoNCg0KNS4gSmlrYSB0ZXJwZW51aGksIGRpc3RyaWJ1c2kgIG1lbmRla2F0aSBub3JtYWwgZGFuIHJ1bXVzIFotc2NvcmUgZGFwYXQgZGlndW5ha2FuIA0KdW50dWsgbWVuZ2hpdHVuZyBwZWx1YW5nLg0KDQotLS0NCg0KPGNlbnRlcj4NCioqVklERU8gNSA6IFJldmlldzogU2FtcGxpbmcgRGlzdHJpYnV0aW9uIG9mIHRoZSBTYW1wbGUgUHJvcG9ydGlvbiwgQmlub21pYWwgRGlzdHJpYnV0aW9uLCBQcm9iYWJpbGl0eSoqIA0KDQo8Y2VudGVyPg0KPGlmcmFtZSBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2MwbUZFTF9TV3pFP3NpIiB3aWR0aD0iNzY4IiANCmhlaWdodD0iNDAwcHgiIGRhdGEtZXh0ZXJuYWw9IjEiPiANCjwvaWZyYW1lPg0KPC9jZW50ZXI+DQoNCiMjIFJFVklFVyBTQU1QTElORyBESVNUUklCVVRJT04NClVudHVrIG1lbmdldGFodWkgbGViaWggZGFsYW0gdGVudGFuZyB0b3BpayB0ZXJzZWJ1dCwgdGVydXRhbWEga2l0YSBSZXZpZXcgbWF0ZXJpIA0KeWFuZyBzdWRhaCBkaWJhaGFzIGF0YXUgZGlqZWxhc2thbiBkaSB0b3BpayBzZWJlbHVtbnlhLg0KDQojIyMgUHJvYmFiaWxpdHkgKFByb2JhYmlsaXRhcykNCg0KUHJvYmFiaWxpdGFzIGFkYWxhaCBkYXNhciBtYXRlbWF0aWthIGRhcmkgZGF0YSBzY2llbmNlLiBJYSBtZW5kZXNrcmlwc2lrYW4gDQprZXRpZGFrcGFzdGlhbiBzdWF0dSBwZXJpc3Rpd2EgZGFuIG1lbmphZGkgZm9uZGFzaSB1bnR1azoNCg0KLSBpbmZlcmVuc2kgc3RhdGlzdGlrDQoNCi0gbW9kZWwgcHJvYmFiaWxpc3Rpaw0KDQotIGFsZ29yaXRtYSBtYWNoaW5lIGxlYXJuaW5nIChOYWl2ZSBCYXllcywgQmF5ZXNpYW4gbW9kZWxzKQ0KDQotIHNpbXVsYXNpIGRhdGENCg0KIyMjIEJpbm9taWFsIERpc3RyaWJ1dGlvbiAoRGlzdHJpYnVzaSBCaW5vbWlhbCkNCg0KRGlzdHJpYnVzaSBiaW5vbWlhbCBtZW1vZGVsa2FuIGp1bWxhaCBrZWJlcmhhc2lsYW4gZGFsYW0g8J2Rmw0KcGVyY29iYWFuIGluZGVwZW5kZW4sIGRlbmdhbiBwZWx1YW5nIGtlYmVyaGFzaWxhbiDwnZGdDQoNCkNvY29rIHVudHVrOg0KDQotIGtsYXNpZmlrYXNpIGJpbmVyDQoNCi0gbW9kZWwgQUIgdGVzdGluZw0KDQotIG1lbmdoaXR1bmcgZXJyb3IgcmF0ZSBjbGFzc2lmaWVyDQoNCi0gcHJvYmFiaWxpdGFzIOKAnGtlamFkaWFu4oCdIHBhZGEgZGF0YSBkaXNrcml0DQoNCg0KRGFsYW0gZGF0YSBzY2llbmNlLCBiaW5vbWlhbCBzZXJpbmcgZGlndW5ha2FuIHVudHVrIDoNCg0KLSBtZW1wZXJraXJha2FuIHByb3BvcnNpIGVycm9yIChtaXNhbDogbWlzY2xhc3NpZmljYXRpb24gcmF0ZSkNCg0KLSBtZW5naGl0dW5nIGNvbmZpZGVuY2UgaW50ZXJ2YWwgdW50dWsgcHJvcG9yc2kga2ViZXJoYXNpbGFuDQoNCi0gbWVtb2RlbGthbiBwcm9iYWJpbGl0YXMgY2xpY2stdGhyb3VnaCByYXRlIChDVFIpDQoNCg0KIyMjIE1lbmVudHVrYW4gUGVsdWFuZyBEYXNhcg0KDQpLaXRhIG1lbWlsaWtpIDIwMCBrZWxlcmVuZyBoaWphdSBkYW4gMzAwIGtlbGVyZW5nIGJpcnUgKHRvdGFsIDUwMCkuIEppa2Ega2l0YSANCm1lbmdhbWJpbCBrZWxlcmVuZyAzIGthbGkgZGVuZ2FuIHBlbmdlbWJhbGlhbiAod2l0aCByZXBsYWNlbWVudCksIA0KbWFrYSBzZXRpYXAgcGVuZ2FtYmlsYW4gdGV0YXAgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEuDQoNClBlbHVhbmcgbWVuZ2FtYmlsIGtlbGVyZW5nIGhpamF1DQoNCg0KJFAoRykgPSBcZnJhY3syMDB9ezUwMH0gPSAwLjQkDQoNCiRQKEIpID0gXGZyYWN7MzAwfXs1MDB9ID0gMC42JA0KDQpLYXJlbmEgYWRhIHBlbmdlbWJhbGlhbiwgc2V0aWFwIHBlcmNvYmFhbiBhZGFsYWggaW5kZXBlbmRlbi4NCg0KDQojIyMgUnVhbmcgU2FtcGVsIChTZW11YSBLZW11bmdraW5hbikNCg0KVW50dWsgMyBrYWxpIHBlbmdhbWJpbGFuLCBzZXRpYXAgcGVyY29iYWFuIGJpc2EgbWVuZ2hhc2lsa2FuIEcgKGdyZWVuKSBhdGF1IEIgKGJsdWUpLg0KDQpDb250b2ggaGFzaWw6DQoNCkdHQg0KDQpCR0INCg0KQkJCDQoNCmRhbiBzZXRlcnVzbnlhDQoNCg0KVW50dWsgbWVuZ2hpdHVuZyBwZWx1YW5nIHNlYnVhaCB1cnV0YW4gdGVydGVudHUsIGtpdGEgbWVuZ2FsaWthbiBwZWx1YW5nIHNldGlhcCBsYW5na2FoLCANCmNvbnRvaG55YToNCg0KJFAoR0dCKSA9IDAuNCBcdGltZXMgMC40IFx0aW1lcyAwLjYgPSAwLjA5NiQNCg0KDQojIyMgUGVsdWFuZyAiTWluaW1hbCAyIEhpamF1Ig0KDQoiQXQgbGVhc3QgdHdvIGdyZWVuIiBhcnRpbnlhOg0KDQp0ZXBhdCAyIGhpamF1DQoNCmF0YXUgdGVwYXQgMyBoaWphdQ0KDQoNClRlcGF0IDIgaGlqYXUNCg0KQWRhIDMgdXJ1dGFuIHlhbmcgbWVuZ2hhc2lsa2FuIGR1YSBoaWphdToNCg0KR0dCDQoNCkdCRw0KDQpCR0cNCg0KDQpNYXNpbmctbWFzaW5nIHBlbHVhbmdueWEgPSAwLjA5Ng0KDQpUb3RhbDoNCg0KJDMgXHRpbWVzIDAuMDk2ID0gMC4yODgkDQoNClRlcGF0IDMgaGlqYXUNCg0KJFAoR0dHKSA9IDAuNF4zID0gMC4wNjQkDQoNClRvdGFsIG1pbmltYWwgMiBoaWphdQ0KDQokUChcdGV4dHviiaUyIGhpamF1fSkgPSAwLjI4OCArIDAuMDY0ID0gMC4zNTIkDQoNCg0KIyMjIEppa2EgUGVyY29iYWFuIERpcGVycGFuamFuZyBNZW5qYWRpIDUgS2FsaQ0KDQpKaWthIG1lbmdhbWJpbCA1IGtlbGVyZW5nLCBydWFuZyBzYW1wZWwgamFkaSBzYW5nYXQgYmVzYXIgKDMyIGtlbXVuZ2tpbmFuKS4NClN1cGF5YSBsZWJpaCBlZmlzaWVuLCBraXRhIGd1bmFrYW4gRGlzdHJpYnVzaSBCaW5vbWlhbCwga2FyZW5hOg0KDQpTZXRpYXAgcGVyY29iYWFuIGhhbnlhIG1lbWlsaWtpIDIgaGFzaWwgKEcgYXRhdSBCKQ0KDQpQZWx1YW5nbnlhIHRldGFwIChwID0gMC40KQ0KDQpQZXJjb2JhYW4gaW5kZXBlbmRlbg0KDQoNClJ1bXVzIGJpbm9taWFsOg0KDQokUChYID0gaykgPSBcYmlub217bn17a30gcF57a30oMS1wKV57bi1rfSQNCg0KZGkgbWFuYToNCg0KID0ganVtbGFoIHBlcmNvYmFhbg0KDQogPSBqdW1sYWggc3Vrc2VzIHlhbmcgZGlpbmdpbmthbg0KDQogPSBwZWx1YW5nIHN1a3Nlcw0KDQoNClVudHVrICJtaW5pbWFsIDIgaGlqYXUiLCBraXRhIGp1bWxhaGthbjoNCg0KJFAoWCBcZ2UgMikgPSBQKFg9MikrUChYPTMpK1AoWD00KStQKFg9NSkkDQoNCg0KIyMjIFR1anVhbg0KDQpNZW5jYXJpIHByb2JhYmlsaXRhcyBtZW5kZWthdGkgKGFwcHJveGltYXRlIHByb2JhYmlsaXR5KSB1bnR1ayBrZWphZGlhbg0K4oCcbWVuYXJpayBzZXRpZGFrbnlhIDM1IGtlbGVyZW5nIGhpamF1IGRhcmkgMTAwIHBlcmNvYmFhbuKAnSwgZGVuZ2FuIG1lbmdndW5ha2FuOg0KDQotIFNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc2FtcGxlIHByb3BvcnRpb24gKHAtaGF0KQ0KDQotIENlbnRyYWwgTGltaXQgVGhlb3JlbSAoQ0xUKSB1bnR1ayBwcm9wb3JzaQ0KDQoNCiMjIyBTeWFyYXQgQ0xUIHVudHVrIFNhbXBsaW5nIERpc3RyaWJ1dGlvbiBvZiBwLWhhdA0KDQpBZ2FyIGRpc3RyaWJ1c2kgc2FtcGxlIHByb3BvcnRpb24gYmlzYSBtZW5kZWthdGkgbm9ybWFsLCBoYXJ1cyBtZW1lbnVoaSAyIGtvbmRpc2k6DQoNCjEuICRuIMOXIHAg4omlIDEwJA0KDQoNCjIuICRuIMOXICgxIOKIkiBwKSDiiaUgMTAkDQoNCg0KUGFkYSBzb2FsOg0KDQpuID0gMTAwDQoNCnAgPSAwLjQgKHBlbHVhbmcga2VsZXJlbmcgaGlqYXUpDQoNCg0KQ2hlY2sNCg0KJG7Ct3AgPSAxMDAgw5cgMC40ID0gNDAg4omlIDEwJCANCg0KJG7Ctygx4oCTcCkgPSAxMDAgw5cgMC42ID0gNjAg4omlIDEwJCANCg0KDQojIyMgUnVtdXMgU3RhbmRhcmRpc2FzaSAoWi1TY29yZSkgdW50dWsgUHJvcG9yc2kNCg0KUnVtdXMgOg0KDQokeiA9IFxmcmFje1xoYXR7cH0gLSBwfXtcc3FydHtcZnJhY3twKDEtcCl9e259fX0gPSBzYW1wbGV+cHJvcG9ydGlvbiAodGFyZ2V0IG1pbmltYWwpJA0KDQokPSAzNS8xMDAgPSAwLjM1JA0KDQokcCA9IDAuNCQNCg0KJG4gPSAxMDAkDQoNCg0KSGl0dW5nIHN0YW5kYXIgZGV2aWFzaToNCg0KJFxzaWdtYV97XGhhdHtwfX0gPSBcc3FydHtcZnJhY3swLjQoMC42KX17MTAwfX0kDQoNCk1hc3Vra2FuIGtlIHJ1bXVzIG1lbmdoYXNpbGthbjoNCiR6ID0gLTEuMDIkDQoNCg0KIyMjIEludGVycHJldGFzaSBaLVNjb3JlDQoNClogPSDigJMxLjAyIGFyZWEgZGkga2lyaSBuaWxhaSBpbmkgcGFkYSBrdXJ2YSBub3JtYWwgPSAwLjE1MzkNCihiZXJkYXNhcmthbiB0YWJlbCBaKQ0KDQpBcnRpbnlhOg0KDQpQcm9iYWJpbGl0YXMgJHAtaGF0IOKJpCAwLjM1ID0gMC4xNTM5JA0KDQpZYW5nIGRpY2FyaSBhZGFsYWggJHAtaGF0IOKJpSAwLjM1JCwgamFkaSBhcmVhIGthbmFuOg0KDQoNCiQxIC0gMC4xNTM5ID0gMC44NDYxJA0KDQojIyMgS2VzaW1wdWxhbg0KDQpEaXN0cmlidXNpIGJpbm9taWFsIHNhbmdhdCBzZXJpbmcgZGlndW5ha2FuIGRhbGFtIGthc3VzIOKAnGJlcmhhc2lsL2dhZ2Fs4oCdDQpiZXJ1bGFuZyBrYWxpOiBjb250b2ggc3VydmVpLCBsZW1wYXIga29pbiwgZGFuIHBlbmdhbWJpbGFuIG9iamVrIGFjYWsuDQoNClByb2JhYmlsaXRhcyBtZW5kZWthdGkgYmFod2Ega2l0YSBtZW5hcmlrIG1pbmltYWwgMzUga2VsZXJlbmcgaGlqYXUgZGFyaQ0KMTAwIHBlcmNvYmFhbiA9IDAuODQ2MSBhdGF1IDg0LjYxJS4NCg0KSW5pIHBlbmRla2F0YW4sIGJ1a2FuIHByb2JhYmlsaXRhcyBla3Nhay4NCg0KUHJvYmFiaWxpdGFzIGVrc2FrIGhhbnlhIGJpc2EgZGlkYXBhdCBkZW5nYW46DQoNCi0gbWV0b2RlIHJ1YW5nIHNhbXBlbCBsZW5na2FwLCBhdGF1DQoNCi0gcnVtdXMgYmlub21pYWwuDQoNCg0KDQojIyBSRUZFUkVOU0kNCg0KMS4q4oCcUHJvYmFiaWxpdHkgYW5kIFN0YXRpc3RpY3PigJ0qIOKAkyBNb3JyaXMgSC4gRGVHcm9vdCAmIE1hcmsgU2NoZXJ2aXNoDQoNCjIuKuKAnEludHJvZHVjdGlvbiB0byBQcm9iYWJpbGl0eeKAnSog4oCTIERpbWl0cmkgUC4gQmVydHNla2FzICYgSm9obiBUc2l0c2lrbGlzDQoNCjMuKuKAnFN0YXRpc3RpY3PigJ0qIOKAkyBSb2JlcnQgUy4gV2l0dGUgJiBKb2huIFMuIFdpdHRlDQoNCjQuKlByYWN0aWNhbCBTdGF0aXN0aWNzIGZvciBEYXRhIFNjaWVudGlzdHMqIC0gUGV0ZXIgQnJ1Y2UsIEFuZHJldyBCcnVjZSwgUGV0ZXIgR2VkZWNrDQoNCjUuKuKAnFByb2JhYmlsaXR5IGFuZCBSYW5kb20gUHJvY2Vzc2Vz4oCdKiDigJMgR2VvZmZyZXkgR3JpbW1ldHQgJiBEYXZpZCBTdGlyemFrZXINCg0KNi4qU3RhdGlzdGljYWwgSW5mZXJlbmNl4oCdKiDigJMgQ2FzZWxsYSAmIEJlcmdlcg0KDQo3LipBbGwgb2YgU3RhdGlzdGljcyDigJQgQSBDb25jaXNlIENvdXJzZSBpbiBTdGF0aXN0aWNhbCBJbmZlcmVuY2UqIC0gTGFycnkgV2Fzc2VybWFuDQoNCg==