~ Essentials of Probability ~

1 Fundamental Concept

1.0.1 PENGERTIAN PROBABILITAS

Probabilitas (peluang) adalah nilai yang menunjukkan seberapa besar kemungkinan suatu peristiwa (event) akan terjadi.

Rumus Dasar Probabilitas:

\[ P(A) = \frac{n(A)}{n(S)} \]

Keterangan:

  • P(A) = Peluang peristiwa A terjadi
  • n(A) = Jumlah hasil yang diinginkan (titik sampel A)
  • n(S) = Jumlah total hasil yang mungkin (ruang sampel)

Contoh: Peluang muncul gambar (H) saat lempar satu koin

  • n(H) = 1
  • n(S) = 2 (H atau T)

\[ P(H) = \frac{1}{2} = 0.5 = 50\% \]


1.0.2 RUANG SAMPEL (SAMPLE SPACE)

Ruang sampel adalah himpunan semua hasil yang mungkin dari suatu percobaan.
Dilambangkan dengan S.

Contoh Dua Koin:

\[ S = \{HH, HT, TH, TT\} \]

\[ n(S) = 4 \]

Peluang Gabungan untuk Peristiwa Bebas:

\[ P(A \text{ dan } B) = P(A) \times P(B) \]

Contoh: Peluang mendapatkan dua gambar (HH)

  • P(H) = 0.5
  • P(H dan H) = 0.5 × 0.5 = 0.25

1.0.3 ATURAN DASAR PROBABILITAS

1. Nilai Probabilitas Selalu antara 0 dan 1

\[ 0 \leq P(A) \leq 1 \]

  • P(A) = 0 → peristiwa mustahil
  • P(A) = 1 → peristiwa pasti
  • P(A) = 0.5 → peluang 50%

2. Total Probabilitas pada Ruang Sampel adalah 1

\[ \sum P(S) = 1 \]

Contoh:

\[ P(H) + P(T) = 0.5 + 0.5 = 1 \]


1.0.4 ATURAN KOMPLEMEN (COMPLEMENT RULE)

Komplemen dari A adalah peristiwa ketika A tidak terjadi, ditulis A’ atau \(A^c\).

Rumus:

\[ P(A') = 1 - P(A) \]

Contoh: Dua Koin

Peluang mendapatkan TT:

\[ P(TT) = 0.25 \]

Peluang bukan TT:

\[ P(\text{Bukan TT}) = 1 - 0.25 = 0.75 \]

2 Independent and Dependent

2.0.1 Independent Events (Peristiwa Bebas)

Pengertian
Dua peristiwa dikatakan independent jika terjadinya satu peristiwa tidak mempengaruhi probabilitas terjadinya peristiwa lainnya.

Contoh
- Melempar dadu dan melambungkan koin.
Hasil dadu tidak mengubah peluang munculnya heads (H) pada koin.

Rumus Probabilitas

\[ P(A \text{ dan } B) = P(A) \times P(B) \]

Contoh Soal
Berapa probabilitas mendapatkan angka 5 pada dadu dan heads pada koin?

  • \(P(5) = \frac{1}{6}\)
  • \(P(H) = \frac{1}{2}\)

\[ P(5 \text{ dan } H) = \frac{1}{6} \times \frac{1}{2} = \frac{1}{12} \]


###Dependent Events (Peristiwa Tidak Bebas)

Pengertian
Dua peristiwa dikatakan dependent jika terjadinya satu peristiwa mempengaruhi probabilitas terjadinya peristiwa lainnya.
Hal ini umumnya terjadi pada pengambilan tanpa pengembalian (without replacement).

Contoh
Sebuah kotak berisi 10 kelereng:
- 7 hijau
- 3 biru

Jika dua kelereng diambil tanpa dikembalikan, komposisi berubah → peluang berubah.

Rumus Probabilitas

\[ P(A \text{ dan } B) = P(A) \times P(B \mid A) \]


2.0.2 Contoh Soal 1

Soal: Berapa probabilitas mengambil 1 hijau lalu 1 biru tanpa pengembalian?

  • \(P(\text{Hijau pertama}) = \frac{7}{10}\)
  • Setelah satu hijau diambil → sisa 6 hijau, 3 biru
  • \(P(\text{Biru kedua}) = \frac{3}{9}\)

\[ P(\text{Hijau lalu Biru}) = \frac{7}{10} \times \frac{3}{9} = \frac{7}{30} \]


2.0.3 Contoh Soal 2

Soal: Berapa probabilitas mengambil 2 hijau tanpa pengembalian?

  • \(P(\text{Hijau pertama}) = \frac{7}{10}\)
  • Setelah satu hijau diambil → sisa 6 hijau
  • \(P(\text{Hijau kedua}) = \frac{6}{9}\)

\[ P(2 \text{ Hijau}) = \frac{7}{10} \times \frac{6}{9} = \frac{7}{15} \]


2.0.4 Kesimpulan

Independent Events - Terjadinya satu peristiwa tidak mempengaruhi peristiwa lainnya.
- Rumus:
\[ P(A \text{ dan } B) = P(A) \times P(B) \]

Dependent Events - Terjadinya satu peristiwa mempengaruhi peluang peristiwa berikutnya.
- Rumus:
\[ P(A \text{ dan } B) = P(A) \times P(B \mid A) \]

3 Union of Events

3.0.1 Sample Space (Ruang Sampel)

  • Ruang sampel adalah seluruh kemungkinan hasil dari suatu percobaan.
  • Contoh:
    • Melempar 1 dadu → {1, 2, 3, 4, 5, 6}
    • Melempar 2 dadu → total 36 kemungkinan (6 × 6)
  • Contoh hasil: (3,5), (6,6), dll.

3.0.2 Simple Probability (Probabilitas Sederhana)

Probabilitas suatu kejadian: \[ P(A) = \frac{\text{jumlah outcome yang menguntungkan}}{\text{jumlah total outcome}} \]

Contoh:
Probabilitas keluar dua angka 4 saat melempar dua dadu: - Menguntungkan = 1 (yaitu (4,4)) - Total = 36
\[ P = \frac{1}{36} \]


3.0.3 Contoh Review**

Probabilitas keluar dua angka genap - Outcome genap: {2,4,6}
- Total kombinasi dua angka genap = 9 \[ P = \frac{9}{36} \]

Probabilitas keluar minimal satu angka 2 - Total outcome yang mengandung angka 2 = 11 \[ P = \frac{11}{36} \]

Probabilitas keluar dua angka 6** Menggunakan independent events: \[ P(6 \text{ dan } 6) = \frac{1}{6} \times \frac{1}{6} = \frac{1}{36} \]


3.0.4 Intersection of Events (Irisan Kejadian A dan B)**

Contoh:
- A = dua angka genap (9 outcome)
- B = minimal satu angka 2 (11 outcome)
- Irisan A ∩ B = 5 outcome
\[ P(A \cap B) = \frac{5}{36} \]


3.0.5 Union of Events (Gabungan Kejadian A dan B)**

Jika muncul kata “OR”, itu berarti gabungan (union).

Rumus: \[ P(A \cup B) = P(A) + P(B) - P(A \cap B) \]

Mengapa dikurangi?
→ Untuk menghindari double-counting pada outcome yang muncul di kedua kejadian sekaligus.


3.0.6 Contoh Perhitungan Union**

A = dua angka genap
\[ P(A) = \frac{9}{36} \]

B = minimal satu angka 2
\[ P(B) = \frac{11}{36} \]

Irisan (A ∩ B): \[ P(A \cap B) = \frac{5}{36} \]

Gabungan: \[ P(A \cup B) = \frac{9}{36} + \frac{11}{36} - \frac{5}{36} = \frac{15}{36} = 0.4167 \]


3.0.7 Visualisasi (Konsep Venn)**

  • Kotak = seluruh sample space (probabilitas total = 1).
  • Dua lingkaran = kejadian A dan B.
  • Area yang overlap = intersection (A ∩ B).
  • Saat menghitung gabungan, area overlap dikurangi sekali agar tidak dihitung dua kali.

3.0.8 **Kesimpulan Utama

Gunakan kata kunci “OR” → union (gabungan).
Rumus:
\[ P(A \cup B) = P(A) + P(B) - P(A \cap B) \] Intersection diperlukan untuk menghindari menghitung kejadian yang sama lebih dari sekali.
Sample space adalah dasar semua perhitungan probabilitas.


4 Exclusive and Exhaustive

4.0.1 Mutually Exclusive Events

  • Dua atau lebih kejadian yang tidak bisa terjadi bersamaan.
  • Jika satu kejadian terjadi, yang lain tidak mungkin terjadi.
  • Contoh: Pelemparan koin → HEAD dan TAIL tidak bisa terjadi bersamaan.

4.0.2 Exhaustive Events

  • Kumpulan kejadian yang mencakup semua kemungkinan outcome.
  • Gabungan semua kejadian = seluruh ruang sampel.

4.0.3 Contoh Dalam Kehidupan

4.0.3.1 Mutually Exclusive

  • HEAD vs TAIL pada pelemparan koin.
  • Angka genap vs ganjil pada pelemparan dadu.

4.0.3.2 Exhaustive

  • HEAD + TAIL = seluruh ruang sampel pelemparan koin.
  • Angka 1 + 2 + 3 + 4 + 5 + 6 = seluruh ruang sampel pelemparan dadu.

4.0.4 Ciri-ciri Mutually Exclusive

  • \(P(A \cap B) = 0\) (tidak ada irisan)
  • Jika A terjadi, maka B tidak terjadi
  • Jika B terjadi, maka A tidak terjadi
  • Diagram Venn: lingkaran yang terpisah / tidak overlap

4.0.5 Ciri-ciri Exhaustive

  • \(P(A \cup B \cup C ...) = 1\)
  • Tidak ada outcome yang tertinggal
  • Mencakup semua kemungkinan

4.0.6 Jenis-Jenis Kombinasi

Jenis Keterangan Contoh
Mutually Exclusive Saja Kejadian terpisah tapi tidak mencakup semua outcome A & B pada survey dengan beberapa pilihan jawaban saja
Exhaustive Saja Mencakup semua outcome tapi ada overlap Kategori umur: 0–18, 15–30, 25–40
Mutually Exclusive & Exhaustive Terpisah dan mencakup semua outcome HEAD & TAIL pada pelemparan koin

4.0.7 Rumus Probabilitas

  • Mutually Exclusive \[ P(A \cup B) = P(A) + P(B) \]

  • Exhaustive \[ P(A) + P(B) + P(C) + ... = 1 \]

4.0.8 Contoh Aplikasi

Dalam survey:
Pilihan jawaban: Sangat Setuju, Setuju, Netral, Tidak Setuju, Sangat Tidak Setuju
- Kelima pilihan bersifat mutually exclusive & exhaustive.

4.0.9 Kesimpulan Penting

  • Mutually Exclusive: Tidak bisa terjadi bersamaan.

  • Exhaustive: Mencakup semua kemungkinan.

  • Kombinasi keduanya ideal untuk kategori yang lengkap dan terpisah.

  • Penting dalam desain survey, klasifikasi data, dan analisis probabilitas.

5 Binomial Experiment

5.0.1 Konsep Dasar Binomial Probability

Binomial probability membahas peluang terjadinya success atau failure pada percobaan yang diulang berkali-kali.
Istilah bi berarti dua, sehingga selalu ada dua kemungkinan:

  • Success (berhasil)
  • Failure (gagal)

Contoh situasi binomial: - Melempar koin (H atau T) - Menarik bola tertentu dari kotak - Menjawab soal benar/salah

Distribusi binomial menghitung peluang memperoleh jumlah success tertentu dalam n percobaan.


5.0.2 Syarat Binomial Setting (4 Kondisi Utama)

Percobaan dikatakan binomial jika memenuhi:

Fixed number of trials Jumlah percobaan n sudah ditentukan dari awal.

Dua kemungkinan outcome Tiap percobaan hanya bisa menghasilkan success atau failure.

Probabilitas success konstan \[ P(\text{success}) = p \]

Independence antar percobaan Hasil satu percobaan tidak mempengaruhi yang lain.

Jika semua terpenuhi → binomial experiment.


5.0.3 Contoh Soal 1 – Flipping a Coin 3 Times

Pertanyaan:
Probabilitas mendapat tepat 1 head dari 3 kali lemparan?

Cara manual:

  • Jumlah pola yang menghasilkan tepat 1 head = 3
  • Peluang tiap pola:

\[ 0.5^3 = 0.125 \]

Total:

\[ P = 3 \times 0.125 = 0.375 \]

Cek syarat binomial → semua ✔ → binomial experiment.


5.0.4 Contoh Soal 2 – Menarik Marble With Replacement

Kotak berisi:

  • 3 pink
  • 2 green
  • 5 blue
    Total = 10 marble

Pertanyaan:
Probabilitas mendapat tepat 2 green dari 5 penarikan with replacement.

Peluang success:

\[ p = P(\text{green}) = \frac{2}{10} = 0.2 \]

Peluang failure:

\[ 1 - p = 0.8 \]

Karena replacement → peluang konstan → independen → binomial experiment.

Cara manual:

\[ 10 \times (0.2^2)(0.8^3) = 0.2048 \]


5.0.5 Rumus Distribusi Binomial

Rumus umum:

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

Di mana: - \(n\) = jumlah percobaan
- \(k\) = jumlah success
- \(p\) = peluang success
- \(\binom{n}{k}\) = kombinasi


5.0.6 Contoh Menggunakan Rumus (Kasus Marble)

Diberikan: - \(n = 5\) - \(k = 2\) - \(p = 0.2\)

\[ P = \binom{5}{2} (0.2)^2 (0.8)^3 \]

Hasil:

\[ P = 0.2048 \]


5.0.7 Kesimpulan Utama

  • Binomial membutuhkan 4 syarat: fixed n, dua outcome, peluang konstan, independen.
  • Berguna untuk menghitung peluang jumlah success tertentu.
  • Cara cepat menghitung → rumus binomial.
  • Rumus:

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

6 Binomial Distributions

7 Distribusi Binomial

Distribusi binomial adalah distribusi probabilitas diskrit yang digunakan untuk menghitung jumlah keberhasilan dalam sejumlah percobaan yang independen, dengan dua kemungkinan hasil saja (sukses/gagal) dan probabilitas sukses tetap pada setiap percobaan.


7.0.1 Konsep Dasar dan Formula Binomial

Distribusi binomial digunakan untuk menghitung probabilitas mendapatkan tepat k keberhasilan dalam n percobaan.

7.0.2 Rumus:

\[ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} = \frac{n!}{k!(n-k)!} p^k (1-p)^{n-k} \]

7.0.3 Keterangan:

  • k : jumlah keberhasilan yang diinginkan
  • n : jumlah total percobaan
  • p : probabilitas keberhasilan pada satu percobaan
  • 1-p : probabilitas kegagalan

7.0.4 Contoh:

Melempar koin 2 kali (n = 2), keberhasilan adalah munculnya gambar (H, p = 0.5).

k Probabilitas P(X=k)
0 0.25
1 0.50
2 0.25

Catatan: Distribusi binomial mengasumsikan percobaan independen, artinya hasil satu percobaan tidak memengaruhi hasil percobaan lain.


7.0.5 Visualisasi Distribusi Binomial

Distribusi binomial biasanya divisualisasikan dengan diagram batang (bar chart):

  • Sumbu X: jumlah keberhasilan (k = 0,1,2,...,n)
  • Sumbu Y: probabilitas masing-masing k

Contoh plot di R:

### Parameter Distribusi Binomial

Variabel acak \(X \sim \text{Binomial}(n, p)\) memiliki parameter sebagai berikut:

Mean (Rata-rata, μ):

\[ \mu = n \cdot p \]

Varians (σ²):

\[ \sigma^2 = n \cdot p \cdot (1 - p) \]

Simpangan baku (σ):

\[ \sigma = \sqrt{n \cdot p \cdot (1 - p)} \]

Akar kuadrat dari varians, mengukur sebaran data secara praktis.

7.0.6 Pengaruh Nilai p dan n terhadap Bentuk Distribusi

Pengaruh p (probabilitas keberhasilan):

p = 0.5 → distribusi simetris

p < 0.5 → distribusi menceng ke kanan (lebih banyak hasil kecil)

p > 0.5 → distribusi menceng ke kiri (lebih banyak hasil besar)

Penjelasan: data cenderung mengelompok di sekitar mean μ = n*p.

Pengaruh n (jumlah percobaan):

Semakin besar n, distribusi binomial mendekati distribusi normal

Untuk distribusi simetris (p = 0.5), peningkatan n kecil sudah cukup

Untuk distribusi menceng (p ≠ 0.5), dibutuhkan n lebih besar agar bentuk mendekati normal

7.0.7 Pendekatan Normal pada Binomial

Jika n cukup besar, distribusi binomial dapat didekati dengan distribusi normal.

Kondisi umum:

𝑛 ⋅ 𝑝 ≥ 10 dan 𝑛 ⋅ ( 1 − 𝑝 ) ≥ 10 n⋅p≥10dann⋅(1−p)≥10

Catatan: Beberapa sumber menggunakan angka 5 sebagai patokan. Sesuaikan dengan buku atau instruktur.

7.0.8 Ringkasan / Recap

  • p mengontrol bentuk distribusi:

  • p = 0.5 → simetris

  • p < 0.5 → menceng ke kanan

  • p > 0.5 → menceng ke kiri

  • n mempengaruhi kedekatan dengan distribusi normal: semakin besar n → semakin mendekati normal

  • Parameter Penting:

-Mean (μ) = n*p

-Varians (σ²) = np(1-p)

-Simpangan baku (σ) = √[np(1-p)]

-Pendekatan Normal: dapat digunakan jika np ≥ 10 dan n(1-p) ≥ 10

8 References

8.1 Referensi Video

8.1.1 Fundamental Concept

8.1.2 Independent and Dependent

8.1.3 Union of event

8.1.4 Exclusive and Exchaustive

8.1.5 Binomial Exsperiment

Pembelajaran Probabilitas 5

8.1.6 Binomial Distribution

8.2 Referensi lain

8.2.1 Referensi Materi Probabilitas

LS0tDQp0aXRsZTogIn4gRXNzZW50aWFscyBvZiBQcm9iYWJpbGl0eSB+Ig0KYXV0aG9yOiAiQW5kcmUiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAiZmlsZS5jc3MiDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiBzZW50ZW5jZQ0KLS0tDQoNCg0KPGRpdiBjbGFzcz0iZm90by1raHVzdXMiPg0KDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSxlY2hvPUZBTFNFfQ0KbGlicmFyeShtYWdpY2spDQoNCiMgcGlsaWggZmlsZSBmb3RvIHNlY2FyYSBtYW51YWwgKHBhbGluZyBhbWFuIGtldGlrYSBrbml0KQ0KZmlsZV9wYXRoIDwtIG5vcm1hbGl6ZVBhdGgoZmlsZS5jaG9vc2UoKSkNCg0KZ2FtYmFyIDwtIGltYWdlX3JlYWQoZmlsZV9wYXRoKQ0KZ2FtYmFyDQoNCg0KYGBgDQo8L2Rpdj4NCiANCg0KDQoNCiMgRnVuZGFtZW50YWwgQ29uY2VwdA0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL3luakhLQkNpR1hZP3NpPV9wODY0WGZaVG5ud09qU1AiKQ0KYGBgDQo8ZGl2IGNsYXNzPSJtYXRlcmktYm94Ij4NCiMjIyBQRU5HRVJUSUFOIFBST0JBQklMSVRBUw0KDQpQcm9iYWJpbGl0YXMgKHBlbHVhbmcpIGFkYWxhaCBuaWxhaSB5YW5nIG1lbnVuanVra2FuIHNlYmVyYXBhIGJlc2FyIGtlbXVuZ2tpbmFuIHN1YXR1IHBlcmlzdGl3YSAoZXZlbnQpIGFrYW4gdGVyamFkaS4NCg0KKipSdW11cyBEYXNhciBQcm9iYWJpbGl0YXM6KioNCg0KXFsNClAoQSkgPSBcZnJhY3tuKEEpfXtuKFMpfQ0KXF0NCg0KS2V0ZXJhbmdhbjoNCg0KLSAqKlAoQSkqKiA9IFBlbHVhbmcgcGVyaXN0aXdhIEEgdGVyamFkaSAgDQotICoqbihBKSoqID0gSnVtbGFoIGhhc2lsIHlhbmcgZGlpbmdpbmthbiAodGl0aWsgc2FtcGVsIEEpICANCi0gKipuKFMpKiogPSBKdW1sYWggdG90YWwgaGFzaWwgeWFuZyBtdW5na2luIChydWFuZyBzYW1wZWwpICANCg0KKipDb250b2g6IFBlbHVhbmcgbXVuY3VsIGdhbWJhciAoSCkgc2FhdCBsZW1wYXIgc2F0dSBrb2luKioNCg0KLSBuKEgpID0gMSAgDQotIG4oUykgPSAyIChIIGF0YXUgVCkgIA0KDQpcWw0KUChIKSA9IFxmcmFjezF9ezJ9ID0gMC41ID0gNTBcJQ0KXF0NCg0KLS0tDQoNCiMjIyBSVUFORyBTQU1QRUwgKFNBTVBMRSBTUEFDRSkNCg0KUnVhbmcgc2FtcGVsIGFkYWxhaCBoaW1wdW5hbiBzZW11YSBoYXNpbCB5YW5nIG11bmdraW4gZGFyaSBzdWF0dSBwZXJjb2JhYW4uICANCkRpbGFtYmFuZ2thbiBkZW5nYW4gKipTKiouDQoNCioqQ29udG9oIER1YSBLb2luOioqDQoNClxbDQpTID0gXHtISCwgSFQsIFRILCBUVFx9DQpcXQ0KDQpcWw0KbihTKSA9IDQNClxdDQoNCioqUGVsdWFuZyBHYWJ1bmdhbiB1bnR1ayBQZXJpc3Rpd2EgQmViYXM6KioNCg0KXFsNClAoQSBcdGV4dHsgZGFuIH0gQikgPSBQKEEpIFx0aW1lcyBQKEIpDQpcXQ0KDQoqKkNvbnRvaDogUGVsdWFuZyBtZW5kYXBhdGthbiBkdWEgZ2FtYmFyIChISCkqKg0KDQotIFAoSCkgPSAwLjUgIA0KLSBQKEggZGFuIEgpID0gMC41IMOXIDAuNSA9IDAuMjUgIA0KDQotLS0NCg0KIyMjIEFUVVJBTiBEQVNBUiBQUk9CQUJJTElUQVMNCg0KICoqMS4gTmlsYWkgUHJvYmFiaWxpdGFzIFNlbGFsdSBhbnRhcmEgMCBkYW4gMSoqDQoNClxbDQowIFxsZXEgUChBKSBcbGVxIDENClxdDQoNCi0gUChBKSA9IDAg4oaSIHBlcmlzdGl3YSBtdXN0YWhpbCAgDQotIFAoQSkgPSAxIOKGkiBwZXJpc3Rpd2EgcGFzdGkgIA0KLSBQKEEpID0gMC41IOKGkiBwZWx1YW5nIDUwJSAgDQoNCi0tLQ0KDQogKioyLiBUb3RhbCBQcm9iYWJpbGl0YXMgcGFkYSBSdWFuZyBTYW1wZWwgYWRhbGFoIDEqKg0KDQpcWw0KXHN1bSBQKFMpID0gMQ0KXF0NCg0KKipDb250b2g6KioNCg0KXFsNClAoSCkgKyBQKFQpID0gMC41ICsgMC41ID0gMQ0KXF0NCg0KLS0tDQoNCiMjIyBBVFVSQU4gS09NUExFTUVOIChDT01QTEVNRU5UIFJVTEUpDQoNCktvbXBsZW1lbiBkYXJpIEEgYWRhbGFoIHBlcmlzdGl3YSBrZXRpa2EgKipBIHRpZGFrIHRlcmphZGkqKiwgZGl0dWxpcyBBJyBhdGF1IFwoQV5jXCkuDQoNCioqUnVtdXM6KioNCg0KXFsNClAoQScpID0gMSAtIFAoQSkNClxdDQoNCioqQ29udG9oOiBEdWEgS29pbioqDQoNClBlbHVhbmcgbWVuZGFwYXRrYW4gKipUVCoqOg0KDQpcWw0KUChUVCkgPSAwLjI1DQpcXQ0KDQpQZWx1YW5nICoqYnVrYW4gVFQqKjoNCg0KXFsNClAoXHRleHR7QnVrYW4gVFR9KSA9IDEgLSAwLjI1ID0gMC43NQ0KXF0NCg0KPC9kaXY+DQoNCiMgSW5kZXBlbmRlbnQgYW5kIERlcGVuZGVudA0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL0xTLV9paERLcjJNP3NpPTFicTF2SGpHMkJ5RlJZeU8iKQ0KYGBgDQo8ZGl2IGNsYXNzPSJtYXRlcmktYm94Ij4NCg0KIyMjIEluZGVwZW5kZW50IEV2ZW50cyAoUGVyaXN0aXdhIEJlYmFzKQ0KDQoqKlBlbmdlcnRpYW4qKiAgDQpEdWEgcGVyaXN0aXdhIGRpa2F0YWthbiAqaW5kZXBlbmRlbnQqIGppa2EgdGVyamFkaW55YSBzYXR1IHBlcmlzdGl3YSAqKnRpZGFrIG1lbXBlbmdhcnVoaSoqIHByb2JhYmlsaXRhcyB0ZXJqYWRpbnlhIHBlcmlzdGl3YSBsYWlubnlhLg0KDQoqKkNvbnRvaCoqICANCi0gTWVsZW1wYXIgZGFkdSBkYW4gbWVsYW1idW5na2FuIGtvaW4uICANCiAgSGFzaWwgZGFkdSB0aWRhayBtZW5ndWJhaCBwZWx1YW5nIG11bmN1bG55YSBoZWFkcyAoSCkgcGFkYSBrb2luLg0KDQoqKlJ1bXVzIFByb2JhYmlsaXRhcyoqDQoNClxbDQpQKEEgXHRleHR7IGRhbiB9IEIpID0gUChBKSBcdGltZXMgUChCKQ0KXF0NCg0KKipDb250b2ggU29hbCoqICANCkJlcmFwYSBwcm9iYWJpbGl0YXMgbWVuZGFwYXRrYW4gYW5na2EgKio1IHBhZGEgZGFkdSoqIGRhbiAqKmhlYWRzIHBhZGEga29pbioqPw0KDQotIFwoUCg1KSA9IFxmcmFjezF9ezZ9XCkgIA0KLSBcKFAoSCkgPSBcZnJhY3sxfXsyfVwpDQoNClxbDQpQKDUgXHRleHR7IGRhbiB9IEgpID0gXGZyYWN7MX17Nn0gXHRpbWVzIFxmcmFjezF9ezJ9ID0gXGZyYWN7MX17MTJ9DQpcXQ0KDQotLS0NCg0KIyMjRGVwZW5kZW50IEV2ZW50cyAoUGVyaXN0aXdhIFRpZGFrIEJlYmFzKQ0KDQoqKlBlbmdlcnRpYW4qKiAgDQpEdWEgcGVyaXN0aXdhIGRpa2F0YWthbiAqZGVwZW5kZW50KiBqaWthIHRlcmphZGlueWEgc2F0dSBwZXJpc3Rpd2EgKiptZW1wZW5nYXJ1aGkqKiBwcm9iYWJpbGl0YXMgdGVyamFkaW55YSBwZXJpc3Rpd2EgbGFpbm55YS4gIA0KSGFsIGluaSB1bXVtbnlhIHRlcmphZGkgcGFkYSBwZW5nYW1iaWxhbiAqKnRhbnBhIHBlbmdlbWJhbGlhbiAod2l0aG91dCByZXBsYWNlbWVudCkqKi4NCg0KKipDb250b2gqKiAgDQpTZWJ1YWgga290YWsgYmVyaXNpIDEwIGtlbGVyZW5nOiAgDQotIDcgaGlqYXUgIA0KLSAzIGJpcnUgIA0KDQpKaWthIGR1YSBrZWxlcmVuZyBkaWFtYmlsIHRhbnBhIGRpa2VtYmFsaWthbiwga29tcG9zaXNpIGJlcnViYWgg4oaSIHBlbHVhbmcgYmVydWJhaC4NCg0KKipSdW11cyBQcm9iYWJpbGl0YXMqKg0KDQpcWw0KUChBIFx0ZXh0eyBkYW4gfSBCKSA9IFAoQSkgXHRpbWVzIFAoQiBcbWlkIEEpDQpcXQ0KDQotLS0NCg0KIyMjIENvbnRvaCBTb2FsIDENCg0KKipTb2FsOioqIEJlcmFwYSBwcm9iYWJpbGl0YXMgbWVuZ2FtYmlsICoqMSBoaWphdSoqIGxhbHUgKioxIGJpcnUqKiB0YW5wYSBwZW5nZW1iYWxpYW4/DQoNCi0gXChQKFx0ZXh0e0hpamF1IHBlcnRhbWF9KSA9IFxmcmFjezd9ezEwfVwpICANCi0gU2V0ZWxhaCBzYXR1IGhpamF1IGRpYW1iaWwg4oaSIHNpc2EgNiBoaWphdSwgMyBiaXJ1ICANCi0gXChQKFx0ZXh0e0JpcnUga2VkdWF9KSA9IFxmcmFjezN9ezl9XCkNCg0KXFsNClAoXHRleHR7SGlqYXUgbGFsdSBCaXJ1fSkgPSANClxmcmFjezd9ezEwfSBcdGltZXMgXGZyYWN7M317OX0gPSBcZnJhY3s3fXszMH0NClxdDQoNCi0tLQ0KDQojIyMgQ29udG9oIFNvYWwgMg0KDQoqKlNvYWw6KiogQmVyYXBhIHByb2JhYmlsaXRhcyBtZW5nYW1iaWwgKioyIGhpamF1KiogdGFucGEgcGVuZ2VtYmFsaWFuPw0KDQotIFwoUChcdGV4dHtIaWphdSBwZXJ0YW1hfSkgPSBcZnJhY3s3fXsxMH1cKSAgDQotIFNldGVsYWggc2F0dSBoaWphdSBkaWFtYmlsIOKGkiBzaXNhIDYgaGlqYXUgIA0KLSBcKFAoXHRleHR7SGlqYXUga2VkdWF9KSA9IFxmcmFjezZ9ezl9XCkNCg0KXFsNClAoMiBcdGV4dHsgSGlqYXV9KSA9DQpcZnJhY3s3fXsxMH0gXHRpbWVzIFxmcmFjezZ9ezl9ID0gXGZyYWN7N317MTV9DQpcXQ0KDQotLS0NCg0KIyMjIEtlc2ltcHVsYW4NCg0KICoqSW5kZXBlbmRlbnQgRXZlbnRzKioNCi0gVGVyamFkaW55YSBzYXR1IHBlcmlzdGl3YSAqKnRpZGFrIG1lbXBlbmdhcnVoaSoqIHBlcmlzdGl3YSBsYWlubnlhLiAgDQotIFJ1bXVzOiAgDQogIFxbDQogIFAoQSBcdGV4dHsgZGFuIH0gQikgPSBQKEEpIFx0aW1lcyBQKEIpDQogIFxdDQoNCiAqKkRlcGVuZGVudCBFdmVudHMqKg0KLSBUZXJqYWRpbnlhIHNhdHUgcGVyaXN0aXdhICoqbWVtcGVuZ2FydWhpKiogcGVsdWFuZyBwZXJpc3Rpd2EgYmVyaWt1dG55YS4gIA0KLSBSdW11czogIA0KICBcWw0KICBQKEEgXHRleHR7IGRhbiB9IEIpID0gUChBKSBcdGltZXMgUChCIFxtaWQgQSkNCiAgXF0NCg0KPC9kaXY+DQoNCiMgVW5pb24gb2YgRXZlbnRzDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvdnFLQWJoQ3FTVGM/c2k9NkdpYlJRR0U4dXFPZVFIOCIpDQpgYGANCjxkaXYgY2xhc3M9Im1hdGVyaS1ib3giPg0KDQojIyMgU2FtcGxlIFNwYWNlIChSdWFuZyBTYW1wZWwpDQotIFJ1YW5nIHNhbXBlbCBhZGFsYWggKipzZWx1cnVoIGtlbXVuZ2tpbmFuIGhhc2lsKiogZGFyaSBzdWF0dSBwZXJjb2JhYW4uDQotIENvbnRvaDoNCiAgLSBNZWxlbXBhciAqKjEgZGFkdSoqIOKGkiB7MSwgMiwgMywgNCwgNSwgNn0NCiAgLSBNZWxlbXBhciAqKjIgZGFkdSoqIOKGkiB0b3RhbCAqKjM2Kioga2VtdW5na2luYW4gKDYgw5cgNikNCi0gQ29udG9oIGhhc2lsOiAoMyw1KSwgKDYsNiksIGRsbC4NCg0KLS0tDQoNCiMjIyBTaW1wbGUgUHJvYmFiaWxpdHkgKFByb2JhYmlsaXRhcyBTZWRlcmhhbmEpDQpQcm9iYWJpbGl0YXMgc3VhdHUga2VqYWRpYW46DQpcWw0KUChBKSA9IFxmcmFje1x0ZXh0e2p1bWxhaCBvdXRjb21lIHlhbmcgbWVuZ3VudHVuZ2thbn19e1x0ZXh0e2p1bWxhaCB0b3RhbCBvdXRjb21lfX0NClxdDQoNCkNvbnRvaDogIA0KUHJvYmFiaWxpdGFzIGtlbHVhciAqKmR1YSBhbmdrYSA0Kiogc2FhdCBtZWxlbXBhciBkdWEgZGFkdToNCi0gTWVuZ3VudHVuZ2thbiA9IDEgKHlhaXR1ICg0LDQpKQ0KLSBUb3RhbCA9IDM2ICANClxbDQpQID0gXGZyYWN7MX17MzZ9DQpcXQ0KDQotLS0NCg0KIyMjIENvbnRvaCBSZXZpZXcqKg0KUHJvYmFiaWxpdGFzIGtlbHVhciBkdWEgYW5na2EgZ2VuYXANCi0gT3V0Y29tZSBnZW5hcDogezIsNCw2fSAgDQotIFRvdGFsIGtvbWJpbmFzaSBkdWEgYW5na2EgZ2VuYXAgPSAqKjkqKg0KXFsNClAgPSBcZnJhY3s5fXszNn0NClxdDQoNClByb2JhYmlsaXRhcyBrZWx1YXIgbWluaW1hbCBzYXR1IGFuZ2thIDINCi0gVG90YWwgb3V0Y29tZSB5YW5nIG1lbmdhbmR1bmcgYW5na2EgMiA9ICoqMTEqKg0KXFsNClAgPSBcZnJhY3sxMX17MzZ9DQpcXQ0KDQpQcm9iYWJpbGl0YXMga2VsdWFyIGR1YSBhbmdrYSA2KioNCk1lbmdndW5ha2FuIGluZGVwZW5kZW50IGV2ZW50czoNClxbDQpQKDYgXHRleHR7IGRhbiB9IDYpID0gXGZyYWN7MX17Nn0gXHRpbWVzIFxmcmFjezF9ezZ9ID0gXGZyYWN7MX17MzZ9DQpcXQ0KDQotLS0NCg0KIyMjIEludGVyc2VjdGlvbiBvZiBFdmVudHMgKElyaXNhbiBLZWphZGlhbiBBIGRhbiBCKSoqDQpDb250b2g6ICANCi0gQSA9IGR1YSBhbmdrYSBnZW5hcCAoOSBvdXRjb21lKSAgDQotIEIgPSBtaW5pbWFsIHNhdHUgYW5na2EgMiAoMTEgb3V0Y29tZSkgIA0KLSBJcmlzYW4gQSDiiKkgQiA9IDUgb3V0Y29tZSAgDQpcWw0KUChBIFxjYXAgQikgPSBcZnJhY3s1fXszNn0NClxdDQoNCi0tLQ0KDQojIyMgVW5pb24gb2YgRXZlbnRzIChHYWJ1bmdhbiBLZWphZGlhbiBBIGRhbiBCKSoqDQpKaWthIG11bmN1bCBrYXRhICoqIk9SIioqLCBpdHUgYmVyYXJ0aSBnYWJ1bmdhbiAodW5pb24pLg0KDQpSdW11czoNClxbDQpQKEEgXGN1cCBCKSA9IFAoQSkgKyBQKEIpIC0gUChBIFxjYXAgQikNClxdDQoNCk1lbmdhcGEgZGlrdXJhbmdpPyAgDQrihpIgVW50dWsgbWVuZ2hpbmRhcmkgKipkb3VibGUtY291bnRpbmcqKiBwYWRhIG91dGNvbWUgeWFuZyBtdW5jdWwgZGkga2VkdWEga2VqYWRpYW4gc2VrYWxpZ3VzLg0KDQotLS0NCg0KIyMjIENvbnRvaCBQZXJoaXR1bmdhbiBVbmlvbioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShWZW5uRGlhZ3JhbSkNCmxpYnJhcnkoZ3JpZCkNCg0Kbl9BIDwtIDkNCm5fQiA8LSAxMQ0Kbl9BQiA8LSA1DQoNCmdyaWQubmV3cGFnZSgpDQpwdXNoVmlld3BvcnQodmlld3BvcnQod2lkdGggPSAwLjk1LCBoZWlnaHQgPSAwLjkpKQ0KDQp2ZW5uIDwtIGRyYXcucGFpcndpc2UudmVubigNCiAgYXJlYTEgPSBuX0EsDQogIGFyZWEyID0gbl9CLCANCiAgY3Jvc3MuYXJlYSA9IG5fQUIsDQogIGNhdGVnb3J5ID0gYygiRHVhIEFuZ2thIEdlbmFwICg5KSIsICJNaW5pbWFsIFNhdHUgQW5na2EgMiAoMTEpIiksDQogIGZpbGwgPSBjKCJsaWdodGJsdWUiLCAibGlnaHRncmVlbiIpLA0KICBsdHkgPSAiYmxhbmsiLA0KICBjZXggPSAxLjMsDQogIGNhdC5jZXggPSAxLjEsDQogIGNhdC5jb2wgPSBjKCJibHVlIiwgImRhcmtncmVlbiIpLA0KICBjYXQucG9zID0gYygtMjAsIDIwKSwNCiAgY2F0LmRpc3QgPSAwLjA4LA0KICBtYXJnaW4gPSAwLjENCikNCg0KZ3JpZC50ZXh0KCJESUFHUkFNIFZFTk4gLSBTT0FMIERVQSBEQURVIiwgDQogICAgICAgICAgeCA9IDAuNSwgeSA9IDAuOTgsIA0KICAgICAgICAgIGdwID0gZ3Bhcihmb250c2l6ZSA9IDEzLCBmb250ZmFjZSA9ICJib2xkIikpDQoNCmdyaWQudGV4dCgiUChBIOKIqiBCKSA9IDkvMzYgKyAxMS8zNiAtIDUvMzYgPSAxNS8zNiIsIA0KICAgICAgICAgIHggPSAwLjUsIHkgPSAwLjAyLA0KICAgICAgICAgIGdwID0gZ3Bhcihmb250c2l6ZSA9IDExLCBmb250ZmFjZSA9ICJib2xkIiwgY29sID0gInJlZCIpKQ0KDQpwb3BWaWV3cG9ydCgpDQppbnZpc2libGUoKQ0KYGBgDQpBID0gZHVhIGFuZ2thIGdlbmFwICANClxbDQpQKEEpID0gXGZyYWN7OX17MzZ9DQpcXQ0KDQpCID0gbWluaW1hbCBzYXR1IGFuZ2thIDIgIA0KXFsNClAoQikgPSBcZnJhY3sxMX17MzZ9DQpcXQ0KDQpJcmlzYW4gKEEg4oipIEIpOg0KXFsNClAoQSBcY2FwIEIpID0gXGZyYWN7NX17MzZ9DQpcXQ0KDQpHYWJ1bmdhbjoNClxbDQpQKEEgXGN1cCBCKSANCj0gXGZyYWN7OX17MzZ9ICsgXGZyYWN7MTF9ezM2fSAtIFxmcmFjezV9ezM2fQ0KPSBcZnJhY3sxNX17MzZ9DQo9IDAuNDE2Nw0KXF0NCg0KLS0tDQoNCiMjIyBWaXN1YWxpc2FzaSAoS29uc2VwIFZlbm4pKioNCi0gS290YWsgPSBzZWx1cnVoIHNhbXBsZSBzcGFjZSAocHJvYmFiaWxpdGFzIHRvdGFsID0gMSkuICANCi0gRHVhIGxpbmdrYXJhbiA9IGtlamFkaWFuIEEgZGFuIEIuICANCi0gQXJlYSB5YW5nIG92ZXJsYXAgPSAqaW50ZXJzZWN0aW9uKiAoQSDiiKkgQikuICANCi0gU2FhdCBtZW5naGl0dW5nIGdhYnVuZ2FuLCBhcmVhIG92ZXJsYXAgKipkaWt1cmFuZ2kgc2VrYWxpKiogYWdhciB0aWRhayBkaWhpdHVuZyBkdWEga2FsaS4NCg0KDQojIyMgKipLZXNpbXB1bGFuIFV0YW1hDQpHdW5ha2FuIGthdGEga3VuY2kgKioiT1IiIOKGkiB1bmlvbioqIChnYWJ1bmdhbikuICANClJ1bXVzOiAgDQogICBcWw0KICAgUChBIFxjdXAgQikgPSBQKEEpICsgUChCKSAtIFAoQSBcY2FwIEIpDQogICBcXQ0KSW50ZXJzZWN0aW9uIGRpcGVybHVrYW4gdW50dWsgbWVuZ2hpbmRhcmkgbWVuZ2hpdHVuZyBrZWphZGlhbiB5YW5nIHNhbWEgbGViaWggZGFyaSBzZWthbGkuICANClNhbXBsZSBzcGFjZSBhZGFsYWggZGFzYXIgc2VtdWEgcGVyaGl0dW5nYW4gcHJvYmFiaWxpdGFzLiAgDQoNCi0tLQ0KDQoNCjwvZGl2Pg0KDQojIEV4Y2x1c2l2ZSBhbmQgRXhoYXVzdGl2ZQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvZjdhZ1R2OW5BNWs/c2k9aktHWUx1bzdPTE5HdUxiMiIpDQpgYGANCjxkaXYgY2xhc3M9Im1hdGVyaS1ib3giPg0KDQoNCiMjIyBNdXR1YWxseSBFeGNsdXNpdmUgRXZlbnRzDQotIER1YSBhdGF1IGxlYmloIGtlamFkaWFuIHlhbmcgKip0aWRhayBiaXNhIHRlcmphZGkgYmVyc2FtYWFuKiouDQotIEppa2Egc2F0dSBrZWphZGlhbiB0ZXJqYWRpLCB5YW5nIGxhaW4gKip0aWRhayBtdW5na2luIHRlcmphZGkqKi4NCi0gKipDb250b2g6KiogUGVsZW1wYXJhbiBrb2luIOKGkiBIRUFEIGRhbiBUQUlMIHRpZGFrIGJpc2EgdGVyamFkaSBiZXJzYW1hYW4uDQoNCiMjIyBFeGhhdXN0aXZlIEV2ZW50cw0KLSBLdW1wdWxhbiBrZWphZGlhbiB5YW5nICoqbWVuY2FrdXAgc2VtdWEga2VtdW5na2luYW4gb3V0Y29tZSoqLg0KLSBHYWJ1bmdhbiBzZW11YSBrZWphZGlhbiA9ICoqc2VsdXJ1aCBydWFuZyBzYW1wZWwqKi4NCg0KIyMjIENvbnRvaCBEYWxhbSBLZWhpZHVwYW4gDQoNCiMjIyMgTXV0dWFsbHkgRXhjbHVzaXZlDQotIEhFQUQgdnMgVEFJTCBwYWRhIHBlbGVtcGFyYW4ga29pbi4NCi0gQW5na2EgZ2VuYXAgdnMgZ2FuamlsIHBhZGEgcGVsZW1wYXJhbiBkYWR1Lg0KDQojIyMjIEV4aGF1c3RpdmUNCi0gSEVBRCArIFRBSUwgPSBzZWx1cnVoIHJ1YW5nIHNhbXBlbCBwZWxlbXBhcmFuIGtvaW4uDQotIEFuZ2thIDEgKyAyICsgMyArIDQgKyA1ICsgNiA9IHNlbHVydWggcnVhbmcgc2FtcGVsIHBlbGVtcGFyYW4gZGFkdS4NCg0KIyMjIENpcmktY2lyaSBNdXR1YWxseSBFeGNsdXNpdmUNCg0KLSBcKFAoQSBcY2FwIEIpID0gMFwpICh0aWRhayBhZGEgaXJpc2FuKQ0KLSBKaWthIEEgdGVyamFkaSwgbWFrYSBCICoqdGlkYWsgdGVyamFkaSoqDQotIEppa2EgQiB0ZXJqYWRpLCBtYWthIEEgKip0aWRhayB0ZXJqYWRpKioNCi0gRGlhZ3JhbSBWZW5uOiBsaW5na2FyYW4geWFuZyAqKnRlcnBpc2FoIC8gdGlkYWsgb3ZlcmxhcCoqDQoNCiMjIyBDaXJpLWNpcmkgRXhoYXVzdGl2ZQ0KDQotIFwoUChBIFxjdXAgQiBcY3VwIEMgLi4uKSA9IDFcKQ0KLSBUaWRhayBhZGEgb3V0Y29tZSB5YW5nIHRlcnRpbmdnYWwNCi0gTWVuY2FrdXAgKipzZW11YSBrZW11bmdraW5hbioqDQoNCiMjIyBKZW5pcy1KZW5pcyBLb21iaW5hc2kNCg0KfCBKZW5pcyB8IEtldGVyYW5nYW4gfCBDb250b2ggfA0KfC0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tfA0KfCBNdXR1YWxseSBFeGNsdXNpdmUgU2FqYSB8IEtlamFkaWFuIHRlcnBpc2FoIHRhcGkgdGlkYWsgbWVuY2FrdXAgc2VtdWEgb3V0Y29tZSB8IEEgJiBCIHBhZGEgc3VydmV5IGRlbmdhbiBiZWJlcmFwYSBwaWxpaGFuIGphd2FiYW4gc2FqYSB8DQp8IEV4aGF1c3RpdmUgU2FqYSB8IE1lbmNha3VwIHNlbXVhIG91dGNvbWUgdGFwaSBhZGEgb3ZlcmxhcCB8IEthdGVnb3JpIHVtdXI6IDDigJMxOCwgMTXigJMzMCwgMjXigJM0MCB8DQp8IE11dHVhbGx5IEV4Y2x1c2l2ZSAmIEV4aGF1c3RpdmUgfCBUZXJwaXNhaCBkYW4gbWVuY2FrdXAgc2VtdWEgb3V0Y29tZSB8IEhFQUQgJiBUQUlMIHBhZGEgcGVsZW1wYXJhbiBrb2luIHwNCg0KIyMjIFJ1bXVzIFByb2JhYmlsaXRhcw0KDQotIE11dHVhbGx5IEV4Y2x1c2l2ZQ0KXFsNClAoQSBcY3VwIEIpID0gUChBKSArIFAoQikNClxdDQoNCi0gRXhoYXVzdGl2ZQ0KXFsNClAoQSkgKyBQKEIpICsgUChDKSArIC4uLiA9IDENClxdDQoNCiMjIyBDb250b2ggQXBsaWthc2kNCg0KRGFsYW0gc3VydmV5OiAgDQpQaWxpaGFuIGphd2FiYW46IFNhbmdhdCBTZXR1anUsIFNldHVqdSwgTmV0cmFsLCBUaWRhayBTZXR1anUsIFNhbmdhdCBUaWRhayBTZXR1anUgIA0KLSBLZWxpbWEgcGlsaWhhbiBiZXJzaWZhdCAqKm11dHVhbGx5IGV4Y2x1c2l2ZSAmIGV4aGF1c3RpdmUqKi4NCg0KDQojIyMgS2VzaW1wdWxhbiBQZW50aW5nDQotIE11dHVhbGx5IEV4Y2x1c2l2ZTogVGlkYWsgYmlzYSB0ZXJqYWRpIGJlcnNhbWFhbi4NCg0KLSBFeGhhdXN0aXZlOiBNZW5jYWt1cCBzZW11YSBrZW11bmdraW5hbi4NCg0KLSBLb21iaW5hc2kga2VkdWFueWEgaWRlYWwgdW50dWsga2F0ZWdvcmkgeWFuZyBsZW5na2FwIGRhbiB0ZXJwaXNhaC4NCg0KLSBQZW50aW5nIGRhbGFtIGRlc2FpbiBzdXJ2ZXksIGtsYXNpZmlrYXNpIGRhdGEsIGRhbiBhbmFsaXNpcyBwcm9iYWJpbGl0YXMuDQoNCg0KDQo8L2Rpdj4NCiMgQmlub21pYWwgRXhwZXJpbWVudA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvblJ1UUF0YWpKWWs/c2k9VTdhOXlVM3QzQWlNeUhNWiIpDQpgYGANCjxkaXYgY2xhc3M9Im1hdGVyaS1ib3giPg0KDQoNCiMjIyBLb25zZXAgRGFzYXIgQmlub21pYWwgUHJvYmFiaWxpdHkNCg0KQmlub21pYWwgcHJvYmFiaWxpdHkgbWVtYmFoYXMgcGVsdWFuZyB0ZXJqYWRpbnlhICoqc3VjY2VzcyoqIGF0YXUgKipmYWlsdXJlKiogcGFkYSBwZXJjb2JhYW4geWFuZyBkaXVsYW5nIGJlcmthbGkta2FsaS4gIA0KSXN0aWxhaCAqKmJpKiogYmVyYXJ0aSAqZHVhKiwgc2VoaW5nZ2Egc2VsYWx1IGFkYSBkdWEga2VtdW5na2luYW46DQoNCi0gKipTdWNjZXNzIChiZXJoYXNpbCkqKiAgDQotICoqRmFpbHVyZSAoZ2FnYWwpKiogIA0KDQpDb250b2ggc2l0dWFzaSBiaW5vbWlhbDoNCi0gTWVsZW1wYXIga29pbiAoSCBhdGF1IFQpDQotIE1lbmFyaWsgYm9sYSB0ZXJ0ZW50dSBkYXJpIGtvdGFrDQotIE1lbmphd2FiIHNvYWwgYmVuYXIvc2FsYWgNCg0KRGlzdHJpYnVzaSBiaW5vbWlhbCBtZW5naGl0dW5nIHBlbHVhbmcgbWVtcGVyb2xlaCAqKmp1bWxhaCBzdWNjZXNzIHRlcnRlbnR1KiogZGFsYW0gKipuIHBlcmNvYmFhbioqLg0KDQotLS0NCg0KIyMjIFN5YXJhdCBCaW5vbWlhbCBTZXR0aW5nICg0IEtvbmRpc2kgVXRhbWEpDQoNClBlcmNvYmFhbiBkaWthdGFrYW4gYmlub21pYWwgamlrYSBtZW1lbnVoaToNCg0KKkZpeGVkIG51bWJlciBvZiB0cmlhbHMqDQpKdW1sYWggcGVyY29iYWFuICoqbioqIHN1ZGFoIGRpdGVudHVrYW4gZGFyaSBhd2FsLg0KDQoqRHVhIGtlbXVuZ2tpbmFuIG91dGNvbWUqDQpUaWFwIHBlcmNvYmFhbiBoYW55YSBiaXNhIG1lbmdoYXNpbGthbiBzdWNjZXNzIGF0YXUgZmFpbHVyZS4NCg0KKlByb2JhYmlsaXRhcyBzdWNjZXNzIGtvbnN0YW4qDQpcWw0KUChcdGV4dHtzdWNjZXNzfSkgPSBwDQpcXQ0KDQoqSW5kZXBlbmRlbmNlIGFudGFyIHBlcmNvYmFhbioNCkhhc2lsIHNhdHUgcGVyY29iYWFuIHRpZGFrIG1lbXBlbmdhcnVoaSB5YW5nIGxhaW4uDQoNCkppa2Egc2VtdWEgdGVycGVudWhpIOKGkiAqKmJpbm9taWFsIGV4cGVyaW1lbnQqKi4NCg0KLS0tDQoNCiMjIyBDb250b2ggU29hbCAxIOKAkyBGbGlwcGluZyBhIENvaW4gMyBUaW1lcw0KDQoqKlBlcnRhbnlhYW46KiogIA0KUHJvYmFiaWxpdGFzIG1lbmRhcGF0ICoqdGVwYXQgMSBoZWFkKiogZGFyaSAzIGthbGkgbGVtcGFyYW4/DQoNCkNhcmEgbWFudWFsOg0KDQotIEp1bWxhaCBwb2xhIHlhbmcgbWVuZ2hhc2lsa2FuIHRlcGF0IDEgaGVhZCA9IDMgIA0KLSBQZWx1YW5nIHRpYXAgcG9sYToNCg0KXFsNCjAuNV4zID0gMC4xMjUNClxdDQoNClRvdGFsOg0KDQpcWw0KUCA9IDMgXHRpbWVzIDAuMTI1ID0gMC4zNzUNClxdDQoNCkNlayBzeWFyYXQgYmlub21pYWwg4oaSIHNlbXVhIOKclCDihpIgKipiaW5vbWlhbCBleHBlcmltZW50KiouDQoNCi0tLQ0KDQojIyMgQ29udG9oIFNvYWwgMiDigJMgTWVuYXJpayBNYXJibGUgV2l0aCBSZXBsYWNlbWVudA0KDQpLb3RhayBiZXJpc2k6DQoNCi0gMyBwaW5rICANCi0gMiBncmVlbiAgDQotIDUgYmx1ZSAgDQpUb3RhbCA9IDEwIG1hcmJsZQ0KDQoqKlBlcnRhbnlhYW46KiogIA0KUHJvYmFiaWxpdGFzIG1lbmRhcGF0ICoqdGVwYXQgMiBncmVlbioqIGRhcmkgNSBwZW5hcmlrYW4gKip3aXRoIHJlcGxhY2VtZW50KiouDQoNClBlbHVhbmcgc3VjY2VzczoNCg0KXFsNCnAgPSBQKFx0ZXh0e2dyZWVufSkgPSBcZnJhY3syfXsxMH0gPSAwLjINClxdDQoNClBlbHVhbmcgZmFpbHVyZToNCg0KXFsNCjEgLSBwID0gMC44DQpcXQ0KDQpLYXJlbmEgcmVwbGFjZW1lbnQg4oaSIHBlbHVhbmcga29uc3RhbiDihpIgaW5kZXBlbmRlbiDihpIgKipiaW5vbWlhbCBleHBlcmltZW50KiouDQoNCkNhcmEgbWFudWFsOg0KDQpcWw0KMTAgXHRpbWVzICgwLjJeMikoMC44XjMpID0gMC4yMDQ4DQpcXQ0KDQotLS0NCg0KIyMjIFJ1bXVzIERpc3RyaWJ1c2kgQmlub21pYWwNCg0KUnVtdXMgdW11bToNCg0KXFsNClAoWD1rKSA9IFxiaW5vbXtufXtrfSBwXmsgKDEtcClee24ta30NClxdDQoNCkRpIG1hbmE6DQotIFwoIG4gXCkgPSBqdW1sYWggcGVyY29iYWFuICANCi0gXCggayBcKSA9IGp1bWxhaCBzdWNjZXNzICANCi0gXCggcCBcKSA9IHBlbHVhbmcgc3VjY2VzcyAgDQotIFwoIFxiaW5vbXtufXtrfSBcKSA9IGtvbWJpbmFzaQ0KDQotLS0NCg0KIyMjIENvbnRvaCBNZW5nZ3VuYWthbiBSdW11cyAoS2FzdXMgTWFyYmxlKQ0KDQpEaWJlcmlrYW46DQotIFwoIG4gPSA1IFwpDQotIFwoIGsgPSAyIFwpDQotIFwoIHAgPSAwLjIgXCkNCg0KXFsNClAgPSBcYmlub217NX17Mn0gKDAuMileMiAoMC44KV4zDQpcXQ0KDQpIYXNpbDoNCg0KXFsNClAgPSAwLjIwNDgNClxdDQoNCi0tLQ0KDQojIyMgS2VzaW1wdWxhbiBVdGFtYQ0KDQotIEJpbm9taWFsIG1lbWJ1dHVoa2FuICoqNCBzeWFyYXQqKjogZml4ZWQgbiwgZHVhIG91dGNvbWUsIHBlbHVhbmcga29uc3RhbiwgaW5kZXBlbmRlbi4gIA0KLSBCZXJndW5hIHVudHVrIG1lbmdoaXR1bmcgcGVsdWFuZyBqdW1sYWggc3VjY2VzcyB0ZXJ0ZW50dS4gDQotIENhcmEgY2VwYXQgbWVuZ2hpdHVuZyDihpIgcnVtdXMgYmlub21pYWwuIA0KLSBSdW11czoNCg0KXFsNClAoWD1rKT1cYmlub217bn17a31wXntrfSgxLXApXntuLWt9DQpcXQ0KDQoNCjwvZGl2Pg0KIyBCaW5vbWlhbCBEaXN0cmlidXRpb25zDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9ZMi12U1dGbWd5ST9zaT1PYk1PbjZvY3l0VnZZUW1tIikNCmBgYA0KPGRpdiBjbGFzcz0ibWF0ZXJpLWJveCI+DQoNCg0KIyBEaXN0cmlidXNpIEJpbm9taWFsDQoNCkRpc3RyaWJ1c2kgYmlub21pYWwgYWRhbGFoIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzICoqZGlza3JpdCoqIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmdoaXR1bmcganVtbGFoIGtlYmVyaGFzaWxhbiBkYWxhbSBzZWp1bWxhaCBwZXJjb2JhYW4geWFuZyAqKmluZGVwZW5kZW4qKiwgZGVuZ2FuICoqZHVhIGtlbXVuZ2tpbmFuIGhhc2lsIHNhamEqKiAoc3Vrc2VzL2dhZ2FsKSBkYW4gcHJvYmFiaWxpdGFzIHN1a3NlcyB0ZXRhcCBwYWRhIHNldGlhcCBwZXJjb2JhYW4uDQoNCi0tLQ0KDQojIyMgS29uc2VwIERhc2FyIGRhbiBGb3JtdWxhIEJpbm9taWFsDQoNCkRpc3RyaWJ1c2kgYmlub21pYWwgZGlndW5ha2FuIHVudHVrIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIG1lbmRhcGF0a2FuIHRlcGF0ICoqayBrZWJlcmhhc2lsYW4qKiBkYWxhbSAqKm4gcGVyY29iYWFuKiouDQoNCiMjIyBSdW11czoNCg0KXFsNClAoWCA9IGspID0gXGJpbm9te259e2t9IHBeayAoMS1wKV57bi1rfSA9IFxmcmFje24hfXtrIShuLWspIX0gcF5rICgxLXApXntuLWt9DQpcXQ0KDQojIyMgS2V0ZXJhbmdhbjoNCg0KLSBga2AgOiBqdW1sYWgga2ViZXJoYXNpbGFuIHlhbmcgZGlpbmdpbmthbiAgDQotIGBuYCA6IGp1bWxhaCB0b3RhbCBwZXJjb2JhYW4gIA0KLSBgcGAgOiBwcm9iYWJpbGl0YXMga2ViZXJoYXNpbGFuIHBhZGEgc2F0dSBwZXJjb2JhYW4gIA0KLSBgMS1wYCA6IHByb2JhYmlsaXRhcyBrZWdhZ2FsYW4gIA0KDQojIyMgQ29udG9oOg0KDQpNZWxlbXBhciBrb2luIDIga2FsaSAoYG4gPSAyYCksIGtlYmVyaGFzaWxhbiBhZGFsYWggbXVuY3VsbnlhIGdhbWJhciAoSCwgYHAgPSAwLjVgKS4NCg0KfCBrIHwgUHJvYmFiaWxpdGFzIFAoWD1rKSB8DQp8LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDAgfCAwLjI1ICAgICAgICAgICAgICB8DQp8IDEgfCAwLjUwICAgICAgICAgICAgICB8DQp8IDIgfCAwLjI1ICAgICAgICAgICAgICB8DQoNCj4gKipDYXRhdGFuOioqIERpc3RyaWJ1c2kgYmlub21pYWwgbWVuZ2FzdW1zaWthbiBwZXJjb2JhYW4gaW5kZXBlbmRlbiwgYXJ0aW55YSBoYXNpbCBzYXR1IHBlcmNvYmFhbiAqKnRpZGFrIG1lbWVuZ2FydWhpKiogaGFzaWwgcGVyY29iYWFuIGxhaW4uDQoNCi0tLQ0KDQojIyMgVmlzdWFsaXNhc2kgRGlzdHJpYnVzaSBCaW5vbWlhbA0KDQpEaXN0cmlidXNpIGJpbm9taWFsIGJpYXNhbnlhIGRpdmlzdWFsaXNhc2lrYW4gZGVuZ2FuIGRpYWdyYW0gYmF0YW5nICgqKmJhciBjaGFydCoqKToNCg0KLSAqKlN1bWJ1IFgqKjoganVtbGFoIGtlYmVyaGFzaWxhbiAoYGsgPSAwLDEsMiwuLi4sbmApICANCi0gKipTdW1idSBZKio6IHByb2JhYmlsaXRhcyBtYXNpbmctbWFzaW5nIGBrYCAgDQoNCioqQ29udG9oIHBsb3QgZGkgUjoqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQ29udG9oIHZpc3VhbGlzYXNpIGJpbm9taWFsDQpuIDwtIDINCnAgPC0gMC41DQprIDwtIDA6bg0KcHJvYiA8LSBkYmlub20oaywgc2l6ZSA9IG4sIHByb2IgPSBwKQ0KDQpiYXJwbG90KHByb2IsIG5hbWVzLmFyZyA9IGssIGNvbCA9ICJza3libHVlIiwNCiAgICAgICAgbWFpbiA9ICJEaXN0cmlidXNpIEJpbm9taWFsIChuPTIsIHA9MC41KSIsDQogICAgICAgIHhsYWIgPSAiSnVtbGFoIEtlYmVyaGFzaWxhbiAoaykiLA0KICAgICAgICB5bGFiID0gIlByb2JhYmlsaXRhcyBQKFg9aykiKQ0KaW52aXNpYmxlKCkNCmBgYA0KIyMjIFBhcmFtZXRlciBEaXN0cmlidXNpIEJpbm9taWFsDQoNClZhcmlhYmVsIGFjYWsgXChYIFxzaW0gXHRleHR7Qmlub21pYWx9KG4sIHApXCkgbWVtaWxpa2kgcGFyYW1ldGVyIHNlYmFnYWkgYmVyaWt1dDoNCg0KKipNZWFuIChSYXRhLXJhdGEsIM68KToqKg0KDQpcWw0KXG11ID0gbiBcY2RvdCBwDQpcXQ0KDQoqKlZhcmlhbnMgKM+DwrIpOioqDQoNClxbDQpcc2lnbWFeMiA9IG4gXGNkb3QgcCBcY2RvdCAoMSAtIHApDQpcXQ0KDQoqKlNpbXBhbmdhbiBiYWt1ICjPgyk6KioNCg0KXFsNClxzaWdtYSA9IFxzcXJ0e24gXGNkb3QgcCBcY2RvdCAoMSAtIHApfQ0KXF0NCg0KQWthciBrdWFkcmF0IGRhcmkgdmFyaWFucywgbWVuZ3VrdXIgc2ViYXJhbiBkYXRhIHNlY2FyYSBwcmFrdGlzLg0KDQojIyMgUGVuZ2FydWggTmlsYWkgcCBkYW4gbiB0ZXJoYWRhcCBCZW50dWsgRGlzdHJpYnVzaQ0KDQpQZW5nYXJ1aCBwIChwcm9iYWJpbGl0YXMga2ViZXJoYXNpbGFuKToNCg0KcCA9IDAuNSDihpIgZGlzdHJpYnVzaSBzaW1ldHJpcw0KDQpwIDwgMC41IOKGkiBkaXN0cmlidXNpIG1lbmNlbmcga2Uga2FuYW4gKGxlYmloIGJhbnlhayBoYXNpbCBrZWNpbCkNCg0KcCA+IDAuNSDihpIgZGlzdHJpYnVzaSBtZW5jZW5nIGtlIGtpcmkgKGxlYmloIGJhbnlhayBoYXNpbCBiZXNhcikNCg0KUGVuamVsYXNhbjogZGF0YSBjZW5kZXJ1bmcgbWVuZ2Vsb21wb2sgZGkgc2VraXRhciBtZWFuIM68ID0gbipwLg0KDQpQZW5nYXJ1aCBuIChqdW1sYWggcGVyY29iYWFuKToNCg0KU2VtYWtpbiBiZXNhciBuLCBkaXN0cmlidXNpIGJpbm9taWFsIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbA0KDQpVbnR1ayBkaXN0cmlidXNpIHNpbWV0cmlzIChwID0gMC41KSwgcGVuaW5na2F0YW4gbiBrZWNpbCBzdWRhaCBjdWt1cA0KDQpVbnR1ayBkaXN0cmlidXNpIG1lbmNlbmcgKHAg4omgIDAuNSksIGRpYnV0dWhrYW4gbiBsZWJpaCBiZXNhciBhZ2FyIGJlbnR1ayBtZW5kZWthdGkgbm9ybWFsDQoNCiMjIyBQZW5kZWthdGFuIE5vcm1hbCBwYWRhIEJpbm9taWFsDQoNCkppa2EgbiBjdWt1cCBiZXNhciwgZGlzdHJpYnVzaSBiaW5vbWlhbCBkYXBhdCBkaWRla2F0aSBkZW5nYW4gZGlzdHJpYnVzaSBub3JtYWwuDQoNCktvbmRpc2kgdW11bToNCg0K8J2Rmw0K4ouFDQrwnZGdDQriiaUNCjEwDQpkYW4NCvCdkZsNCuKLhQ0KKA0KMQ0K4oiSDQrwnZGdDQopDQriiaUNCjEwDQpu4ouFcOKJpTEwZGFubuKLhSgx4oiScCniiaUxMA0KDQpDYXRhdGFuOiBCZWJlcmFwYSBzdW1iZXIgbWVuZ2d1bmFrYW4gYW5na2EgNSBzZWJhZ2FpIHBhdG9rYW4uIFNlc3VhaWthbiBkZW5nYW4gYnVrdSBhdGF1IGluc3RydWt0dXIuDQoNCiMjIyBSaW5na2FzYW4gLyBSZWNhcA0KDQotIHAgbWVuZ29udHJvbCBiZW50dWsgZGlzdHJpYnVzaToNCg0KLSBwID0gMC41IOKGkiBzaW1ldHJpcw0KDQotIHAgPCAwLjUg4oaSIG1lbmNlbmcga2Uga2FuYW4NCg0KLSBwID4gMC41IOKGkiBtZW5jZW5nIGtlIGtpcmkNCg0KLSBuIG1lbXBlbmdhcnVoaSBrZWRla2F0YW4gZGVuZ2FuIGRpc3RyaWJ1c2kgbm9ybWFsOiBzZW1ha2luIGJlc2FyIG4g4oaSIHNlbWFraW4gbWVuZGVrYXRpIG5vcm1hbA0KDQotIFBhcmFtZXRlciBQZW50aW5nOg0KDQotTWVhbiAozrwpID0gbipwDQoNCi1WYXJpYW5zICjPg8KyKSA9IG5wKDEtcCkNCg0KLVNpbXBhbmdhbiBiYWt1ICjPgykgPSDiiJpbbnAoMS1wKV0NCg0KLVBlbmRla2F0YW4gTm9ybWFsOiBkYXBhdCBkaWd1bmFrYW4gamlrYSBucCDiiaUgMTAgZGFuIG4oMS1wKSDiiaUgMTANCg0KPC9kaXY+DQoNCg0KIyBSZWZlcmVuY2VzDQojIyBSZWZlcmVuc2kgVmlkZW8NCg0KIyMjIEZ1bmRhbWVudGFsIENvbmNlcHQNCi0gW1BlbWJlbGFqYXJhbiBQcm9iYWJpbGl0YXMgMV0oaHR0cHM6Ly95b3V0dS5iZS95bmpIS0JDaUdYWSkNCg0KIyMjIEluZGVwZW5kZW50IGFuZCBEZXBlbmRlbnQNCi0gW1BlbWJlbGFqYXJhbiBQcm9iYWJpbGl0YXMgMl0oaHR0cHM6Ly95b3V0dS5iZS9MUy1faWhES3IyTSkNCg0KIyMjIFVuaW9uIG9mIGV2ZW50DQotIFtQZW1iZWxhamFyYW4gUHJvYmFiaWxpdGFzIDNdKGh0dHBzOi8veW91dHUuYmUvdnFLQWJoQ3FTVGMpDQoNCiMjIyBFeGNsdXNpdmUgYW5kIEV4Y2hhdXN0aXZlDQotIFtQZW1iZWxhamFyYW4gUHJvYmFiaWxpdGFzIDRdKGh0dHBzOi8veW91dHUuYmUvZjdhZ1R2OW5BNWspDQoNCiMjIyBCaW5vbWlhbCBFeHNwZXJpbWVudA0KW1BlbWJlbGFqYXJhbiBQcm9iYWJpbGl0YXMgNV0oaHR0cHM6Ly95b3V0dS5iZS9uUnVRQXRhakpZaykNCg0KIyMjIEJpbm9taWFsIERpc3RyaWJ1dGlvbg0KLSBbUGVtYmVsYWphcmFuIFByb2JhYmlsaXRhcyA2XShodHRwczovL3lvdXR1LmJlL1kyLXZTV0ZtZ3lJKQ0KDQojIyBSZWZlcmVuc2kgbGFpbg0KIA0KIyMjIFJlZmVyZW5zaSBNYXRlcmkgUHJvYmFiaWxpdGFzDQoNCi0gKipGdW5kYW1lbnRhbCBDb25jZXB0OiBQcm9iYWJpbGl0YXMqKiAgDQogICBbUHJvYmFiaWxpdGFzIOKAkyBXaWtpcGVkaWEgSW5kb25lc2lhXShodHRwczovL2lkLndpa2lwZWRpYS5vcmcvd2lraS9Qcm9iYWJpbGl0YXMpDQoNCi0gKipJbmRlcGVuZGVudCBkYW4gRGVwZW5kZW50IEV2ZW50cyAoUHJvYmFiaWxpdGFzIEJlcnN5YXJhdCAvIEluZGVwZW5kZW5zaSkqKiAgDQogICBbUHJvYmFiaWxpdGFzIEJlcnN5YXJhdCwgSW5kZXBlbmRlbnNpIGRhbiBUZW9yZW1hIEJheWVzIOKAkyBUYWRiaXI6IEp1cm5hbCBNYW5hamVtZW4gUGVuZGlkaWthbiBJc2xhbSAoMjAxNildKGh0dHBzOi8vam91cm5hbC5pYWluZ29yb250YWxvLmFjLmlkL2luZGV4LnBocC90am1waS9hcnRpY2xlL3ZpZXcvMTEzNSkgOmNvbnRlbnRSZWZlcmVuY2Vbb2FpY2l0ZTowXXtpbmRleD0wfQ0KDQotICoqVW5pb24gb2YgRXZlbnRzIC8gQXR1cmFuIFBlbmp1bWxhaGFuIFByb2JhYmlsaXRhcyoqICANCiAgIFtEYXNhci1EYXNhciBQZWx1YW5nOiBLYXBhbiBIYXJ1cyBNZW5qdW1sYWhrYW4gKEFUQVUpIGRhbiBLYXBhbiBNZW5nYWxpa2FuIChEQU4pPyDigJMgVU5FU0EgRk1JUEFdKGh0dHBzOi8vcGVuZGlkaWthbi1tYXRlbWF0aWthLmZtaXBhLnVuZXNhLmFjLmlkL3Bvc3QvZGFzYXItZGFzYXItcGVsdWFuZy1rYXBhbi1oYXJ1cy1tZW5qdW1sYWhrYW4tYXRhdS1kYW4ta2FwYW4tbWVuZ2FsaWthbi1kYW4pIDpjb250ZW50UmVmZXJlbmNlW29haWNpdGU6MV17aW5kZXg9MX0NCg0KLSAqKkV4Y2x1c2l2ZSBFdmVudHMgKEtlamFkaWFuIFNhbGluZyBMZXBhcyAvIE11dHVhbGx5IEV4Y2x1c2l2ZSkqKiAgDQogICBbUGVsdWFuZyBLZWphZGlhbiBTYWxpbmcgTGVwYXMgZGFuIENvbnRvaCBTb2FsbnlhIOKAkyBaZW5pdXNdKGh0dHBzOi8vd3d3Lnplbml1cy5uZXQvYmxvZy9wZWx1YW5nLWtlamFkaWFuLXNhbGluZy1sZXBhcy8pDQoNCg0KLSAqKkJpbm9taWFsIEV4cGVyaW1lbnQqKiAgDQogICBbRGlzdHJpYnVzaSBiaW5vbWlhbCDigJMgV2lraXBlZGlhIEluZG9uZXNpYV0oaHR0cHM6Ly9pZC53aWtpcGVkaWEub3JnL3dpa2kvRGlzdHJpYnVzaV9iaW5vbWlhbCkNCg0KLSAqKkJpbm9taWFsIERpc3RyaWJ1dGlvbiAoRGV0YWlsOiBtZWFuLCB2YXJpYW5zLCBub3JtYWwgYXBwcm94aW1hdGlvbikqKiAgDQogICBbRGlzdHJpYnVzaSBiaW5vbWlhbCDigJMgV2lraXBlZGlhIEluZG9uZXNpYV0oaHR0cHM6Ly9pZC53aWtpcGVkaWEub3JnL3dpa2kvRGlzdHJpYnVzaV9iaW5vbWlhbCkNCg0KDQo=