
. Pendahuluan
Seringkali kita terjebak pada satu angka rata-rata misalnya transaksi
di angka 12.0 atau konversi sebesar 22%. Namun, dalam dunia nyata, satu
angka saja bisa menipu. Pertanyaan besarnya adalah: Seberapa jauh kita
bisa menjamin bahwa angka tersebut bukan sekadar kebetulan.
Melalui 5 studi kasus ini, kita akan melihat bagaimana Confidence
Interval (CI) bekerja sebagai “jaring pengaman” dalam pengambilan
keputusan. Kita tidak hanya bicara soal hitungan matematis, tapi soal
bagaimana kita mengelola risiko di tengah ketidakpastian data.
Yang kita pelajari dari studi kasus ini adalah: 1. Trade-off Antara
Keyakinan dan Presisi (Z-Test): Kita akan melihat kenapa saat kita ingin
99% yakin tidak salah bicara, kita harus rela memberikan rentang angka
yang lebih lebar. Ini adalah harga dari sebuah kepastian.
Menghadapi Realita Data Kecil (T-Test): Tidak selamanya kita
punya data yang sempurna. Kita akan mempelajari bagaimana tetap objektif
meski hanya memiliki sedikit sampel, tanpa menjadi terlalu percaya diri
(overconfident).
Validasi Strategi (A/B Testing): Bukan cuma soal perasaan desain
baru lebih bagus, tapi bagaimana kita membuktikan secara statistik bahwa
performa kita memang sudah jauh melampaui standar lama.
Keamanan Batas Bawah (One-Side CI): Dalam bisnis, yang paling
menakutkan adalah performa yang anjlok. Kita akan menggunakan pendekatan
One-Sided untuk memastikan bahwa peluang kita jatuh di bawah target
hampir nol persen.
Intinya, laporan ini adalah tentang bagaimana kita mengubah data
mentah menjadi sebuah jaminan. Kita tidak hanya menebak, kita sedang
memetakan ruang risiko agar setiap langkah yang diambil memiliki
landasan yang kuat.
. Study Case 1: CI MEAN
(Z-TEST)
Dalam mengolah data, angka 12.0 yang kita temukan sebenarnya hanyalah
sebuah potret sesaat, atau yang dalam statistik dikenal sebagai Point
Estimate. Bayangkan kita sedang mencoba menebak rata-rata pengeluaran
ribuan orang hanya dengan bertanya pada 100 orang saja. Tentu ada faktor
keberuntungan atau kebetulan yang terbawa dalam sampel tersebut. Jika
kita hanya menyodorkan angka tunggal 12.0 kepada pimpinan atau klien,
kita sebenarnya sedang mengambil risiko besar karena angka itu sangat
mungkin bergeser jika kita mengambil kelompok sampel yang berbeda di
waktu yang berbeda.
Di sinilah Confidence Interval (CI) bekerja sebagai Dinding
Pelindung. Alih-alih memberikan angka tunggal yang kaku, kita membangun
sebuah zona nyaman yang jauh lebih masuk akal secara ilmiah untuk
menaungi ketidakpastian tersebut.
- Dilema Antara Kepastian dan Ketajaman (The Trade-off) Ada fenomena
unik yang terlihat jelas pada Tabel 1.1: ketika kita mencoba menaikkan
level kepercayaan dari 90% ke 99%, rentang angkanya justru semakin
melebar, dari yang semula cukup sempit menjadi 11.11 hingga 12.88.
Ini bukanlah sebuah kesalahan hitung, melainkan berlakunya Hukum
Trade-off Kepastian. Analoginya begini: Jika saya meminta Anda menebak
suhu udara hari ini dan Anda ingin jawaban Anda 100% benar, Anda mungkin
akan berkata, Suhu hari ini berada di antara -50°C sampai 100°C.
Rentangnya sangat lebar dan mungkin terasa tidak terlalu spesifik
(tumpul), tapi Anda hampir mustahil salah. Sebaliknya, jika Anda ingin
terlihat sangat hebat dan presisi, Anda mungkin menebak “Antara 28.5°C
sampai 28.7°C.” Angka ini sangat tajam dan spesifik, tapi kemungkinan
Anda salah sangatlah tinggi karena ruang geraknya terlalu sempit.
Dalam dunia bisnis dan pengambilan keputusan, jika kita ingin 99%
yakin bahwa estimasi kita tidak meleset, kita harus berlapang dada
menerima rentang yang lebih luas. Kita secara sadar menukar “ketajaman”
angka demi mendapatkan keamanan informasi yang lebih solid dan bisa
dipertanggungjawabkan secara metodologi.
- Membedah Visualisasi: Titik Janji vs Ruang Risiko Pada visualisasi
yang tersaji di bawah, terdapat dua komponen visual utama yang merangkum
seluruh logika analisis kita:
Titik Merah (The Point): Inilah yang saya sebut sebagai Titik Janji.
Ini adalah hasil murni dari data lapangan yang kita miliki saat ini. Ia
menjadi pusat atau jangkar dari seluruh perhitungan.
Garis Horizontal (The Margin of Error): Inilah Ruang Risiko kita.
Semakin panjang garis horizontal ini, berarti semakin besar pula tingkat
ketidakpastian yang kita akui secara jujur. Garis ini memberi tahu kita
seberapa besar ruang gerak yang dimiliki perusahaan sebelum sebuah tren
dianggap benar-benar menyimpang jauh dari target yang diharapkan.
Tabel 1.1: Confidence Interval Mean (Z-Test, Sigma Diketahui)
|
Tingkat_Kepercayaan
|
Z_Score
|
Margin_of_Error
|
Lower_Bound
|
Upper_Bound
|
|
90%
|
1.6449
|
0.7402
|
11.2598
|
12.7402
|
|
95%
|
1.9600
|
0.8820
|
11.1180
|
12.8820
|
|
99%
|
2.5758
|
1.1591
|
10.8409
|
13.1591
|

Grafik ini memperlihatkan bagaimana Confidence Interval bekerja untuk
memitigasi risiko dari angka tunggal 12.0:
Titik Merah (Estimasi Titik): Ini adalah angka rata-rata transaksi
murni dari sampel kita (12.0). Di sinilah posisi pusat data berada.
Garis Horizontal (Margin Kesalahan): Anda bisa melihat ada tiga
tingkatan garis. Semakin ke atas (menuju 99%), garisnya semakin panjang.
Ini menunjukkan bahwa untuk mendapatkan keyakinan yang lebih tinggi,
kita harus siap menerima rentang kemungkinan yang lebih lebar.
Warna sebagai Indikator: Warna Kuning (90%) menunjukkan estimasi yang
lebih agresif sedangkan warna Merah (99%) menunjukkan posisi yang lebih
berhati-hati atau “aman” bagi perusahaan.
. Study Case 2: CI MEAN
(T-TEST)
Jika pada kasus pertama kita memiliki kemewahan informasi, di Kasus 2
ini kita berhadapan dengan kenyataan pahit yang sering terjadi di
lapangan: Data yang sangat sedikit. Dengan hanya 12 sampel waktu
penyelesaian tugas, kita tidak bisa lagi menggunakan Z-Test. Mengapa?
Karena kita tidak mengetahui standar deviasi populasi (\(\sigma\)) secara pasti, dan ukuran sampel
yang kecil membuat estimasi kita menjadi jauh lebih sensitif terhadap
kesalahan.
Di sinilah t-Test (Distribusi-t) hadir sebagai pahlawan. Jika Z-Test
adalah pengukur yang kaku, maka Distribusi-t adalah versi yang lebih
sabar dan berhati-hati.
1.Distribusi-t memiliki “Ekor yang Lebih Tebal” Dalam statistik, kita
mengenal istilah Fat Tails atau ekor yang lebih tebal pada kurva t.
Secara matematis, ini adalah cara t-distribution untuk mengakomodasi
ketidaktahuan kita. Karena sampelnya cuma sedikit, risiko adanya data
pencilan (outlier) yang merusak rata-rata menjadi sangat besar.
Distribusi-t memberikan ruang gerak tambahan dengan memperlebar
intervalnya dibandingkan Z-Test. Ini adalah bentuk kerendahhatian
statistik: Karena saya hanya tahu sedikit, saya tidak akan memberikan
janji yang terlalu berani.
- Makna di Balik Angka: Stabilitas di Tengah Keterbatasan Rata-rata
penyelesaian tugas tim kita adalah 8.4 menit. Namun, perhatikan rentang
95% kita yang berada di angka 8.08 hingga 8.71.
Meskipun sampelnya minim, interval yang kita hasilkan tergolong cukup
sempit. Apa artinya bagi bisnis? Ini adalah kabar baik. Jarak antar
batas yang sempit menunjukkan bahwa variansi data kita rendah. Dengan
kata lain, kinerja tim Anda sangat konsisten dan stabil; perbedaan waktu
pengerjaan antar anggota tim tidak terpaut jauh. Kita bisa memprediksi
masa depan dengan lebih tenang karena efisiensi tim terbukti bukan
sekadar fluktuasi acak.
- Visualisasi 2.1: Konsistensi dalam Balutan Teal Berbeda dengan Case
1 yang berwarna Coral, di sini kita menggunakan warna Teal untuk
melambangkan kestabilan. Garis putus-putus di tengah adalah performa
rata-rata saat ini, sementara garis horizontal Teal menunjukkan seberapa
jauh kita bersedia menoleransi ketidakpastian sebelum performa tim
dianggap menurun.
Tabel 2.1: Confidence Interval Mean (t-Test, Sigma Tidak Diketahui)
|
Tingkat_Kepercayaan
|
T_Score
|
Margin_of_Error
|
Lower_Bound
|
Upper_Bound
|
|
90%
|
1.7959
|
0.2182
|
8.2401
|
8.6766
|
|
95%
|
2.2010
|
0.2675
|
8.1909
|
8.7258
|
|
99%
|
3.1058
|
0.3774
|
8.0809
|
8.8357
|

Grafik ini menggambarkan bagaimana tim Anda bekerja di tengah
keterbatasan data. Karena kita hanya punya 12 sampel, kita menggunakan
pendekatan t-Test yang lebih hati-hati:
Warna Teal (Stabilitas): Gradasi warna Teal menunjukkan tingkat
“kewaspadaan” kita. Semakin gelap warnanya (99%), semakin lebar jaring
pengaman yang kita pasang untuk mengantisipasi ketidakpastian.
Rentang Garis yang Sempit: Perhatikan bahwa meskipun kita menaikkan
tingkat kepercayaan ke 99%, jarak antara angka 8.01 hingga 8.79 menit
masih tergolong rapat. Ini adalah bukti visual bahwa performa tim Anda
sangat konsisten; tidak ada perbedaan mencolok antara anggota tim yang
bekerja sangat cepat atau sangat lambat.
Titik Merah (Rata-rata 8.4): Inilah titik keseimbangan tim saat ini.
Angka di ujung garis (Label) menunjukkan batas aman yang bisa kita
janjikan kepada manajemen.
. Study Case 3: CI
PROPORSI (A/B TESTING)
Pada kasus ketiga ini, fokus kita bergeser. Kita tidak lagi berbicara
tentang nilai rata-rata, melainkan tentang peluang keberhasilan.
Skenarionya adalah sebuah uji coba desain tombol Call to Action (CTA)
baru. Pertanyaan kritisnya sederhana: “Apakah desain baru ini
benar-benar membawa perubahan, atau hanya kebetulan sesaat?”
Kita memiliki standar lama (baseline) sebesar 20%. Di sinilah
statistik bekerja untuk memisahkan antara harapan kosong dengan bukti
nyata.
- Visualisasi Kemenangan: Melampaui Garis Musuh Jika Anda melihat
Visualisasi 3.1 di bawah, ada garis kuning vertikal yang berdiri tegak
di angka 20%. Garis ini adalah “musuh” kita—titik di mana performa lama
berada.
Hal yang luar biasa adalah seluruh interval kepercayaan kita (garis
ungu), bahkan pada tingkat keyakinan 99% sekalipun, berada sepenuhnya di
sisi kanan garis kuning tersebut. Secara statistik, ini adalah bukti
yang tidak terbantahkan bahwa desain baru ini memiliki performa yang
lebih unggul. Tidak ada area yang tumpang tindih (overlap), yang berarti
kemungkinan kegagalan desain baru untuk menyamai desain lama hampir
tidak ada.
- Kesimpulan Strategis: Lampu Hijau untuk Investasi Data menunjukkan
bahwa rata-rata klik sampel kita berada di angka 22%. Namun, yang paling
penting bagi manajemen adalah batas bawahnya.
Tabel 3.1: Confidence Interval Proporsi (Z-Test) untuk CTA Baru
|
Tingkat_Kepercayaan
|
Z_Score
|
Margin_of_Error
|
Lower_Bound
|
Upper_Bound
|
|
90%
|
1.6449
|
0.0305
|
0.1895
|
0.2505
|
|
95%
|
1.9600
|
0.0363
|
0.1837
|
0.2563
|
|
99%
|
2.5758
|
0.0477
|
0.1723
|
0.2677
|

Visualisasi ini menunjukkan perbandingan antara performa desain baru
dengan standar lama (20%):
Garis Kuning (Target Lama): Ini adalah batas performa desain lama.
Jika garis ungu berada di sebelah kanan garis kuning ini, artinya desain
baru lebih unggul.
Garis Ungu (Interval Kepercayaan): Menunjukkan rentang performa
desain baru. Hebatnya, bahkan pada tingkat kepercayaan 99%, seluruh
garis ungu tetap berada di sebelah kanan target 20%.
Titik Merah: Merupakan rata-rata konversi sampel kita (22%).
Angka-angka di ujung garis (seperti 17.5% atau 26.5%) adalah estimasi
terburuk dan terbaik yang mungkin terjadi.
. Study Case 4:
PERBANDINGAN Z VS T
Di sini kita mengadu dua cara berpikir. Tim A (Z-Test) yang cenderung
optimis dan Tim B (t-Test) yang lebih waspada. Perbedaan keduanya bukan
cuma soal angka, tapi soal seberapa besar risiko yang berani kita
ambil.
Bahaya Terlalu Percaya Diri (Overconfidence) Perhatikan garis
Coral (Tim A). Intervalnya paling sempit dan terlihat sangat presisi.
Namun, ini adalah pendekatan yang berisiko. Tim A berasumsi kita tahu
standar deviasi populasi secara pasti. Di dunia nyata, asumsi ini
seringkali terlalu berani. Jika kita hanya mengandalkan interval yang
sempit ini, kita bisa terjebak dalam rasa aman palsu. Jika data asli di
lapangan ternyata lebih bergejolak, prediksi Tim A akan langsung
meleset.
Keamanan di Atas Segalanya (Safety Margin) Sebaliknya, lihat
garis Teal (Tim B). Intervalnya sedikit lebih lebar. Tim B sadar bahwa
dengan hanya 45 sampel, ada ketidakpastian yang besar. Mereka
menggunakan t-Test untuk memberikan ruang gerak. Dalam manajemen risiko,
ini adalah langkah yang jauh lebih bijak. Lebih baik kita memprediksi
rentang yang sedikit lebih luas namun aman, daripada memberikan janji
angka yang sempit tapi ternyata salah.
Tabel 4.1: Perbandingan Parameter Z vs T
|
Tingkat
|
Lower
|
Upper
|
Metode
|
|
90%
|
10.3038
|
10.6962
|
Tim A (Z-Test / Optimis)
|
|
95%
|
10.2663
|
10.7337
|
Tim A (Z-Test / Optimis)
|
|
99%
|
10.1928
|
10.8072
|
Tim A (Z-Test / Optimis)
|
|
90%
|
10.2996
|
10.7004
|
Tim B (t-Test / Waspada)
|
|
95%
|
10.2597
|
10.7403
|
Tim B (t-Test / Waspada)
|
|
99%
|
10.1789
|
10.8211
|
Tim B (t-Test / Waspada)
|

Grafik ini memperlihatkan perbedaan antara estimasi yang terlalu
berani (Tim A) dengan estimasi yang waspada (Tim B):
Lebar Interval: Garis Teal (Tim B) terlihat lebih lebar dibandingkan
garis Coral (Tim A). Ini adalah safety margin atau ruang napas ekstra
yang diberikan oleh t-test karena kita hanya memiliki 45 sampel.
Titik Tengah: Titik putih di tengah adalah rata-rata latensi kita
(10.5 ms). Garis yang memanjang menunjukkan seberapa jauh kemungkinan
angka tersebut bisa meleset.
Tingkat Kepercayaan: Semakin tinggi persentasenya (90% ke 99%),
garisnya semakin panjang. Artinya, untuk mendapatkan keyakinan 99%, kita
harus siap dengan rentang risiko yang lebih luas.
Intinya Visualisasi ini membuktikan bahwa Tim B (t-test) lebih aman
untuk dijadikan patokan bisnis karena mereka tidak meremehkan
ketidakpastian data di lapangan.
. Study Case 5:
ONE-SIDED LOWER CI
Dalam bisnis, seringkali kita tidak peduli jika performa kita terlalu
bagus (melebihi target). Kita hanya takut jika performa kita anjlok (di
bawah target). Inilah gunanya One-Sided Lower CI.
Efisiensi Statistik: Dibandingkan menggunakan dua arah (upper dan
lower), one-sided memberikan fokus penuh pada batas bawah. Ini membuat
deteksi terhadap kegagalan target menjadi lebih tajam.
Dalam operasional sehari-hari, kita biasanya santai saja kalau
performa tiba-tiba meledak melampaui target. Yang justru bikin pusing
adalah kalau performa kita “anjlok” sampai di bawah standar. Di sinilah
One-Sided Lower CI berperan sebagai penyelamat.
Sederhananya, dibanding kita repot-repot menghitung rentang atas dan
bawah, pendekatan satu arah ini bikin kita fokus penuh buat menjaga
lantai performa. Hasilnya, Kita jadi punya radar yang jauh lebih tajam
untuk mendeteksi risiko kegagalan target.
Pembuktian Target: Target kita adalah 70%. Dengan tingkat kepercayaan
99%, batas bawah kita berada di 70.8%.
Tabel 5.1: Analisis Safety Floor (Batas Bawah)
|
Tingkat_Kepercayaan
|
Z_Score
|
Lower_Bound
|
Status_Target
|
|
90%
|
1.2816
|
0.7201
|
AMAN
|
|
95%
|
1.6449
|
0.7145
|
AMAN
|
|
99%
|
2.3263
|
0.7039
|
AMAN
|

Grafik di atas menunjukkan posisi Lantai Terendah dari performa kita.
Garis hijau tebal di angka 70% adalah batas aman yang tidak boleh kita
langgar. Perhatikan bahwa semua titik diamond (skenario terburuk kita)
berada di sebelah kanan garis hijau tersebut.
Bahkan pada tingkat keyakinan paling ekstrem (99%), titik terendah
kita masih tertahan di 70.8%. Ini adalah bukti visual yang sangat kuat
bahwa proyek ini punya margin keamanan yang cukup untuk menghadapi
gejolak pasar, sehingga kita bisa melangkah ke tahap selanjutnya dengan
percaya diri.
. Referensi
1 . McClave, J. T., Benson, P. G., & Sincich, T. (2021).
Statistics for Business and Economics (14th ed.). Pearson. (Materi:
Interval Estimation based on Z-distribution and the concept of
Confidence Levels).
2 . Black, K. (2019). Business Statistics: For Contemporary Decision
Making. Wiley.
3 . McClave, J. T., Benson, P. G., & Sincich, T. (2021).
Statistics for Business and Economics (14th ed.). Pearson. (Materi:
Small-Sample Confidence Intervals for a Population Mean:
t-Statistic).
4 . McClave, J. T., Benson, P. G., & Sincich, T. (2021).
Statistics for Business and Economics (14th ed.). Pearson. (Materi:
Comparing Z-distribution and t-distribution for mean estimation).
5 . Newbold, P., Carlson, W. L., & Thorne, B. M. (2012).
Statistics for Business and Economics. Pearson.
6 . McClave, J. T., Benson, P. G., & Sincich, T. (2021).
Statistics for Business and Economics (14th ed.). Pearson. (Materi:
One-Sided Confidence Intervals for a Population Proportion).
7 . Anderson, D. R., Sweeney, D. J., Williams, T. A., Camm, J. D.,
& Cochran, J. J. (2020). Statistics for Business & Economics.
Cengage Learning.
LS0tDQp0aXRsZTogIlN0dWR5IENhc2VzIg0Kc3VidGl0bGU6ICJDb25maWRlbmNlIEludGVydmFsIH4gV2VlayAxMyINCmF1dGhvcjogIkNocmljeWVzaWEgV2lubmVybGFkeSBGcmV4aXNvdmFyYSBVdmFzIg0KZGF0ZTogIjIwMjUtMTItMTYiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUuY3NzIiAgICAgDQotLS0NCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCmxpYnJhcnkobWFnaWNrKQ0KZ2FtYmFyIDwtIGltYWdlX3JlYWQoIn4vVHVnYXMgZXN0YXRpc3Rpa2Egd2luZXIvdHVnYXMgd2VlayAxMSB+IHByb2JhYmlsaXR5IGRpc3RyaWJ1aXRpb24vZm90b18xX2pwZy5qcGciKQ0KZ2FtYmFyDQpgYGANCg0KIyAuIFBlbmRhaHVsdWFuDQoNClNlcmluZ2thbGkga2l0YSB0ZXJqZWJhayBwYWRhIHNhdHUgYW5na2EgcmF0YS1yYXRhIG1pc2FsbnlhIHRyYW5zYWtzaSBkaSBhbmdrYSAxMi4wIGF0YXUga29udmVyc2kgc2ViZXNhciAyMiUuIE5hbXVuLCBkYWxhbSBkdW5pYSBueWF0YSwgc2F0dSBhbmdrYSBzYWphIGJpc2EgbWVuaXB1LiBQZXJ0YW55YWFuIGJlc2FybnlhIGFkYWxhaDogU2ViZXJhcGEgamF1aCBraXRhIGJpc2EgbWVuamFtaW4gYmFod2EgYW5na2EgdGVyc2VidXQgYnVrYW4gc2VrYWRhciBrZWJldHVsYW4uDQoNCk1lbGFsdWkgNSBzdHVkaSBrYXN1cyBpbmksIGtpdGEgYWthbiBtZWxpaGF0IGJhZ2FpbWFuYSBDb25maWRlbmNlIEludGVydmFsIChDSSkgYmVrZXJqYSBzZWJhZ2FpICJqYXJpbmcgcGVuZ2FtYW4iIGRhbGFtIHBlbmdhbWJpbGFuIGtlcHV0dXNhbi4gS2l0YSB0aWRhayBoYW55YSBiaWNhcmEgc29hbCBoaXR1bmdhbiBtYXRlbWF0aXMsIHRhcGkgc29hbCBiYWdhaW1hbmEga2l0YSBtZW5nZWxvbGEgcmlzaWtvIGRpIHRlbmdhaCBrZXRpZGFrcGFzdGlhbiBkYXRhLg0KDQpZYW5nIGtpdGEgcGVsYWphcmkgZGFyaSBzdHVkaSBrYXN1cyBpbmkgYWRhbGFoOg0KMS4gVHJhZGUtb2ZmIEFudGFyYSBLZXlha2luYW4gZGFuIFByZXNpc2kgKFotVGVzdCk6IEtpdGEgYWthbiBtZWxpaGF0IGtlbmFwYSBzYWF0IGtpdGEgaW5naW4gOTklIHlha2luIHRpZGFrIHNhbGFoIGJpY2FyYSwga2l0YSBoYXJ1cyByZWxhIG1lbWJlcmlrYW4gcmVudGFuZyBhbmdrYSB5YW5nIGxlYmloIGxlYmFyLiBJbmkgYWRhbGFoIGhhcmdhIGRhcmkgc2VidWFoIGtlcGFzdGlhbi4NCg0KMi4gTWVuZ2hhZGFwaSBSZWFsaXRhIERhdGEgS2VjaWwgKFQtVGVzdCk6IFRpZGFrIHNlbGFtYW55YSBraXRhIHB1bnlhIGRhdGEgeWFuZyBzZW1wdXJuYS4gS2l0YSBha2FuIG1lbXBlbGFqYXJpIGJhZ2FpbWFuYSB0ZXRhcCBvYmpla3RpZiBtZXNraSBoYW55YSBtZW1pbGlraSBzZWRpa2l0IHNhbXBlbCwgdGFucGEgbWVuamFkaSB0ZXJsYWx1IHBlcmNheWEgZGlyaSAob3ZlcmNvbmZpZGVudCkuDQoNCjMuIFZhbGlkYXNpIFN0cmF0ZWdpIChBL0IgVGVzdGluZyk6IEJ1a2FuIGN1bWEgc29hbCBwZXJhc2FhbiBkZXNhaW4gYmFydSBsZWJpaCBiYWd1cywgdGFwaSBiYWdhaW1hbmEga2l0YSBtZW1idWt0aWthbiBzZWNhcmEgc3RhdGlzdGlrIGJhaHdhIHBlcmZvcm1hIGtpdGEgbWVtYW5nIHN1ZGFoIGphdWggbWVsYW1wYXVpIHN0YW5kYXIgbGFtYS4NCg0KNC4gS2VhbWFuYW4gQmF0YXMgQmF3YWggKE9uZS1TaWRlIENJKTogRGFsYW0gYmlzbmlzLCB5YW5nIHBhbGluZyBtZW5ha3V0a2FuIGFkYWxhaCBwZXJmb3JtYSB5YW5nIGFuamxvay4gS2l0YSBha2FuIG1lbmdndW5ha2FuIHBlbmRla2F0YW4gT25lLVNpZGVkIHVudHVrIG1lbWFzdGlrYW4gYmFod2EgcGVsdWFuZyBraXRhIGphdHVoIGRpIGJhd2FoIHRhcmdldCBoYW1waXIgbm9sIHBlcnNlbi4NCg0KSW50aW55YSwgbGFwb3JhbiBpbmkgYWRhbGFoIHRlbnRhbmcgYmFnYWltYW5hIGtpdGEgbWVuZ3ViYWggZGF0YSBtZW50YWggbWVuamFkaSBzZWJ1YWggamFtaW5hbi4gS2l0YSB0aWRhayBoYW55YSBtZW5lYmFrLCBraXRhIHNlZGFuZyBtZW1ldGFrYW4gcnVhbmcgcmlzaWtvIGFnYXIgc2V0aWFwIGxhbmdrYWggeWFuZyBkaWFtYmlsIG1lbWlsaWtpIGxhbmRhc2FuIHlhbmcga3VhdC4NCg0KDQoNCiMgLiBTdHVkeSBDYXNlIDE6IENJIE1FQU4gKFotVEVTVCkNCkRhbGFtIG1lbmdvbGFoIGRhdGEsIGFuZ2thIDEyLjAgeWFuZyBraXRhIHRlbXVrYW4gc2ViZW5hcm55YSBoYW55YWxhaCBzZWJ1YWggcG90cmV0IHNlc2FhdCwgYXRhdSB5YW5nIGRhbGFtIHN0YXRpc3RpayBkaWtlbmFsIHNlYmFnYWkgUG9pbnQgRXN0aW1hdGUuIEJheWFuZ2thbiBraXRhIHNlZGFuZyBtZW5jb2JhIG1lbmViYWsgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIHJpYnVhbiBvcmFuZyBoYW55YSBkZW5nYW4gYmVydGFueWEgcGFkYSAxMDAgb3Jhbmcgc2FqYS4gVGVudHUgYWRhIGZha3RvciBrZWJlcnVudHVuZ2FuIGF0YXUga2ViZXR1bGFuIHlhbmcgdGVyYmF3YSBkYWxhbSBzYW1wZWwgdGVyc2VidXQuIEppa2Ega2l0YSBoYW55YSBtZW55b2RvcmthbiBhbmdrYSB0dW5nZ2FsIDEyLjAga2VwYWRhIHBpbXBpbmFuIGF0YXUga2xpZW4sIGtpdGEgc2ViZW5hcm55YSBzZWRhbmcgbWVuZ2FtYmlsIHJpc2lrbyBiZXNhciBrYXJlbmEgYW5na2EgaXR1IHNhbmdhdCBtdW5na2luIGJlcmdlc2VyIGppa2Ega2l0YSBtZW5nYW1iaWwga2Vsb21wb2sgc2FtcGVsIHlhbmcgYmVyYmVkYSBkaSB3YWt0dSB5YW5nIGJlcmJlZGEuDQoNCkRpIHNpbmlsYWggQ29uZmlkZW5jZSBJbnRlcnZhbCAoQ0kpIGJla2VyamEgc2ViYWdhaSBEaW5kaW5nIFBlbGluZHVuZy4gQWxpaC1hbGloIG1lbWJlcmlrYW4gYW5na2EgdHVuZ2dhbCB5YW5nIGtha3UsIGtpdGEgbWVtYmFuZ3VuIHNlYnVhaCB6b25hIG55YW1hbiB5YW5nIGphdWggbGViaWggbWFzdWsgYWthbCBzZWNhcmEgaWxtaWFoIHVudHVrIG1lbmF1bmdpIGtldGlkYWtwYXN0aWFuIHRlcnNlYnV0Lg0KDQoxLiBEaWxlbWEgQW50YXJhIEtlcGFzdGlhbiBkYW4gS2V0YWphbWFuIChUaGUgVHJhZGUtb2ZmKQ0KQWRhIGZlbm9tZW5hIHVuaWsgeWFuZyB0ZXJsaWhhdCBqZWxhcyBwYWRhIFRhYmVsIDEuMToga2V0aWthIGtpdGEgbWVuY29iYSBtZW5haWtrYW4gbGV2ZWwga2VwZXJjYXlhYW4gZGFyaSA5MCUga2UgOTklLCByZW50YW5nIGFuZ2thbnlhIGp1c3RydSBzZW1ha2luIG1lbGViYXIsIGRhcmkgeWFuZyBzZW11bGEgY3VrdXAgc2VtcGl0IG1lbmphZGkgMTEuMTEgaGluZ2dhIDEyLjg4Lg0KDQpJbmkgYnVrYW5sYWggc2VidWFoIGtlc2FsYWhhbiBoaXR1bmcsIG1lbGFpbmthbiBiZXJsYWt1bnlhIEh1a3VtIFRyYWRlLW9mZiBLZXBhc3RpYW4uIEFuYWxvZ2lueWEgYmVnaW5pOiBKaWthIHNheWEgbWVtaW50YSBBbmRhIG1lbmViYWsgc3VodSB1ZGFyYSBoYXJpIGluaSBkYW4gQW5kYSBpbmdpbiBqYXdhYmFuIEFuZGEgMTAwJSBiZW5hciwgQW5kYSBtdW5na2luIGFrYW4gYmVya2F0YSwgU3VodSBoYXJpIGluaSBiZXJhZGEgZGkgYW50YXJhIC01MMKwQyBzYW1wYWkgMTAwwrBDLiBSZW50YW5nbnlhIHNhbmdhdCBsZWJhciBkYW4gbXVuZ2tpbiB0ZXJhc2EgdGlkYWsgdGVybGFsdSBzcGVzaWZpayAodHVtcHVsKSwgdGFwaSBBbmRhIGhhbXBpciBtdXN0YWhpbCBzYWxhaC4gU2ViYWxpa255YSwgamlrYSBBbmRhIGluZ2luIHRlcmxpaGF0IHNhbmdhdCBoZWJhdCBkYW4gcHJlc2lzaSwgQW5kYSBtdW5na2luIG1lbmViYWsgIkFudGFyYSAyOC41wrBDIHNhbXBhaSAyOC43wrBDLiIgQW5na2EgaW5pIHNhbmdhdCB0YWphbSBkYW4gc3Blc2lmaWssIHRhcGkga2VtdW5na2luYW4gQW5kYSBzYWxhaCBzYW5nYXRsYWggdGluZ2dpIGthcmVuYSBydWFuZyBnZXJha255YSB0ZXJsYWx1IHNlbXBpdC4NCg0KRGFsYW0gZHVuaWEgYmlzbmlzIGRhbiBwZW5nYW1iaWxhbiBrZXB1dHVzYW4sIGppa2Ega2l0YSBpbmdpbiA5OSUgeWFraW4gYmFod2EgZXN0aW1hc2kga2l0YSB0aWRhayBtZWxlc2V0LCBraXRhIGhhcnVzIGJlcmxhcGFuZyBkYWRhIG1lbmVyaW1hIHJlbnRhbmcgeWFuZyBsZWJpaCBsdWFzLiBLaXRhIHNlY2FyYSBzYWRhciBtZW51a2FyICJrZXRhamFtYW4iIGFuZ2thIGRlbWkgbWVuZGFwYXRrYW4ga2VhbWFuYW4gaW5mb3JtYXNpIHlhbmcgbGViaWggc29saWQgZGFuIGJpc2EgZGlwZXJ0YW5nZ3VuZ2phd2Fia2FuIHNlY2FyYSBtZXRvZG9sb2dpLg0KDQoyLiBNZW1iZWRhaCBWaXN1YWxpc2FzaTogVGl0aWsgSmFuamkgdnMgUnVhbmcgUmlzaWtvDQpQYWRhIHZpc3VhbGlzYXNpIHlhbmcgdGVyc2FqaSBkaSBiYXdhaCwgdGVyZGFwYXQgZHVhIGtvbXBvbmVuIHZpc3VhbCB1dGFtYSB5YW5nIG1lcmFuZ2t1bSBzZWx1cnVoIGxvZ2lrYSBhbmFsaXNpcyBraXRhOg0KDQpUaXRpayBNZXJhaCAoVGhlIFBvaW50KTogSW5pbGFoIHlhbmcgc2F5YSBzZWJ1dCBzZWJhZ2FpIFRpdGlrIEphbmppLiBJbmkgYWRhbGFoIGhhc2lsIG11cm5pIGRhcmkgZGF0YSBsYXBhbmdhbiB5YW5nIGtpdGEgbWlsaWtpIHNhYXQgaW5pLiBJYSBtZW5qYWRpIHB1c2F0IGF0YXUgamFuZ2thciBkYXJpIHNlbHVydWggcGVyaGl0dW5nYW4uDQoNCkdhcmlzIEhvcml6b250YWwgKFRoZSBNYXJnaW4gb2YgRXJyb3IpOiBJbmlsYWggUnVhbmcgUmlzaWtvIGtpdGEuIFNlbWFraW4gcGFuamFuZyBnYXJpcyBob3Jpem9udGFsIGluaSwgYmVyYXJ0aSBzZW1ha2luIGJlc2FyIHB1bGEgdGluZ2thdCBrZXRpZGFrcGFzdGlhbiB5YW5nIGtpdGEgYWt1aSBzZWNhcmEganVqdXIuIEdhcmlzIGluaSBtZW1iZXJpIHRhaHUga2l0YSBzZWJlcmFwYSBiZXNhciBydWFuZyBnZXJhayB5YW5nIGRpbWlsaWtpIHBlcnVzYWhhYW4gc2ViZWx1bSBzZWJ1YWggdHJlbiBkaWFuZ2dhcCBiZW5hci1iZW5hciBtZW55aW1wYW5nIGphdWggZGFyaSB0YXJnZXQgeWFuZyBkaWhhcmFwa2FuLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGtuaXRyKSAgICAgDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCnRhYmVsX2Flc3RoZXRpYyA8LSBmdW5jdGlvbihkYXRhLCBjYXB0aW9uX3RleHQpIHsNCiAgZGF0YSAlPiUNCiAgICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSBjYXB0aW9uX3RleHQsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUNCiAgICBrYWJsZV9zdHlsaW5nKA0KICAgICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksDQogICAgICBmdWxsX3dpZHRoID0gRiwNCiAgICAgIHBvc2l0aW9uID0gImNlbnRlciINCiAgICApICU+JQ0KICAgIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiI2IzMDAwMCIsIGNvbG9yID0gIndoaXRlIikgDQp9DQoNCiMjIERhdGENCnhfYmFyXzEgPC0gMTIuMA0Kc2lnbWFfMSA8LSA0LjUNCm5fMSA8LSAxMDANCnNlXzEgPC0gc2lnbWFfMSAvIHNxcnQobl8xKQ0KDQojIyBOaWxhaSBLcml0aXMgWg0Kel85MCA8LSBxbm9ybSgwLjk1KSAjIFotc2NvcmUgdW50dWsgOTAlIChhbHBoYS8yID0gMC4wNSkNCnpfOTUgPC0gcW5vcm0oMC45NzUpICMgWi1zY29yZSB1bnR1ayA5NSUgKGFscGhhLzIgPSAwLjAyNSkNCnpfOTkgPC0gcW5vcm0oMC45OTUpICMgWi1zY29yZSB1bnR1ayA5OSUgKGFscGhhLzIgPSAwLjAwNSkNCg0KIyMgUGVyaGl0dW5nYW4gQ0kgZGFuIFRhYmVsDQpjaV9kYXRhXzEgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgWl9TY29yZSA9IGMoel85MCwgel85NSwgel85OSksDQogIE1hcmdpbl9vZl9FcnJvciA9IFpfU2NvcmUgKiBzZV8xLA0KICBMb3dlcl9Cb3VuZCA9IHhfYmFyXzEgLSBNYXJnaW5fb2ZfRXJyb3IsDQogIFVwcGVyX0JvdW5kID0geF9iYXJfMSArIE1hcmdpbl9vZl9FcnJvcg0KKQ0KDQojIE1lbmFtcGlsa2FuIFRhYmVsIFNDIDENCnRhYmVsX2Flc3RoZXRpYyhjaV9kYXRhXzEsICJUYWJlbCAxLjE6IENvbmZpZGVuY2UgSW50ZXJ2YWwgTWVhbiAoWi1UZXN0LCBTaWdtYSBEaWtldGFodWkpIikNCg0KDQpwbG90XzFfZW5oYW5jZWQgPC0gY2lfZGF0YV8xICU+JQ0KICBtdXRhdGUoVGluZ2thdF9LZXBlcmNheWFhbiA9IGZhY3RvcihUaW5na2F0X0tlcGVyY2F5YWFuLCBsZXZlbHMgPSBjKCI5OSUiLCAiOTUlIiwgIjkwJSIpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IHhfYmFyXzEsIHkgPSBUaW5na2F0X0tlcGVyY2F5YWFuKSkgKw0KIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyX0JvdW5kLCB4bWF4ID0gVXBwZXJfQm91bmQsIGNvbG9yID0gVGluZ2thdF9LZXBlcmNheWFhbiksDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMiwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwLjcpICsNCiAgDQogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIiNiMzAwMDAiLCBzaXplID0gNCwgc2hhcGUgPSAyMSwgc3Ryb2tlID0gMSkgKw0KICAjIE1lbmFtYmFoa2FuIGxhYmVsIHRla3MgZGkgYXRhcyBnYXJpcyBhZ2FyIGxlYmloIGluZm9ybWF0aWYNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gTG93ZXJfQm91bmQsIGxhYmVsID0gcm91bmQoTG93ZXJfQm91bmQsIDIpKSwgdmp1c3QgPSAtMS4yLCBzaXplID0gMywgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gVXBwZXJfQm91bmQsIGxhYmVsID0gcm91bmQoVXBwZXJfQm91bmQsIDIpKSwgdmp1c3QgPSAtMS4yLCBzaXplID0gMywgZm9udGZhY2UgPSAiYm9sZCIpICsNCiANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIjk5JSIgPSAiI2IzMDAwMCIsICI5NSUiID0gIiNFNjdFMjIiLCAiOTAlIiA9ICIjRjFDNDBGIikpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAxLjE6IFJ1YW5nIFJpc2lrbyAmIEtlcGFzdGlhbiAoWi1UZXN0KSIsDQogICAgc3VidGl0bGUgPSAiTWVsaWhhdCBiYWdhaW1hbmEgcmVudGFuZyBtZWxlYmFyIHNlaXJpbmcgbWVuaW5na2F0bnlhIHRpbmdrYXQga2VwZXJjYXlhYW4iLA0KICAgIHggPSAiUmF0YS1SYXRhIFRyYW5zYWtzaSAoRXN0aW1hc2kgVGl0aWsgPSAxMi4wKSIsDQogICAgeSA9ICJMZXZlbCBLZXBlcmNheWFhbiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCwgY29sb3IgPSAiIzJDM0U1MCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpDQogICkNCg0KcHJpbnQocGxvdF8xX2VuaGFuY2VkKQ0KYGBgDQoNCkdyYWZpayBpbmkgbWVtcGVybGloYXRrYW4gYmFnYWltYW5hIENvbmZpZGVuY2UgSW50ZXJ2YWwgYmVrZXJqYSB1bnR1ayBtZW1pdGlnYXNpIHJpc2lrbyBkYXJpIGFuZ2thIHR1bmdnYWwgMTIuMDoNCg0KVGl0aWsgTWVyYWggKEVzdGltYXNpIFRpdGlrKTogSW5pIGFkYWxhaCBhbmdrYSByYXRhLXJhdGEgdHJhbnNha3NpIG11cm5pIGRhcmkgc2FtcGVsIGtpdGEgKDEyLjApLiBEaSBzaW5pbGFoIHBvc2lzaSBwdXNhdCBkYXRhIGJlcmFkYS4NCg0KR2FyaXMgSG9yaXpvbnRhbCAoTWFyZ2luIEtlc2FsYWhhbik6IEFuZGEgYmlzYSBtZWxpaGF0IGFkYSB0aWdhIHRpbmdrYXRhbiBnYXJpcy4gU2VtYWtpbiBrZSBhdGFzIChtZW51anUgOTklKSwgZ2FyaXNueWEgc2VtYWtpbiBwYW5qYW5nLiBJbmkgbWVudW5qdWtrYW4gYmFod2EgdW50dWsgbWVuZGFwYXRrYW4ga2V5YWtpbmFuIHlhbmcgbGViaWggdGluZ2dpLCBraXRhIGhhcnVzIHNpYXAgbWVuZXJpbWEgcmVudGFuZyBrZW11bmdraW5hbiB5YW5nIGxlYmloIGxlYmFyLg0KDQpXYXJuYSBzZWJhZ2FpIEluZGlrYXRvcjogV2FybmEgS3VuaW5nICg5MCUpIG1lbnVuanVra2FuIGVzdGltYXNpIHlhbmcgbGViaWggYWdyZXNpZiBzZWRhbmdrYW4gd2FybmEgTWVyYWggKDk5JSkgbWVudW5qdWtrYW4gcG9zaXNpIHlhbmcgbGViaWggYmVyaGF0aS1oYXRpIGF0YXUgImFtYW4iIGJhZ2kgcGVydXNhaGFhbi4NCg0KDQojIC4gU3R1ZHkgQ2FzZSAyOiBDSSBNRUFOIChULVRFU1QpIA0KSmlrYSBwYWRhIGthc3VzIHBlcnRhbWEga2l0YSBtZW1pbGlraSBrZW1ld2FoYW4gaW5mb3JtYXNpLCBkaSBLYXN1cyAyIGluaSBraXRhIGJlcmhhZGFwYW4gZGVuZ2FuIGtlbnlhdGFhbiBwYWhpdCB5YW5nIHNlcmluZyB0ZXJqYWRpIGRpIGxhcGFuZ2FuOiBEYXRhIHlhbmcgc2FuZ2F0IHNlZGlraXQuIERlbmdhbiBoYW55YSAxMiBzYW1wZWwgd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzLCBraXRhIHRpZGFrIGJpc2EgbGFnaSBtZW5nZ3VuYWthbiBaLVRlc3QuIE1lbmdhcGE/IEthcmVuYSBraXRhIHRpZGFrIG1lbmdldGFodWkgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgc2VjYXJhIHBhc3RpLCBkYW4gdWt1cmFuIHNhbXBlbCB5YW5nIGtlY2lsIG1lbWJ1YXQgZXN0aW1hc2kga2l0YSBtZW5qYWRpIGphdWggbGViaWggc2Vuc2l0aWYgdGVyaGFkYXAga2VzYWxhaGFuLg0KDQpEaSBzaW5pbGFoIHQtVGVzdCAoRGlzdHJpYnVzaS10KSBoYWRpciBzZWJhZ2FpIHBhaGxhd2FuLiBKaWthIFotVGVzdCBhZGFsYWggcGVuZ3VrdXIgeWFuZyBrYWt1LCBtYWthIERpc3RyaWJ1c2ktdCBhZGFsYWggdmVyc2kgeWFuZyBsZWJpaCBzYWJhciBkYW4gYmVyaGF0aS1oYXRpLg0KDQoxLkRpc3RyaWJ1c2ktdCBtZW1pbGlraSAiRWtvciB5YW5nIExlYmloIFRlYmFsIg0KRGFsYW0gc3RhdGlzdGlrLCBraXRhIG1lbmdlbmFsIGlzdGlsYWggRmF0IFRhaWxzIGF0YXUgZWtvciB5YW5nIGxlYmloIHRlYmFsIHBhZGEga3VydmEgdC4gU2VjYXJhIG1hdGVtYXRpcywgaW5pIGFkYWxhaCBjYXJhIHQtZGlzdHJpYnV0aW9uIHVudHVrIG1lbmdha29tb2Rhc2kga2V0aWRha3RhaHVhbiBraXRhLiBLYXJlbmEgc2FtcGVsbnlhIGN1bWEgc2VkaWtpdCwgcmlzaWtvIGFkYW55YSBkYXRhIHBlbmNpbGFuIChvdXRsaWVyKSB5YW5nIG1lcnVzYWsgcmF0YS1yYXRhIG1lbmphZGkgc2FuZ2F0IGJlc2FyLg0KDQpEaXN0cmlidXNpLXQgbWVtYmVyaWthbiBydWFuZyBnZXJhayB0YW1iYWhhbiBkZW5nYW4gbWVtcGVybGViYXIgaW50ZXJ2YWxueWEgZGliYW5kaW5na2FuIFotVGVzdC4gSW5pIGFkYWxhaCBiZW50dWsga2VyZW5kYWhoYXRpYW4gc3RhdGlzdGlrOiBLYXJlbmEgc2F5YSBoYW55YSB0YWh1IHNlZGlraXQsIHNheWEgdGlkYWsgYWthbiBtZW1iZXJpa2FuIGphbmppIHlhbmcgdGVybGFsdSBiZXJhbmkuDQoNCjIuIE1ha25hIGRpIEJhbGlrIEFuZ2thOiBTdGFiaWxpdGFzIGRpIFRlbmdhaCBLZXRlcmJhdGFzYW4NClJhdGEtcmF0YSBwZW55ZWxlc2FpYW4gdHVnYXMgdGltIGtpdGEgYWRhbGFoIDguNCBtZW5pdC4gTmFtdW4sIHBlcmhhdGlrYW4gcmVudGFuZyA5NSUga2l0YSB5YW5nIGJlcmFkYSBkaSBhbmdrYSA4LjA4IGhpbmdnYSA4LjcxLg0KDQpNZXNraXB1biBzYW1wZWxueWEgbWluaW0sIGludGVydmFsIHlhbmcga2l0YSBoYXNpbGthbiB0ZXJnb2xvbmcgY3VrdXAgc2VtcGl0LiBBcGEgYXJ0aW55YSBiYWdpIGJpc25pcz8gSW5pIGFkYWxhaCBrYWJhciBiYWlrLiBKYXJhayBhbnRhciBiYXRhcyB5YW5nIHNlbXBpdCBtZW51bmp1a2thbiBiYWh3YSB2YXJpYW5zaSBkYXRhIGtpdGEgcmVuZGFoLiBEZW5nYW4ga2F0YSBsYWluLCBraW5lcmphIHRpbSBBbmRhIHNhbmdhdCBrb25zaXN0ZW4gZGFuIHN0YWJpbDsgcGVyYmVkYWFuIHdha3R1IHBlbmdlcmphYW4gYW50YXIgYW5nZ290YSB0aW0gdGlkYWsgdGVycGF1dCBqYXVoLiBLaXRhIGJpc2EgbWVtcHJlZGlrc2kgbWFzYSBkZXBhbiBkZW5nYW4gbGViaWggdGVuYW5nIGthcmVuYSBlZmlzaWVuc2kgdGltIHRlcmJ1a3RpIGJ1a2FuIHNla2FkYXIgZmx1a3R1YXNpIGFjYWsuDQoNCjMuIFZpc3VhbGlzYXNpIDIuMTogS29uc2lzdGVuc2kgZGFsYW0gQmFsdXRhbiBUZWFsDQpCZXJiZWRhIGRlbmdhbiBDYXNlIDEgeWFuZyBiZXJ3YXJuYSBDb3JhbCwgZGkgc2luaSBraXRhIG1lbmdndW5ha2FuIHdhcm5hIFRlYWwgdW50dWsgbWVsYW1iYW5na2FuIGtlc3RhYmlsYW4uIEdhcmlzIHB1dHVzLXB1dHVzIGRpIHRlbmdhaCBhZGFsYWggcGVyZm9ybWEgcmF0YS1yYXRhIHNhYXQgaW5pLCBzZW1lbnRhcmEgZ2FyaXMgaG9yaXpvbnRhbCBUZWFsIG1lbnVuanVra2FuIHNlYmVyYXBhIGphdWgga2l0YSBiZXJzZWRpYSBtZW5vbGVyYW5zaSBrZXRpZGFrcGFzdGlhbiBzZWJlbHVtIHBlcmZvcm1hIHRpbSBkaWFuZ2dhcCBtZW51cnVuLg0KDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCg0KIyMgRGF0YQ0KZGF0YV90dWdhc19zZWxlc2FpIDwtIGMoOC40LCA3LjksIDkuMSwgOC43LCA4LjIsIDkuMCwgNy44LCA4LjUsIDguOSwgOC4xLCA4LjYsIDguMykNCm5fMiA8LSBsZW5ndGgoZGF0YV90dWdhc19zZWxlc2FpKQ0KeF9iYXJfMiA8LSBtZWFuKGRhdGFfdHVnYXNfc2VsZXNhaSkNCnNfMiA8LSBzZChkYXRhX3R1Z2FzX3NlbGVzYWkpDQpkZl8yIDwtIG5fMiAtIDENCnNlXzIgPC0gc18yIC8gc3FydChuXzIpDQoNCiMjIE5pbGFpIEtyaXRpcyBUDQp0XzkwIDwtIHF0KDAuOTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDkwJSAoYWxwaGEvMiA9IDAuMDUpDQp0Xzk1IDwtIHF0KDAuOTc1LCBkZiA9IGRmXzIpICMgVC1zY29yZSB1bnR1ayA5NSUgKGFscGhhLzIgPSAwLjAyNSkNCnRfOTkgPC0gcXQoMC45OTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDk5JSAoYWxwaGEvMiA9IDAuMDA1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSBkYW4gVGFiZWwNCmNpX2RhdGFfMiA8LSB0aWJibGUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBUX1Njb3JlID0gYyh0XzkwLCB0Xzk1LCB0Xzk5KSwNCiAgTWFyZ2luX29mX0Vycm9yID0gVF9TY29yZSAqIHNlXzIsDQogIExvd2VyX0JvdW5kID0geF9iYXJfMiAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSB4X2Jhcl8yICsgTWFyZ2luX29mX0Vycm9yDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgMg0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMiwgIlRhYmVsIDIuMTogQ29uZmlkZW5jZSBJbnRlcnZhbCBNZWFuICh0LVRlc3QsIFNpZ21hIFRpZGFrIERpa2V0YWh1aSkiKQ0KDQoNCnBsb3RfMl9lbmhhbmNlZCA8LSBjaV9kYXRhXzIgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0geF9iYXJfMiwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyX0JvdW5kLCB4bWF4ID0gVXBwZXJfQm91bmQsIGNvbG9yID0gVGluZ2thdF9LZXBlcmNheWFhbiksDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMywgc2l6ZSA9IDIsIGFscGhhID0gMC44KSArIA0KICAjIFRpdGlrIHB1c2F0IChSYXRhLXJhdGEgc2FtcGVsKQ0KICBnZW9tX3BvaW50KHNpemUgPSA1LCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiI2IzMDAwMCIsIHNoYXBlID0gMjEsIHN0cm9rZSA9IDEuNSkgKw0KICAjIExhYmVsIGFuZ2thIGJhdGFzIGJhd2FoIGRhbiBhdGFzIGFnYXIgcHJlc2lzaQ0KICBnZW9tX3RleHQoYWVzKHggPSBMb3dlcl9Cb3VuZCwgbGFiZWwgPSByb3VuZChMb3dlcl9Cb3VuZCwgMikpLCB2anVzdCA9IC0xLjUsIHNpemUgPSAzLjgsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIGdlb21fdGV4dChhZXMoeCA9IFVwcGVyX0JvdW5kLCBsYWJlbCA9IHJvdW5kKFVwcGVyX0JvdW5kLCAyKSksIHZqdXN0ID0gLTEuNSwgc2l6ZSA9IDMuOCwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCI5OSUiID0gIiMwMDRkNGQiLCAiOTUlIiA9ICIjMDA4MDgwIiwgIjkwJSIgPSAiIzY2YjJiMiIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgMi4xOiBBbmFsaXNpcyBLb25zaXN0ZW5zaSBUaW0gKHQtVGVzdCkiLA0KICAgIHN1YnRpdGxlID0gIk1lc2tpcHVuIGRhdGEga2VjaWwgKG49MTIpLCByZW50YW5nIHNlbXBpdCBtZW51bmp1a2thbiBwZXJmb3JtYSB5YW5nIHN0YWJpbCIsDQogICAgeCA9ICJSYXRhLVJhdGEgV2FrdHUgUGVueWVsZXNhaWFuIChNZW5pdCkiLA0KICAgIHkgPSAiVGluZ2thdCBLZXBlcmNheWFhbiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiI2IzMDAwMCIsIHNpemUgPSAxNiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmF5MzAiLCBtYXJnaW4gPSBtYXJnaW4oYiA9IDE1KSksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCB2aXN1YWxpc2FzaQ0KcHJpbnQocGxvdF8yX2VuaGFuY2VkKQ0KYGBgDQoNCkdyYWZpayBpbmkgbWVuZ2dhbWJhcmthbiBiYWdhaW1hbmEgdGltIEFuZGEgYmVrZXJqYSBkaSB0ZW5nYWgga2V0ZXJiYXRhc2FuIGRhdGEuIEthcmVuYSBraXRhIGhhbnlhIHB1bnlhIDEyIHNhbXBlbCwga2l0YSBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIHQtVGVzdCB5YW5nIGxlYmloIGhhdGktaGF0aToNCg0KV2FybmEgVGVhbCAoU3RhYmlsaXRhcyk6IEdyYWRhc2kgd2FybmEgVGVhbCBtZW51bmp1a2thbiB0aW5na2F0ICJrZXdhc3BhZGFhbiIga2l0YS4gU2VtYWtpbiBnZWxhcCB3YXJuYW55YSAoOTklKSwgc2VtYWtpbiBsZWJhciBqYXJpbmcgcGVuZ2FtYW4geWFuZyBraXRhIHBhc2FuZyB1bnR1ayBtZW5nYW50aXNpcGFzaSBrZXRpZGFrcGFzdGlhbi4NCg0KUmVudGFuZyBHYXJpcyB5YW5nIFNlbXBpdDogUGVyaGF0aWthbiBiYWh3YSBtZXNraXB1biBraXRhIG1lbmFpa2thbiB0aW5na2F0IGtlcGVyY2F5YWFuIGtlIDk5JSwgamFyYWsgYW50YXJhIGFuZ2thIDguMDEgaGluZ2dhIDguNzkgbWVuaXQgbWFzaWggdGVyZ29sb25nIHJhcGF0LiBJbmkgYWRhbGFoIGJ1a3RpIHZpc3VhbCBiYWh3YSBwZXJmb3JtYSB0aW0gQW5kYSBzYW5nYXQga29uc2lzdGVuOyB0aWRhayBhZGEgcGVyYmVkYWFuIG1lbmNvbG9rIGFudGFyYSBhbmdnb3RhIHRpbSB5YW5nIGJla2VyamEgc2FuZ2F0IGNlcGF0IGF0YXUgc2FuZ2F0IGxhbWJhdC4NCg0KVGl0aWsgTWVyYWggKFJhdGEtcmF0YSA4LjQpOiBJbmlsYWggdGl0aWsga2VzZWltYmFuZ2FuIHRpbSBzYWF0IGluaS4gQW5na2EgZGkgdWp1bmcgZ2FyaXMgKExhYmVsKSBtZW51bmp1a2thbiBiYXRhcyBhbWFuIHlhbmcgYmlzYSBraXRhIGphbmppa2FuIGtlcGFkYSBtYW5hamVtZW4uDQoNCg0KIyAuIFN0dWR5IENhc2UgMzogQ0kgUFJPUE9SU0kgKEEvQiBURVNUSU5HKQ0KUGFkYSBrYXN1cyBrZXRpZ2EgaW5pLCBmb2t1cyBraXRhIGJlcmdlc2VyLiBLaXRhIHRpZGFrIGxhZ2kgYmVyYmljYXJhIHRlbnRhbmcgbmlsYWkgcmF0YS1yYXRhLCBtZWxhaW5rYW4gdGVudGFuZyBwZWx1YW5nIGtlYmVyaGFzaWxhbi4gU2tlbmFyaW9ueWEgYWRhbGFoIHNlYnVhaCB1amkgY29iYSBkZXNhaW4gdG9tYm9sIENhbGwgdG8gQWN0aW9uIChDVEEpIGJhcnUuIFBlcnRhbnlhYW4ga3JpdGlzbnlhIHNlZGVyaGFuYTogIkFwYWthaCBkZXNhaW4gYmFydSBpbmkgYmVuYXItYmVuYXIgbWVtYmF3YSBwZXJ1YmFoYW4sIGF0YXUgaGFueWEga2ViZXR1bGFuIHNlc2FhdD8iDQoNCktpdGEgbWVtaWxpa2kgc3RhbmRhciBsYW1hIChiYXNlbGluZSkgc2ViZXNhciAyMCUuIERpIHNpbmlsYWggc3RhdGlzdGlrIGJla2VyamEgdW50dWsgbWVtaXNhaGthbiBhbnRhcmEgaGFyYXBhbiBrb3NvbmcgZGVuZ2FuIGJ1a3RpIG55YXRhLg0KDQoxLiBWaXN1YWxpc2FzaSBLZW1lbmFuZ2FuOiBNZWxhbXBhdWkgR2FyaXMgTXVzdWgNCkppa2EgQW5kYSBtZWxpaGF0IFZpc3VhbGlzYXNpIDMuMSBkaSBiYXdhaCwgYWRhIGdhcmlzIGt1bmluZyB2ZXJ0aWthbCB5YW5nIGJlcmRpcmkgdGVnYWsgZGkgYW5na2EgMjAlLiBHYXJpcyBpbmkgYWRhbGFoICJtdXN1aCIga2l0YeKAlHRpdGlrIGRpIG1hbmEgcGVyZm9ybWEgbGFtYSBiZXJhZGEuDQoNCkhhbCB5YW5nIGx1YXIgYmlhc2EgYWRhbGFoIHNlbHVydWggaW50ZXJ2YWwga2VwZXJjYXlhYW4ga2l0YSAoZ2FyaXMgdW5ndSksIGJhaGthbiBwYWRhIHRpbmdrYXQga2V5YWtpbmFuIDk5JSBzZWthbGlwdW4sIGJlcmFkYSBzZXBlbnVobnlhIGRpIHNpc2kga2FuYW4gZ2FyaXMga3VuaW5nIHRlcnNlYnV0LiBTZWNhcmEgc3RhdGlzdGlrLCBpbmkgYWRhbGFoIGJ1a3RpIHlhbmcgdGlkYWsgdGVyYmFudGFoa2FuIGJhaHdhIGRlc2FpbiBiYXJ1IGluaSBtZW1pbGlraSBwZXJmb3JtYSB5YW5nIGxlYmloIHVuZ2d1bC4gVGlkYWsgYWRhIGFyZWEgeWFuZyB0dW1wYW5nIHRpbmRpaCAob3ZlcmxhcCksIHlhbmcgYmVyYXJ0aSBrZW11bmdraW5hbiBrZWdhZ2FsYW4gZGVzYWluIGJhcnUgdW50dWsgbWVueWFtYWkgZGVzYWluIGxhbWEgaGFtcGlyIHRpZGFrIGFkYS4NCg0KMi4gS2VzaW1wdWxhbiBTdHJhdGVnaXM6IExhbXB1IEhpamF1IHVudHVrIEludmVzdGFzaQ0KRGF0YSBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEga2xpayBzYW1wZWwga2l0YSBiZXJhZGEgZGkgYW5na2EgMjIlLiBOYW11biwgeWFuZyBwYWxpbmcgcGVudGluZyBiYWdpIG1hbmFqZW1lbiBhZGFsYWggYmF0YXMgYmF3YWhueWEuDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCiMjIERhdGENCm5fMyA8LSA1MDANCnhfMyA8LSAxMTANCnBfaGF0XzMgPC0geF8zIC8gbl8zDQoNCiMjIFN0YW5kYXJkIEVycm9yDQpzZV8zIDwtIHNxcnQocF9oYXRfMyAqICgxIC0gcF9oYXRfMykgLyBuXzMpDQoNCiMjIE5pbGFpIEtyaXRpcyBaIChzYW1hIHNlcGVydGkgU0MgMSkNCnpfOTAgPC0gcW5vcm0oMC45NSkNCnpfOTUgPC0gcW5vcm0oMC45NzUpDQp6Xzk5IDwtIHFub3JtKDAuOTk1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSBkYW4gVGFiZWwNCmNpX2RhdGFfMyA8LSB0aWJibGUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBaX1Njb3JlID0gYyh6XzkwLCB6Xzk1LCB6Xzk5KSwNCiAgTWFyZ2luX29mX0Vycm9yID0gWl9TY29yZSAqIHNlXzMsDQogIExvd2VyX0JvdW5kID0gcF9oYXRfMyAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSBwX2hhdF8zICsgTWFyZ2luX29mX0Vycm9yDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgMw0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMywgIlRhYmVsIDMuMTogQ29uZmlkZW5jZSBJbnRlcnZhbCBQcm9wb3JzaSAoWi1UZXN0KSB1bnR1ayBDVEEgQmFydSIpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KDQoNCm5fMyA8LSA1MDANCnhfMyA8LSAxMTANCnBfaGF0XzMgPC0geF8zIC8gbl8zDQpzZV8zIDwtIHNxcnQocF9oYXRfMyAqICgxIC0gcF9oYXRfMykgLyBuXzMpDQp0YXJnZXRfbGFtYSA8LSAwLjIwICMgPC0tIFZhcmlhYmVsIGluaSBzdWRhaCBzYXlhIGRlZmluaXNpa2FuIGRpIHNpbmkgYWdhciB0aWRhayBlcnJvcg0KDQojIE1lbWJ1YXQgdGFiZWwgZGF0YSB1bnR1ayBwbG90DQpwbG90X2RhdGFfMyA8LSB0aWJibGUoDQogIFRpbmdrYXQgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBaID0gYyhxbm9ybSgwLjk1KSwgcW5vcm0oMC45NzUpLCBxbm9ybSgwLjk5NSkpDQopICU+JQ0KICBtdXRhdGUoDQogICAgTG93ZXIgPSBwX2hhdF8zIC0gKFogKiBzZV8zKSwNCiAgICBVcHBlciA9IHBfaGF0XzMgKyAoWiAqIHNlXzMpLA0KICAgIFRpbmdrYXQgPSBmYWN0b3IoVGluZ2thdCwgbGV2ZWxzID0gYygiOTklIiwgIjk1JSIsICI5MCUiKSkNCiAgKQ0KDQoNCmdncGxvdChwbG90X2RhdGFfMywgYWVzKHggPSBwX2hhdF8zLCB5ID0gVGluZ2thdCkpICsNCiAgDQogIGdlb21fc2VnbWVudChhZXMoeCA9IExvd2VyLCB4ZW5kID0gVXBwZXIsIHkgPSBUaW5na2F0LCB5ZW5kID0gVGluZ2thdCwgY29sb3IgPSBUaW5na2F0KSwgDQogICAgICAgICAgICAgICBzaXplID0gNCwgbGluZWVuZCA9ICJyb3VuZCIpICsgDQogICMgR0FSSVMgVEFSR0VUIExBTUEgKDIwJSkNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gdGFyZ2V0X2xhbWEsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gIiNENEFGMzciLCBzaXplID0gMS4yKSArDQogICMgVGl0aWsgcHVzYXQgcmF0YS1yYXRhIHNhbXBlbCAoMjIlKQ0KICBnZW9tX3BvaW50KHNpemUgPSA2LCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiI2IzMDAwMCIsIHNoYXBlID0gMjEsIHN0cm9rZSA9IDIpICsNCiAgIyBMYWJlbCBwZXJzZW50YXNlIGFuZ2thIGRpIHVqdW5nLXVqdW5nIGdhcmlzDQogIGdlb21fdGV4dChhZXMoeCA9IExvd2VyLCBsYWJlbCA9IHBhc3RlMChyb3VuZChMb3dlcioxMDAsIDEpLCAiJSIpKSwgdmp1c3QgPSAtMS41LCBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gVXBwZXIsIGxhYmVsID0gcGFzdGUwKHJvdW5kKFVwcGVyKjEwMCwgMSksICIlIikpLCB2anVzdCA9IC0xLjUsIHNpemUgPSA0LCBmb250ZmFjZSA9ICJib2xkIikgKw0KICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIjk5JSIgPSAiIzQ4M0Q4QiIsICI5NSUiID0gIiM2QTVBQ0QiLCAiOTAlIiA9ICIjODM2RkZGIikpICsNCiAgIyBBbm90YXNpIExhYmVsIHVudHVrIFRhcmdldCBhZ2FyIGplbGFzDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSB0YXJnZXRfbGFtYSwgeSA9IDMuNCwgbGFiZWwgPSAiVGFyZ2V0IExhbWEgKDIwJSkiLCBmaWxsID0gIiNENEFGMzciLCBjb2xvciA9ICJ3aGl0ZSIsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIA0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIDMuMTogVmFsaWRhc2kgS2VtZW5hbmdhbiBDVEEgQmFydSIsDQogICAgc3VidGl0bGUgPSAiSW50ZXJ2YWwga2VwZXJjYXlhYW4gc2VwZW51aG55YSBtZWxhbXBhdWkgcGVyZm9ybWEgZGVzYWluIGxhbWEiLA0KICAgIHggPSAiVGluZ2thdCBLb252ZXJzaSAoJSkiLA0KICAgIHkgPSAiTGV2ZWwgS2VwZXJjYXlhYW4iDQogICkgKw0KICAjIE1lbmdhdHVyIGJhdGFzIHN1bWJ1IFggYWdhciB2aXN1YWxpc2FzaSBmb2t1cw0KICBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoMC4xNywgMC4yNykpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkgKw0KICB0aGVtZSgNCiAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjYjMwMDAwIiwgc2l6ZSA9IDE4KSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxMikNCiAgKQ0KYGBgDQoNClZpc3VhbGlzYXNpIGluaSBtZW51bmp1a2thbiBwZXJiYW5kaW5nYW4gYW50YXJhIHBlcmZvcm1hIGRlc2FpbiBiYXJ1IGRlbmdhbiBzdGFuZGFyIGxhbWEgKDIwJSk6DQoNCkdhcmlzIEt1bmluZyAoVGFyZ2V0IExhbWEpOiBJbmkgYWRhbGFoIGJhdGFzIHBlcmZvcm1hIGRlc2FpbiBsYW1hLiBKaWthIGdhcmlzIHVuZ3UgYmVyYWRhIGRpIHNlYmVsYWgga2FuYW4gZ2FyaXMga3VuaW5nIGluaSwgYXJ0aW55YSBkZXNhaW4gYmFydSBsZWJpaCB1bmdndWwuDQoNCkdhcmlzIFVuZ3UgKEludGVydmFsIEtlcGVyY2F5YWFuKTogTWVudW5qdWtrYW4gcmVudGFuZyBwZXJmb3JtYSBkZXNhaW4gYmFydS4gSGViYXRueWEsIGJhaGthbiBwYWRhIHRpbmdrYXQga2VwZXJjYXlhYW4gOTklLCBzZWx1cnVoIGdhcmlzIHVuZ3UgdGV0YXAgYmVyYWRhIGRpIHNlYmVsYWgga2FuYW4gdGFyZ2V0IDIwJS4NCg0KVGl0aWsgTWVyYWg6IE1lcnVwYWthbiByYXRhLXJhdGEga29udmVyc2kgc2FtcGVsIGtpdGEgKDIyJSkuIEFuZ2thLWFuZ2thIGRpIHVqdW5nIGdhcmlzIChzZXBlcnRpIDE3LjUlIGF0YXUgMjYuNSUpIGFkYWxhaCBlc3RpbWFzaSB0ZXJidXJ1ayBkYW4gdGVyYmFpayB5YW5nIG11bmdraW4gdGVyamFkaS4NCg0KDQojIC4gU3R1ZHkgQ2FzZSA0OiBQRVJCQU5ESU5HQU4gWiBWUyBUIA0KRGkgc2luaSBraXRhIG1lbmdhZHUgZHVhIGNhcmEgYmVycGlraXIuIFRpbSBBIChaLVRlc3QpIHlhbmcgY2VuZGVydW5nIG9wdGltaXMgZGFuIFRpbSBCICh0LVRlc3QpIHlhbmcgbGViaWggd2FzcGFkYS4gUGVyYmVkYWFuIGtlZHVhbnlhIGJ1a2FuIGN1bWEgc29hbCBhbmdrYSwgdGFwaSBzb2FsIHNlYmVyYXBhIGJlc2FyIHJpc2lrbyB5YW5nIGJlcmFuaSBraXRhIGFtYmlsLg0KDQoxLiBCYWhheWEgVGVybGFsdSBQZXJjYXlhIERpcmkgKE92ZXJjb25maWRlbmNlKQ0KUGVyaGF0aWthbiBnYXJpcyBDb3JhbCAoVGltIEEpLiBJbnRlcnZhbG55YSBwYWxpbmcgc2VtcGl0IGRhbiB0ZXJsaWhhdCBzYW5nYXQgcHJlc2lzaS4gTmFtdW4sIGluaSBhZGFsYWggcGVuZGVrYXRhbiB5YW5nIGJlcmlzaWtvLiBUaW0gQSBiZXJhc3Vtc2kga2l0YSB0YWh1IHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSBzZWNhcmEgcGFzdGkuIERpIGR1bmlhIG55YXRhLCBhc3Vtc2kgaW5pIHNlcmluZ2thbGkgdGVybGFsdSBiZXJhbmkuIEppa2Ega2l0YSBoYW55YSBtZW5nYW5kYWxrYW4gaW50ZXJ2YWwgeWFuZyBzZW1waXQgaW5pLCBraXRhIGJpc2EgdGVyamViYWsgZGFsYW0gcmFzYSBhbWFuIHBhbHN1LiBKaWthIGRhdGEgYXNsaSBkaSBsYXBhbmdhbiB0ZXJueWF0YSBsZWJpaCBiZXJnZWpvbGFrLCBwcmVkaWtzaSBUaW0gQSBha2FuIGxhbmdzdW5nIG1lbGVzZXQuDQoNCjIuIEtlYW1hbmFuIGRpIEF0YXMgU2VnYWxhbnlhIChTYWZldHkgTWFyZ2luKQ0KU2ViYWxpa255YSwgbGloYXQgZ2FyaXMgVGVhbCAoVGltIEIpLiBJbnRlcnZhbG55YSBzZWRpa2l0IGxlYmloIGxlYmFyLiBUaW0gQiBzYWRhciBiYWh3YSBkZW5nYW4gaGFueWEgNDUgc2FtcGVsLCBhZGEga2V0aWRha3Bhc3RpYW4geWFuZyBiZXNhci4gTWVyZWthIG1lbmdndW5ha2FuIHQtVGVzdCB1bnR1ayBtZW1iZXJpa2FuIHJ1YW5nIGdlcmFrLiBEYWxhbSBtYW5hamVtZW4gcmlzaWtvLCBpbmkgYWRhbGFoIGxhbmdrYWggeWFuZyBqYXVoIGxlYmloIGJpamFrLiBMZWJpaCBiYWlrIGtpdGEgbWVtcHJlZGlrc2kgcmVudGFuZyB5YW5nIHNlZGlraXQgbGViaWggbHVhcyBuYW11biBhbWFuLCBkYXJpcGFkYSBtZW1iZXJpa2FuIGphbmppIGFuZ2thIHlhbmcgc2VtcGl0IHRhcGkgdGVybnlhdGEgc2FsYWguDQoNCmBgYHtyLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIG91dC5leHRyYT0nc3R5bGU9ImRpc3BsYXk6YmxvY2s7IG1hcmdpbi1sZWZ0OmF1dG87IG1hcmdpbi1yaWdodDphdXRvOyInfQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCnRhYmVsX2Flc3RoZXRpYyA8LSBmdW5jdGlvbihkYXRhLCBjYXB0aW9uX3RleHQpIHsNCiAgZGF0YSAlPiUNCiAgICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSBjYXB0aW9uX3RleHQsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUNCiAgICBrYWJsZV9zdHlsaW5nKA0KICAgICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksDQogICAgICBmdWxsX3dpZHRoID0gRiwNCiAgICAgIHBvc2l0aW9uID0gImNlbnRlciINCiAgICApICU+JQ0KICAgIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiI2IzMDAwMCIsIGNvbG9yID0gIndoaXRlIikNCn0NCg0KeF9iYXJfNCA8LSAxMC41DQpzZF80ICAgIDwtIDAuOCANCm5fNCAgICAgPC0gNDUNCnNlXzQgICAgPC0gc2RfNCAvIHNxcnQobl80KQ0KbGV2ZWxzX3ZhbCA8LSBjKDAuOTAsIDAuOTUsIDAuOTkpDQoNCnRpbV9hIDwtIGRhdGEuZnJhbWUoDQogIFRpbmdrYXQgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBMb3dlciA9IHhfYmFyXzQgLSAocW5vcm0oMSAtICgxIC0gbGV2ZWxzX3ZhbCkvMikgKiBzZV80KSwNCiAgVXBwZXIgPSB4X2Jhcl80ICsgKHFub3JtKDEgLSAoMSAtIGxldmVsc192YWwpLzIpICogc2VfNCksDQogIE1ldG9kZSA9ICJUaW0gQSAoWi1UZXN0IC8gT3B0aW1pcykiDQopDQoNCnRpbV9iIDwtIGRhdGEuZnJhbWUoDQogIFRpbmdrYXQgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBMb3dlciA9IHhfYmFyXzQgLSAocXQoMSAtICgxIC0gbGV2ZWxzX3ZhbCkvMiwgZGYgPSBuXzQgLSAxKSAqIHNlXzQpLA0KICBVcHBlciA9IHhfYmFyXzQgKyAocXQoMSAtICgxIC0gbGV2ZWxzX3ZhbCkvMiwgZGYgPSBuXzQgLSAxKSAqIHNlXzQpLA0KICBNZXRvZGUgPSAiVGltIEIgKHQtVGVzdCAvIFdhc3BhZGEpIg0KKQ0KDQpwbG90X2RhdGFfZmluYWwgPC0gcmJpbmQodGltX2EsIHRpbV9iKQ0KcGxvdF9kYXRhX2ZpbmFsJFRpbmdrYXQgPC0gZmFjdG9yKHBsb3RfZGF0YV9maW5hbCRUaW5na2F0LCBsZXZlbHMgPSBjKCI5OSUiLCAiOTUlIiwgIjkwJSIpKQ0KDQoNCnRhYmVsX2Flc3RoZXRpYyhwbG90X2RhdGFfZmluYWwsICJUYWJlbCA0LjE6IFBlcmJhbmRpbmdhbiBQYXJhbWV0ZXIgWiB2cyBUIikNCg0KDQpnZ3Bsb3QocGxvdF9kYXRhX2ZpbmFsLCBhZXMoeCA9IHhfYmFyXzQsIHkgPSBUaW5na2F0LCBjb2xvciA9IE1ldG9kZSkpICsNCiAgIyBHYXJpcyBpbnRlcnZhbCB0ZWJhbCBkZW5nYW4gdWp1bmcgYnVsYXQNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBMb3dlciwgeG1heCA9IFVwcGVyKSwgDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuNCwgc2l6ZSA9IDIuNSwgYWxwaGEgPSAwLjgsIA0KICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwgbGluZWVuZCA9ICJyb3VuZCIpICsNCiAgDQogICMgR2FyaXMgdmVydGlrYWwgcmF0YS1yYXRhDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHhfYmFyXzQsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImdyYXk1MCIsIHNpemUgPSAxKSArDQogIA0KICANCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwgc2l6ZSA9IDUsIHNoYXBlID0gMjEsIGZpbGwgPSAid2hpdGUiLCBzdHJva2UgPSAyKSArDQogIA0KICANCiAgZ2VvbV90ZXh0KGFlcyh4ID0gTG93ZXIsIGxhYmVsID0gcm91bmQoTG93ZXIsIDIpKSwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMS44KSwgdmp1c3QgPSAtMS44LCBzaXplID0gMy41LCBmb250ZmFjZSA9ICJib2xkIikgKw0KICBnZW9tX3RleHQoYWVzKHggPSBVcHBlciwgbGFiZWwgPSByb3VuZChVcHBlciwgMikpLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxLjgpLCB2anVzdCA9IC0xLjgsIHNpemUgPSAzLjUsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIA0KICAjIFdhcm5hIEtvbnRyYXM6IENvcmFsIChPcHRpbWlzKSB2cyBUZWFsIChXYXNwYWRhKQ0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiVGltIEEgKFotVGVzdCAvIE9wdGltaXMpIiA9ICIjRkY3RjUwIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW0gQiAodC1UZXN0IC8gV2FzcGFkYSkiID0gIiMwMDgwODAiKSkgKw0KICANCiAgDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgNC4xOiBEdWVsIFN0cmF0ZWdpIEVzdGltYXNpIChaIHZzIFQpIiwNCiAgICBzdWJ0aXRsZSA9ICJ0LVRlc3QgKFRlYWwpIG1lbWJlcmlrYW4gJ1NhZmV0eSBNYXJnaW4nIHlhbmcgbGViaWggbHVhcyBkaWJhbmRpbmcgWi1UZXN0IChDb3JhbCkiLA0KICAgIHggPSAiQVBJIExhdGVuY3kgKE1pbGlkZXRpaykiLA0KICAgIHkgPSAiVGluZ2thdCBLZXBlcmNheWFhbiIsDQogICAgY29sb3IgPSAiTWV0b2RlIEFuYWxpc2lzIg0KICApICsNCiAgDQogIA0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIHRoZW1lKA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJDM0U1MCIsIHNpemUgPSAxOCksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmF5MzAiLCBtYXJnaW4gPSBtYXJnaW4oYiA9IDIwKSksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDEyKQ0KICApDQpgYGANCg0KR3JhZmlrIGluaSBtZW1wZXJsaWhhdGthbiBwZXJiZWRhYW4gYW50YXJhIGVzdGltYXNpIHlhbmcgdGVybGFsdSBiZXJhbmkgKFRpbSBBKSBkZW5nYW4gZXN0aW1hc2kgeWFuZyB3YXNwYWRhIChUaW0gQik6DQoNCkxlYmFyIEludGVydmFsOiBHYXJpcyBUZWFsIChUaW0gQikgdGVybGloYXQgbGViaWggbGViYXIgZGliYW5kaW5na2FuIGdhcmlzIENvcmFsIChUaW0gQSkuIEluaSBhZGFsYWggc2FmZXR5IG1hcmdpbiBhdGF1IHJ1YW5nIG5hcGFzIGVrc3RyYSB5YW5nIGRpYmVyaWthbiBvbGVoIHQtdGVzdCBrYXJlbmEga2l0YSBoYW55YSBtZW1pbGlraSA0NSBzYW1wZWwuDQoNClRpdGlrIFRlbmdhaDogVGl0aWsgcHV0aWggZGkgdGVuZ2FoIGFkYWxhaCByYXRhLXJhdGEgbGF0ZW5zaSBraXRhICgxMC41IG1zKS4gR2FyaXMgeWFuZyBtZW1hbmphbmcgbWVudW5qdWtrYW4gc2ViZXJhcGEgamF1aCBrZW11bmdraW5hbiBhbmdrYSB0ZXJzZWJ1dCBiaXNhIG1lbGVzZXQuDQoNClRpbmdrYXQgS2VwZXJjYXlhYW46IFNlbWFraW4gdGluZ2dpIHBlcnNlbnRhc2VueWEgKDkwJSBrZSA5OSUpLCBnYXJpc255YSBzZW1ha2luIHBhbmphbmcuIEFydGlueWEsIHVudHVrIG1lbmRhcGF0a2FuIGtleWFraW5hbiA5OSUsIGtpdGEgaGFydXMgc2lhcCBkZW5nYW4gcmVudGFuZyByaXNpa28geWFuZyBsZWJpaCBsdWFzLg0KDQpJbnRpbnlhIFZpc3VhbGlzYXNpIGluaSBtZW1idWt0aWthbiBiYWh3YSBUaW0gQiAodC10ZXN0KSBsZWJpaCBhbWFuIHVudHVrIGRpamFkaWthbiBwYXRva2FuIGJpc25pcyBrYXJlbmEgbWVyZWthIHRpZGFrIG1lcmVtZWhrYW4ga2V0aWRha3Bhc3RpYW4gZGF0YSBkaSBsYXBhbmdhbi4NCg0KDQoNCiMgLiBTdHVkeSBDYXNlIDU6IE9ORS1TSURFRCBMT1dFUiBDSQ0KRGFsYW0gYmlzbmlzLCBzZXJpbmdrYWxpIGtpdGEgdGlkYWsgcGVkdWxpIGppa2EgcGVyZm9ybWEga2l0YSB0ZXJsYWx1IGJhZ3VzIChtZWxlYmloaSB0YXJnZXQpLiBLaXRhIGhhbnlhIHRha3V0IGppa2EgcGVyZm9ybWEga2l0YSBhbmpsb2sgKGRpIGJhd2FoIHRhcmdldCkuIEluaWxhaCBndW5hbnlhIE9uZS1TaWRlZCBMb3dlciBDSS4NCg0KRWZpc2llbnNpIFN0YXRpc3RpazogRGliYW5kaW5na2FuIG1lbmdndW5ha2FuIGR1YSBhcmFoICh1cHBlciBkYW4gbG93ZXIpLCBvbmUtc2lkZWQgbWVtYmVyaWthbiBmb2t1cyBwZW51aCBwYWRhIGJhdGFzIGJhd2FoLiBJbmkgbWVtYnVhdCBkZXRla3NpIHRlcmhhZGFwIGtlZ2FnYWxhbiB0YXJnZXQgbWVuamFkaSBsZWJpaCB0YWphbS4NCg0KRGFsYW0gb3BlcmFzaW9uYWwgc2VoYXJpLWhhcmksIGtpdGEgYmlhc2FueWEgc2FudGFpIHNhamEga2FsYXUgcGVyZm9ybWEgdGliYS10aWJhIG1lbGVkYWsgbWVsYW1wYXVpIHRhcmdldC4gWWFuZyBqdXN0cnUgYmlraW4gcHVzaW5nIGFkYWxhaCBrYWxhdSBwZXJmb3JtYSBraXRhICJhbmpsb2siIHNhbXBhaSBkaSBiYXdhaCBzdGFuZGFyLiBEaSBzaW5pbGFoIE9uZS1TaWRlZCBMb3dlciBDSSBiZXJwZXJhbiBzZWJhZ2FpIHBlbnllbGFtYXQuDQoNClNlZGVyaGFuYW55YSwgZGliYW5kaW5nIGtpdGEgcmVwb3QtcmVwb3QgbWVuZ2hpdHVuZyByZW50YW5nIGF0YXMgZGFuIGJhd2FoLCBwZW5kZWthdGFuIHNhdHUgYXJhaCBpbmkgYmlraW4ga2l0YSBmb2t1cyBwZW51aCBidWF0IG1lbmphZ2EgbGFudGFpIHBlcmZvcm1hLiBIYXNpbG55YSwgS2l0YSBqYWRpIHB1bnlhIHJhZGFyIHlhbmcgamF1aCBsZWJpaCB0YWphbSB1bnR1ayBtZW5kZXRla3NpIHJpc2lrbyBrZWdhZ2FsYW4gdGFyZ2V0Lg0KDQpQZW1idWt0aWFuIFRhcmdldDogVGFyZ2V0IGtpdGEgYWRhbGFoIDcwJS4gRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gOTklLCBiYXRhcyBiYXdhaCBraXRhIGJlcmFkYSBkaSA3MC44JS4NCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoc2NhbGVzKQ0KDQoNCnRhYmVsX2Flc3RoZXRpYyA8LSBmdW5jdGlvbihkYXRhLCBjYXB0aW9uX3RleHQpIHsNCiAgZGF0YSAlPiUNCiAgICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSBjYXB0aW9uX3RleHQsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUNCiAgICBrYWJsZV9zdHlsaW5nKA0KICAgICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksDQogICAgICBmdWxsX3dpZHRoID0gRiwNCiAgICAgIHBvc2l0aW9uID0gImNlbnRlciINCiAgICApICU+JQ0KICAgIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiI2IzMDAwMCIsIGNvbG9yID0gIndoaXRlIikgIyBIZWFkZXIgTWVyYWggTWFydW4NCn0NCg0KDQpuXzUgPC0gODAwDQp4XzUgPC0gNTkyDQpwX2hhdF81IDwtIHhfNSAvIG5fNQ0KdGFyZ2V0X3Byb3BfNSA8LSAwLjcwDQpzZV81IDwtIHNxcnQocF9oYXRfNSAqICgxIC0gcF9oYXRfNSkgLyBuXzUpDQoNCiMgUGVyaGl0dW5nYW4gRGF0YSBUYWJlbA0KY2lfZGF0YV81IDwtIGRhdGEuZnJhbWUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBaX1Njb3JlID0gYyhxbm9ybSgwLjkwKSwgcW5vcm0oMC45NSksIHFub3JtKDAuOTkpKQ0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIExvd2VyX0JvdW5kID0gcF9oYXRfNSAtIChaX1Njb3JlICogc2VfNSksIA0KICAgIFN0YXR1c19UYXJnZXQgPSBpZmVsc2UoTG93ZXJfQm91bmQgPj0gdGFyZ2V0X3Byb3BfNSwgIkFNQU4iLCAiUklTSUtPIikNCiAgKQ0KDQp0YWJlbF9hZXN0aGV0aWMoY2lfZGF0YV81LCAiVGFiZWwgNS4xOiBBbmFsaXNpcyBTYWZldHkgRmxvb3IgKEJhdGFzIEJhd2FoKSIpDQoNCg0KZGZfcGxvdF81IDwtIGNpX2RhdGFfNSAlPiUNCiAgbXV0YXRlKFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBmYWN0b3IoVGluZ2thdF9LZXBlcmNheWFhbiwgbGV2ZWxzID0gYygiOTklIiwgIjk1JSIsICI5MCUiKSkpDQoNCmdncGxvdChkZl9wbG90XzUsIGFlcyh4ID0gcF9oYXRfNSwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogICMgQXJlYSBBcnNpciBIaWphdSAoWm9uYSBBbWFuIEJpc25pcykNCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gdGFyZ2V0X3Byb3BfNSwgeG1heCA9IEluZiwgeW1pbiA9IC1JbmYsIHltYXggPSBJbmYsIA0KICAgICAgICAgICBmaWxsID0gIiMzQ0IzNzEiLCBhbHBoYSA9IDAuMSkgKw0KICANCiAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gTG93ZXJfQm91bmQsIHhlbmQgPSBwX2hhdF81LCB5ID0gVGluZ2thdF9LZXBlcmNheWFhbiwgeWVuZCA9IFRpbmdrYXRfS2VwZXJjYXlhYW4sIGNvbG9yID0gVGluZ2thdF9LZXBlcmNheWFhbiksIA0KICAgICAgICAgICAgICAgc2l6ZSA9IDMsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIA0KICAjIEdhcmlzIFZlcnRpa2FsIFRhcmdldCAoQmF0YXMgNzAlKQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0YXJnZXRfcHJvcF81LCBjb2xvciA9ICIjMkU4QjU3Iiwgc2l6ZSA9IDEuNSwgbGluZXR5cGUgPSAic29saWQiKSArDQogIA0KIA0KICBnZW9tX3BvaW50KHNpemUgPSA1LCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiI2IzMDAwMCIsIHNoYXBlID0gMjEsIHN0cm9rZSA9IDIpICsNCiAgDQogIA0KICBnZW9tX3RleHQoYWVzKHggPSBMb3dlcl9Cb3VuZCwgbGFiZWwgPSBwZXJjZW50KExvd2VyX0JvdW5kLCBhY2N1cmFjeSA9IDAuMSkpLCANCiAgICAgICAgICAgIHZqdXN0ID0gLTEuOCwgc2l6ZSA9IDQsIGZvbnRmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjMkMzRTUwIikgKw0KICANCiAgDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSB0YXJnZXRfcHJvcF81LCB5ID0gMy40LCBsYWJlbCA9ICJUQVJHRVQgTUlOSU1BTDogNzAlIiwgDQogICAgICAgICAgIGZpbGwgPSAiIzJFOEI1NyIsIGNvbG9yID0gIndoaXRlIiwgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSAzLjUpICsNCiAgDQogDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCI5OSUiID0gIiMwMDRkNGQiLCAiOTUlIiA9ICIjMDA4MDgwIiwgIjkwJSIgPSAiIzY2YjJiMiIpKSArDQogIA0KICANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnRfZm9ybWF0KCksIGxpbWl0cyA9IGMoMC42OSwgMC43NSkpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSA1LjE6IFZhbGlkYXNpIEtlYW1hbmFuIEJpc25pcyAoT25lLVNpZGVkKSIsDQogICAgc3VidGl0bGUgPSAiVGl0aWsgdGVyZW5kYWggKExvd2VyIEJvdW5kKSB0ZXRhcCBiZXJhZGEgZGkgYXRhcyB0YXJnZXQgNzAlIiwNCiAgICB4ID0gIlByb3BvcnNpIFBlbmdndW5hIFByZW1pdW0iLA0KICAgIHkgPSAiTGV2ZWwgS2VwZXJjYXlhYW4iDQogICkgKw0KICANCiAgDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJDM0U1MCIsIHNpemUgPSAxOCksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikNCiAgKQ0KYGBgDQoNCkdyYWZpayBkaSBhdGFzIG1lbnVuanVra2FuIHBvc2lzaSBMYW50YWkgVGVyZW5kYWggZGFyaSBwZXJmb3JtYSBraXRhLiBHYXJpcyBoaWphdSB0ZWJhbCBkaSBhbmdrYSA3MCUgYWRhbGFoIGJhdGFzIGFtYW4geWFuZyB0aWRhayBib2xlaCBraXRhIGxhbmdnYXIuIFBlcmhhdGlrYW4gYmFod2Egc2VtdWEgdGl0aWsgZGlhbW9uZCAoc2tlbmFyaW8gdGVyYnVydWsga2l0YSkgYmVyYWRhIGRpIHNlYmVsYWgga2FuYW4gZ2FyaXMgaGlqYXUgdGVyc2VidXQuDQoNCkJhaGthbiBwYWRhIHRpbmdrYXQga2V5YWtpbmFuIHBhbGluZyBla3N0cmVtICg5OSUpLCB0aXRpayB0ZXJlbmRhaCBraXRhIG1hc2loIHRlcnRhaGFuIGRpIDcwLjglLiBJbmkgYWRhbGFoIGJ1a3RpIHZpc3VhbCB5YW5nIHNhbmdhdCBrdWF0IGJhaHdhIHByb3llayBpbmkgcHVueWEgbWFyZ2luIGtlYW1hbmFuIHlhbmcgY3VrdXAgdW50dWsgbWVuZ2hhZGFwaSBnZWpvbGFrIHBhc2FyLCBzZWhpbmdnYSBraXRhIGJpc2EgbWVsYW5na2FoIGtlIHRhaGFwIHNlbGFuanV0bnlhIGRlbmdhbiBwZXJjYXlhIGRpcmkuDQoNCg0KIyAuIFJlZmVyZW5zaQ0KDQoxIC4gTWNDbGF2ZSwgSi4gVC4sIEJlbnNvbiwgUC4gRy4sICYgU2luY2ljaCwgVC4gKDIwMjEpLiBTdGF0aXN0aWNzIGZvciBCdXNpbmVzcyBhbmQgRWNvbm9taWNzICgxNHRoIGVkLikuIFBlYXJzb24uIChNYXRlcmk6IEludGVydmFsIEVzdGltYXRpb24gYmFzZWQgb24gWi1kaXN0cmlidXRpb24gYW5kIHRoZSBjb25jZXB0IG9mIENvbmZpZGVuY2UgTGV2ZWxzKS4NCg0KMiAuIEJsYWNrLCBLLiAoMjAxOSkuIEJ1c2luZXNzIFN0YXRpc3RpY3M6IEZvciBDb250ZW1wb3JhcnkgRGVjaXNpb24gTWFraW5nLiBXaWxleS4NCg0KMyAuIE1jQ2xhdmUsIEouIFQuLCBCZW5zb24sIFAuIEcuLCAmIFNpbmNpY2gsIFQuICgyMDIxKS4gU3RhdGlzdGljcyBmb3IgQnVzaW5lc3MgYW5kIEVjb25vbWljcyAoMTR0aCBlZC4pLiBQZWFyc29uLiAoTWF0ZXJpOiBTbWFsbC1TYW1wbGUgQ29uZmlkZW5jZSBJbnRlcnZhbHMgZm9yIGEgUG9wdWxhdGlvbiBNZWFuOiB0LVN0YXRpc3RpYykuDQoNCjQgLiBNY0NsYXZlLCBKLiBULiwgQmVuc29uLCBQLiBHLiwgJiBTaW5jaWNoLCBULiAoMjAyMSkuIFN0YXRpc3RpY3MgZm9yIEJ1c2luZXNzIGFuZCBFY29ub21pY3MgKDE0dGggZWQuKS4gUGVhcnNvbi4gKE1hdGVyaTogQ29tcGFyaW5nIFotZGlzdHJpYnV0aW9uIGFuZCB0LWRpc3RyaWJ1dGlvbiBmb3IgbWVhbiBlc3RpbWF0aW9uKS4NCg0KNSAuIE5ld2JvbGQsIFAuLCBDYXJsc29uLCBXLiBMLiwgJiBUaG9ybmUsIEIuIE0uICgyMDEyKS4gU3RhdGlzdGljcyBmb3IgQnVzaW5lc3MgYW5kIEVjb25vbWljcy4gUGVhcnNvbi4NCg0KNiAuIE1jQ2xhdmUsIEouIFQuLCBCZW5zb24sIFAuIEcuLCAmIFNpbmNpY2gsIFQuICgyMDIxKS4gU3RhdGlzdGljcyBmb3IgQnVzaW5lc3MgYW5kIEVjb25vbWljcyAoMTR0aCBlZC4pLiBQZWFyc29uLiAoTWF0ZXJpOiBPbmUtU2lkZWQgQ29uZmlkZW5jZSBJbnRlcnZhbHMgZm9yIGEgUG9wdWxhdGlvbiBQcm9wb3J0aW9uKS4NCg0KNyAuIEFuZGVyc29uLCBELiBSLiwgU3dlZW5leSwgRC4gSi4sIFdpbGxpYW1zLCBULiBBLiwgQ2FtbSwgSi4gRC4sICYgQ29jaHJhbiwgSi4gSi4gKDIwMjApLiBTdGF0aXN0aWNzIGZvciBCdXNpbmVzcyAmIEVjb25vbWljcy4gQ2VuZ2FnZSBMZWFybmluZy4NCg==