`
Study Case 1: CI MEAN
(Z-TEST)
Confidence Interval (Selang Kepercayaan) adalah rentang nilai yang
diyakini mengandung nilai rata-rata populasi yang sebenarnya (\(\mu\)) berdasarkan data sampel.Penggunaan
Z-Test (Distribusi Normal Standar) dilakukan dalam kondisi “ideal” di
mana ketidakpastian sampel dapat diminimalisir oleh ukuran data atau
pengetahuan tentang populasi.
Syarat Penggunaan Z-TestAnda menggunakan Z-Test untuk mencari
Confidence Interval hanya jika:Standar deviasi populasi (\(\sigma\)) DIKETAHUI. Ini adalah syarat
mutlak yang membedakannya dengan T-Test.Ukuran sampel besar (\(n \ge 30\)). Berdasarkan Central Limit
Theorem, jika sampel besar, distribusi rata-rata sampel akan mendekati
distribusi normal.Data dipilih secara acak (Random Sampling).
Rumus CI Mean (Z-Test)Rumus umum untuk menghitung batas bawah dan
batas atas adalah:\[\bar{x} \pm z_{\alpha/2}
\cdot \left( \frac{\sigma}{\sqrt{n}} \right)\]Komponen
Rumus:\(\bar{x}\): Rata-rata sampel
(Point Estimate).\(z_{\alpha/2}\):
Nilai kritis Z berdasarkan tingkat kepercayaan (Confidence Level).\(\sigma\): Standar deviasi populasi.\(n\): Jumlah sampel.\(\frac{\sigma}{\sqrt{n}}\): Standard Error
(SE).\(z \cdot
\frac{\sigma}{\sqrt{n}}\): Margin of Error (MoE).
Tabel 1.3: Confidence Interval Mean (Z-Test, Versi Pastel)
|
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
|

. Study Case 2: CI MEAN
(T-TEST)
Standar deviasi populasi (\(\sigma\)) TIDAK diketahui. (Kita hanya
punya standar deviasi sampel, \(s\)).Ukuran sampel kecil (\(n < 30\)). Meskipun jika \(n \geq 30\) dan \(\sigma\) tidak diketahui, penggunaan T-test
tetap dianggap lebih akurat.Asumsi Normalitas: Data diasumsikan
berdistribusi normal atau mendekati normal.2. Rumus Confidence Interval
(T-Test)Rumus untuk mencari rentang rata-rata populasi (\(\mu\)) adalah:\[\bar{x} \pm t_{\alpha/2, df} \cdot \left(
\frac{s}{\sqrt{n}} \right)\]Keterangan Komponen:\(\bar{x}\): Rata-rata sampel (Point
Estimate).\(t_{\alpha/2, df}\): Nilai
kritis dari tabel distribusi-t.\(\alpha\): Tingkat signifikansi (misal: jika
kepercayaan 95%, maka \(\alpha =
0.05\)).\(df\): Degrees of
Freedom (Derajat Bebas), rumusnya \(n -
1\).\(s\): Standar deviasi
sampel.\(n\): Jumlah sampel.\(\frac{s}{\sqrt{n}}\): Standard Error
(SE).3. Langkah-Langkah MenghitungJika Anda mengerjakan studi kasus,
ikuti urutan ini:Hitung Rata-rata (\(\bar{x}\)): Jumlahkan semua data lalu bagi
dengan \(n\).Hitung Standar Deviasi
Sampel (\(s\)): Ukur sebaran data dari
rata-ratanya.Tentukan Derajat Bebas (\(df\)): Kurangi jumlah sampel dengan 1
(\(n - 1\)).Cari Nilai \(t\) di Tabel: Gunakan nilai \(df\) dan tingkat kepercayaan yang
diinginkan (misal 95% dua sisi).Hitung Margin of Error (MoE): Kalikan
nilai \(t\) dengan Standard
Error.Tentukan Rentang: (\(\bar{x} -
MoE\)) sampai (\(\bar{x} +
MoE\)).4. Contoh SederhanaMisalkan Anda menguji kekuatan beton
baru dengan sampel 10 buah (\(n=10,
df=9\)).Rata-rata kekuatan (\(\bar{x}\)) = 2500 psi.Standar deviasi
sampel (\(s\)) = 50 psi.Tingkat
kepercayaan 95% (\(\alpha =
0.05\)).Dari tabel-t, nilai \(t_{0.025,
9}\) adalah 2.262.Perhitungan:\[MoE =
2.262 \cdot \left( \frac{50}{\sqrt{10}} \right) \approx 2.262 \cdot
15.81 \approx 35.76\]Hasil CI: \(2500
\pm 35.76\) atau [2464.24, 2535.76].5. Mengapa Pakai \(n-1\)?Mungkin Anda bertanya-tanya mengapa
ada Degrees of Freedom. Secara teknis, ini dilakukan untuk mengoreksi
bias. Karena kita mengestimasi \(\mu\)
menggunakan \(\bar{x}\), kita
“kehilangan” satu derajat kebebasan untuk memastikan estimasi standar
deviasi kita tidak terlalu optimis (terlalu kecil).
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
|

. Study Case 3: CI
PROPORSI (A/B TESTING)
Dalam A/B Testing, kita biasanya membandingkan dua kelompok:
Kelompok A (Kontrol): Versi lama/asli.
Kelompok B (Variasi): Versi baru dengan perubahan tertentu.
CI Proporsi digunakan untuk menentukan seberapa yakin kita bahwa
perbedaan Conversion Rate (CR) antara kedua kelompok tersebut bukan
terjadi karena kebetulan, melainkan karena perubahan yang dilakukan.
Untuk menghitung CI Proporsi, kita membutuhkan data berikut dari
masing-masing kelompok:\(n\): Total
jumlah pengunjung/subjek.\(x\): Jumlah
sukses (misalnya: klik, beli, daftar).\(\hat{p}\): Proporsi sampel (\(\hat{p} = \frac{x}{n}\)).
Dalam A/B testing, fokus kita adalah pada selisih proporsi (\(p_1 - p_2\)). Rumus Confidence Interval
untuk selisih dua proporsi adalah:\[(p_1 -
p_2) \pm z_{\alpha/2} \cdot \sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1} +
\frac{\hat{p}_2(1-\hat{p}_2)}{n_2}}\]
\((p_1 - p_2)\): Estimasi titik
selisih conversion rate.\(z_{\alpha/2}\): Nilai kritis (misal: 1.96
untuk kepercayaan 95%).Bagian akar adalah Standard Error (SE) dari
selisih tersebut.
Tabel 3.1: CI Selisih Proporsi (B - A) - A/B Testing
|
Tingkat_Kepercayaan
|
Z_Score
|
Margin_of_Error
|
Lower_Bound
|
Upper_Bound
|
|
90%
|
1.6449
|
0.0423
|
0.0177
|
0.1023
|
|
95%
|
1.9600
|
0.0504
|
0.0096
|
0.1104
|
|
99%
|
2.5758
|
0.0662
|
-0.0062
|
0.1262
|

. Study Case 4:
PERBANDINGAN Z VS T
Memilih antara Uji Z dan Uji T adalah keputusan krusial dalam
analisis data. Perbedaan utamanya terletak pada ukuran sampel dan apakah
kita mengetahui standar deviasi populasi (\(\sigma\)).
standar deviasi populasi (\(\sigma\)) yang sebenarnya (jarang terjadi
di dunia nyata kecuali pada data historis/pabrik).Ukuran sampel Anda
besar (\(n \geq 30\)). Menurut Teorema
Limit Pusat, jika sampel cukup besar, distribusi rata-rata sampel akan
mendekati normal meskipun populasi aslinya tidak.Gunakan Uji T Jika:Anda
tidak tahu standar deviasi populasi (\(\sigma\)) dan harus mengestimasinya
menggunakan standar deviasi sampel (\(s\)).Ukuran sampel Anda kecil (\(n < 30\)).Distribusi T memiliki “ekor”
yang lebih tebal (leptokurtik) untuk mengompensasi ketidakpastian
tambahan karena
Meskipun terlihat mirip, perhatikan simbol yang digunakan:Uji Z:\[Z = \frac{\bar{x} -
\mu}{\frac{\sigma}{\sqrt{n}}}\]Uji T:\[T = \frac{\bar{x} -
\mu}{\frac{s}{\sqrt{n}}}\]\(\bar{x}\): Rata-rata sampel\(\mu\): Rata-rata populasi\(\sigma\): Standar deviasi populasi\(s\): Standar deviasi sampel\(n\): Ukuran sampel
Dalam Uji T, Anda memerlukan nilai Degrees of Freedom (Derajat Bebas)
untuk melihat tabel distribusi-t.Rumus: \(df =
n - 1\)Semakin besar nilai \(n\)
(dan \(df\)), bentuk distribusi-t akan
semakin mendekati distribusi-Z. Itulah sebabnya pada sampel di atas 30,
hasil Uji T seringkali memberikan kesimpulan yang mirip dengan Uji
Z.
Tabel 4.2: Confidence Interval Z-Test vs t-Test (Versi Crispim)
|
Tingkat Kepercayaan
|
Tes
|
Nilai Kritis
|
Batas Bawah
|
Batas Atas
|
Margin Error
|
|
90%
|
Tim A (Z-Test, \(\sigma\) Known)
|
1.644854
|
10.304
|
10.696
|
0.196
|
|
95%
|
Tim A (Z-Test, \(\sigma\) Known)
|
1.959964
|
10.266
|
10.734
|
0.234
|
|
99%
|
Tim A (Z-Test, \(\sigma\) Known)
|
2.575829
|
10.193
|
10.807
|
0.307
|
|
90%
|
Tim B (t-Test, \(s\) Used)
|
1.680230
|
10.300
|
10.700
|
0.200
|
|
95%
|
Tim B (t-Test, \(s\) Used)
|
2.015368
|
10.260
|
10.740
|
0.240
|
|
99%
|
Tim B (t-Test, \(s\) Used)
|
2.692278
|
10.179
|
10.821
|
0.321
|

. Study Case 5:
ONE-SIDED LOWER CI
Materi mengenai One-Sided Lower Confidence Interval (CI) atau Selang
Kepercayaan Batas Bawah Satu Sisi sangat penting dalam statistik,
terutama ketika kita hanya peduli pada nilai minimum yang mungkin dari
suatu parameter (seperti rata-rata atau proporsi).
Berikut adalah ringkasan materi untuk studi kasus Anda:
berbeda dengan selang kepercayaan dua sisi (yang memiliki batas bawah
dan atas), One-Sided Lower CI memberikan batas minimum yang masuk akal
bagi parameter populasi dengan tingkat kepercayaan tertentu (misalnya
95%).Dalam konteks ini, kita menyatakan bahwa nilai sebenarnya
“setidaknya” sebesar \(L\) (Lower
limit), dan batas atasnya adalah tak terhingga (\(\infty\)).Quality Control: Memastikan
kekuatan material tidak di bawah standar tertentu.
Analisis Keuntungan: Menentukan estimasi terendah dari laba
investasi.
Kesehatan: Memastikan kandungan nutrisi dalam makanan minimal
mencapai angka tertentu.
Untuk rata-rata populasi (\(\mu\))
dengan asumsi distribusi normal atau sampel besar (\(n > 30\)):\[Lower\ Limit = \bar{x} - (z_{\alpha} \cdot
\frac{\sigma}{\sqrt{n}})\] \(\bar{x}\): Rata-rata sampel.\(z_{\alpha}\): Nilai kritis dari tabel Z
(menggunakan \(\alpha\), bukan \(\alpha/2\) karena hanya satu sisi).\(\sigma\): Standar deviasi populasi (atau
\(s\) jika menggunakan standar deviasi
sampel).\(n\): Ukuran sampel.
Tabel 5.1: One-Sided Lower Confidence Interval untuk Proporsi
|
Tingkat_Kepercayaan
|
Z_Score_OneSided
|
Margin_of_Error
|
Lower_Bound
|
Target_Tercapai
|
|
90%
|
1.2816
|
0.0199
|
0.7201
|
TRUE
|
|
95%
|
1.6449
|
0.0255
|
0.7145
|
TRUE
|
|
99%
|
2.3263
|
0.0361
|
0.7039
|
TRUE
|

LS0tDQp0aXRsZTogIlN0dWR5IENhc2VzIg0Kc3VidGl0bGU6ICJDb25maWRlbmNlIEludGVydmFsfiBXZWVrIDEzIg0KYXV0aG9yOiAiT2N0YXZpYSBNYWlhIGRvIFJlZ28iDQpkYXRlOiAiMjAyNS0xMi0xNiINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiIA0KLS0tDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQpsaWJyYXJ5KG1hZ2ljaykNCmdhbWJhciA8LSBpbWFnZV9yZWFkKCJ+L3R1Z2FzIHdlZWsgMTEgfiBvY3RhdmlhL05FTlkuanBnIikNCmdhbWJhcg0KYGBgDQpgDQoNCg0KIyAgU3R1ZHkgQ2FzZSAxOiBDSSBNRUFOIChaLVRFU1QpDQpDb25maWRlbmNlIEludGVydmFsIChTZWxhbmcgS2VwZXJjYXlhYW4pIGFkYWxhaCByZW50YW5nIG5pbGFpIHlhbmcgZGl5YWtpbmkgbWVuZ2FuZHVuZyBuaWxhaSByYXRhLXJhdGEgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhICgkXG11JCkgYmVyZGFzYXJrYW4gZGF0YSBzYW1wZWwuUGVuZ2d1bmFhbiBaLVRlc3QgKERpc3RyaWJ1c2kgTm9ybWFsIFN0YW5kYXIpIGRpbGFrdWthbiBkYWxhbSBrb25kaXNpICJpZGVhbCIgZGkgbWFuYSBrZXRpZGFrcGFzdGlhbiBzYW1wZWwgZGFwYXQgZGltaW5pbWFsaXNpciBvbGVoIHVrdXJhbiBkYXRhIGF0YXUgcGVuZ2V0YWh1YW4gdGVudGFuZyBwb3B1bGFzaS4NCg0KMi4gU3lhcmF0IFBlbmdndW5hYW4gWi1UZXN0QW5kYSBtZW5nZ3VuYWthbiBaLVRlc3QgdW50dWsgbWVuY2FyaSBDb25maWRlbmNlIEludGVydmFsIGhhbnlhIGppa2E6U3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgRElLRVRBSFVJLiBJbmkgYWRhbGFoIHN5YXJhdCBtdXRsYWsgeWFuZyBtZW1iZWRha2FubnlhIGRlbmdhbiBULVRlc3QuVWt1cmFuIHNhbXBlbCBiZXNhciAoJG4gXGdlIDMwJCkuIEJlcmRhc2Fya2FuIENlbnRyYWwgTGltaXQgVGhlb3JlbSwgamlrYSBzYW1wZWwgYmVzYXIsIGRpc3RyaWJ1c2kgcmF0YS1yYXRhIHNhbXBlbCBha2FuIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbC5EYXRhIGRpcGlsaWggc2VjYXJhIGFjYWsgKFJhbmRvbSBTYW1wbGluZykuDQoNCjMuIFJ1bXVzIENJIE1lYW4gKFotVGVzdClSdW11cyB1bXVtIHVudHVrIG1lbmdoaXR1bmcgYmF0YXMgYmF3YWggZGFuIGJhdGFzIGF0YXMgYWRhbGFoOiQkXGJhcnt4fSBccG0gel97XGFscGhhLzJ9IFxjZG90IFxsZWZ0KCBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBccmlnaHQpJCRLb21wb25lbiBSdW11czokXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwgKFBvaW50IEVzdGltYXRlKS4kel97XGFscGhhLzJ9JDogTmlsYWkga3JpdGlzIFogYmVyZGFzYXJrYW4gdGluZ2thdCBrZXBlcmNheWFhbiAoQ29uZmlkZW5jZSBMZXZlbCkuJFxzaWdtYSQ6IFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaS4kbiQ6IEp1bWxhaCBzYW1wZWwuJFxmcmFje1xzaWdtYX17XHNxcnR7bn19JDogU3RhbmRhcmQgRXJyb3IgKFNFKS4keiBcY2RvdCBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSQ6IE1hcmdpbiBvZiBFcnJvciAoTW9FKS4NCg0KIA0KDQoNCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KDQoNCiMgUGFzdGlrYW4gQW5kYSB0ZWxhaCBtZW5naW5zdGFsIHBhY2thZ2VzIGluaSBqaWthIGJlbHVtDQojIGluc3RhbGwucGFja2FnZXMoYygidGlkeXZlcnNlIiwgImtuaXRyIiwgImthYmxlRXh0cmEiKSkNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KDQojIEZ1bmdzaSBrdXN0b20gdW50dWsgbWVtYnVhdCB0YWJlbCBkZW5nYW4gd2FybmEgcGFzdGVsDQp0YWJlbF9hZXN0aGV0aWMgPC0gZnVuY3Rpb24oZGF0YSwgY2FwdGlvbl90ZXh0KSB7DQogIGRhdGEgJT4lDQogICAga2FibGUoImh0bWwiLCBjYXB0aW9uID0gY2FwdGlvbl90ZXh0LCBhbGlnbiA9ICdjJywgZGlnaXRzID0gNCkgJT4lDQogICAga2FibGVfc3R5bGluZygNCiAgICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLA0KICAgICAgZnVsbF93aWR0aCA9IEYsDQogICAgICBwb3NpdGlvbiA9ICJjZW50ZXIiDQogICAgKSAlPiUNCiAgICByb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gIiM5MzcwREIiLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSAgICMgSGVhZGVyIHVuZ3UgcGFzdGVsDQogICAgcm93X3NwZWMoMTpucm93KGRhdGEpLCBiYWNrZ3JvdW5kID0gIiNFMEZGRkYiKSAgICAgICAgICAgICAjIElzaSBiaXJ1IG11ZGENCn0NCg0KIyAtLS0gU1RVREkgS0FTVVM6IENJIE1FQU4gKFotVEVTVCkgLS0tDQoNCiMjIERhdGENCnhfYmFyXzEgPC0gMTIuMA0Kc2lnbWFfMSA8LSA0LjUNCm5fMSA8LSAxMDANCnNlXzEgPC0gc2lnbWFfMSAvIHNxcnQobl8xKQ0KDQojIyBOaWxhaSBLcml0aXMgWg0Kel85MCA8LSBxbm9ybSgwLjk1KQ0Kel85NSA8LSBxbm9ybSgwLjk3NSkNCnpfOTkgPC0gcW5vcm0oMC45OTUpDQoNCiMjIFBlcmhpdHVuZ2FuIENJIGRhbiBUYWJlbA0KY2lfZGF0YV8xIDwtIHRpYmJsZSgNCiAgVGluZ2thdF9LZXBlcmNheWFhbiA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIFpfU2NvcmUgPSBjKHpfOTAsIHpfOTUsIHpfOTkpLA0KICBNYXJnaW5fb2ZfRXJyb3IgPSBaX1Njb3JlICogc2VfMSwNCiAgTG93ZXJfQm91bmQgPSB4X2Jhcl8xIC0gTWFyZ2luX29mX0Vycm9yLA0KICBVcHBlcl9Cb3VuZCA9IHhfYmFyXzEgKyBNYXJnaW5fb2ZfRXJyb3INCikNCg0KIyBNZW5hbXBpbGthbiBUYWJlbA0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMSwgIlRhYmVsIDEuMzogQ29uZmlkZW5jZSBJbnRlcnZhbCBNZWFuIChaLVRlc3QsIFZlcnNpICBQYXN0ZWwpIikNCg0KIyMgVmlzdWFsaXNhc2kgQ0kNCnBsb3RfMSA8LSBjaV9kYXRhXzEgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0geF9iYXJfMSwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gTG93ZXJfQm91bmQsIHhtYXggPSBVcHBlcl9Cb3VuZCksDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMywgc2l6ZSA9IDEuMiwgY29sb3IgPSAiI0ZGNjlCNCIpICsgIyBIb3QgUGluaw0KICBnZW9tX3BvaW50KGNvbG9yID0gIiM0MEUwRDAiLCBzaXplID0gMywgc2hhcGUgPSAxOSkgKyAgICAgICAgICMgVHVycXVvaXNlLCBsaW5na2FyYW4NCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0geF9iYXJfMSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiI0I4ODYwQiIpICsgIyBEYXJrIEdvbGRlbnJvZA0KICANCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAxLjM6IENvbmZpZGVuY2UgSW50ZXJ2YWwgWi1UZXN0IChWZXJzaSBDcmlzcGltIFBhc3RlbCkiLA0KICAgIHN1YnRpdGxlID0gIk1lYW4gVHJhbnNha3NpIEhhcmlhbiAoJFxcc2lnbWEkIERpa2V0YWh1aSkiLA0KICAgIHggPSAiUmF0YS1SYXRhIFRyYW5zYWtzaSAoU2F0dWFuKSIsDQogICAgeSA9ICJUaW5na2F0IEtlcGVyY2F5YWFuIg0KICApICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjODAwMDgwIiksICAgIyBQdXJwbGUNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiM0ODNEOEIiKSwgICAgICAgICAgICAgICAjIERhcmsgU2xhdGUgQmx1ZQ0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzkzNzBEQiIpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICIjRDNEM0QzIikNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIFBsb3QNCnByaW50KHBsb3RfMSkNCmBgYA0KDQojIC4gU3R1ZHkgQ2FzZSAyOiBDSSBNRUFOIChULVRFU1QpDQpTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKCRcc2lnbWEkKSBUSURBSyBkaWtldGFodWkuIChLaXRhIGhhbnlhIHB1bnlhIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwsICRzJCkuVWt1cmFuIHNhbXBlbCBrZWNpbCAoJG4gPCAzMCQpLiBNZXNraXB1biBqaWthICRuIFxnZXEgMzAkIGRhbiAkXHNpZ21hJCB0aWRhayBkaWtldGFodWksIHBlbmdndW5hYW4gVC10ZXN0IHRldGFwIGRpYW5nZ2FwIGxlYmloIGFrdXJhdC5Bc3Vtc2kgTm9ybWFsaXRhczogRGF0YSBkaWFzdW1zaWthbiBiZXJkaXN0cmlidXNpIG5vcm1hbCBhdGF1IG1lbmRla2F0aSBub3JtYWwuMi4gUnVtdXMgQ29uZmlkZW5jZSBJbnRlcnZhbCAoVC1UZXN0KVJ1bXVzIHVudHVrIG1lbmNhcmkgcmVudGFuZyByYXRhLXJhdGEgcG9wdWxhc2kgKCRcbXUkKSBhZGFsYWg6JCRcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwgZGZ9IFxjZG90IFxsZWZ0KCBcZnJhY3tzfXtcc3FydHtufX0gXHJpZ2h0KSQkS2V0ZXJhbmdhbiBLb21wb25lbjokXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwgKFBvaW50IEVzdGltYXRlKS4kdF97XGFscGhhLzIsIGRmfSQ6IE5pbGFpIGtyaXRpcyBkYXJpIHRhYmVsIGRpc3RyaWJ1c2ktdC4kXGFscGhhJDogVGluZ2thdCBzaWduaWZpa2Fuc2kgKG1pc2FsOiBqaWthIGtlcGVyY2F5YWFuIDk1JSwgbWFrYSAkXGFscGhhID0gMC4wNSQpLiRkZiQ6IERlZ3JlZXMgb2YgRnJlZWRvbSAoRGVyYWphdCBCZWJhcyksIHJ1bXVzbnlhICRuIC0gMSQuJHMkOiBTdGFuZGFyIGRldmlhc2kgc2FtcGVsLiRuJDogSnVtbGFoIHNhbXBlbC4kXGZyYWN7c317XHNxcnR7bn19JDogU3RhbmRhcmQgRXJyb3IgKFNFKS4zLiBMYW5na2FoLUxhbmdrYWggTWVuZ2hpdHVuZ0ppa2EgQW5kYSBtZW5nZXJqYWthbiBzdHVkaSBrYXN1cywgaWt1dGkgdXJ1dGFuIGluaTpIaXR1bmcgUmF0YS1yYXRhICgkXGJhcnt4fSQpOiBKdW1sYWhrYW4gc2VtdWEgZGF0YSBsYWx1IGJhZ2kgZGVuZ2FuICRuJC5IaXR1bmcgU3RhbmRhciBEZXZpYXNpIFNhbXBlbCAoJHMkKTogVWt1ciBzZWJhcmFuIGRhdGEgZGFyaSByYXRhLXJhdGFueWEuVGVudHVrYW4gRGVyYWphdCBCZWJhcyAoJGRmJCk6IEt1cmFuZ2kganVtbGFoIHNhbXBlbCBkZW5nYW4gMSAoJG4gLSAxJCkuQ2FyaSBOaWxhaSAkdCQgZGkgVGFiZWw6IEd1bmFrYW4gbmlsYWkgJGRmJCBkYW4gdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGRpaW5naW5rYW4gKG1pc2FsIDk1JSBkdWEgc2lzaSkuSGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKTogS2FsaWthbiBuaWxhaSAkdCQgZGVuZ2FuIFN0YW5kYXJkIEVycm9yLlRlbnR1a2FuIFJlbnRhbmc6ICgkXGJhcnt4fSAtIE1vRSQpIHNhbXBhaSAoJFxiYXJ7eH0gKyBNb0UkKS40LiBDb250b2ggU2VkZXJoYW5hTWlzYWxrYW4gQW5kYSBtZW5ndWppIGtla3VhdGFuIGJldG9uIGJhcnUgZGVuZ2FuIHNhbXBlbCAxMCBidWFoICgkbj0xMCwgZGY9OSQpLlJhdGEtcmF0YSBrZWt1YXRhbiAoJFxiYXJ7eH0kKSA9IDI1MDAgcHNpLlN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKCRzJCkgPSA1MCBwc2kuVGluZ2thdCBrZXBlcmNheWFhbiA5NSUgKCRcYWxwaGEgPSAwLjA1JCkuRGFyaSB0YWJlbC10LCBuaWxhaSAkdF97MC4wMjUsIDl9JCBhZGFsYWggMi4yNjIuUGVyaGl0dW5nYW46JCRNb0UgPSAyLjI2MiBcY2RvdCBcbGVmdCggXGZyYWN7NTB9e1xzcXJ0ezEwfX0gXHJpZ2h0KSBcYXBwcm94IDIuMjYyIFxjZG90IDE1LjgxIFxhcHByb3ggMzUuNzYkJEhhc2lsIENJOiAkMjUwMCBccG0gMzUuNzYkIGF0YXUgWzI0NjQuMjQsIDI1MzUuNzZdLjUuIE1lbmdhcGEgUGFrYWkgJG4tMSQ/TXVuZ2tpbiBBbmRhIGJlcnRhbnlhLXRhbnlhIG1lbmdhcGEgYWRhIERlZ3JlZXMgb2YgRnJlZWRvbS4gU2VjYXJhIHRla25pcywgaW5pIGRpbGFrdWthbiB1bnR1ayBtZW5nb3Jla3NpIGJpYXMuIEthcmVuYSBraXRhIG1lbmdlc3RpbWFzaSAkXG11JCBtZW5nZ3VuYWthbiAkXGJhcnt4fSQsIGtpdGEgImtlaGlsYW5nYW4iIHNhdHUgZGVyYWphdCBrZWJlYmFzYW4gdW50dWsgbWVtYXN0aWthbiBlc3RpbWFzaSBzdGFuZGFyIGRldmlhc2kga2l0YSB0aWRhayB0ZXJsYWx1IG9wdGltaXMgKHRlcmxhbHUga2VjaWwpLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCiMgUGFzdGlrYW4gcGFja2FnZXMgc3VkYWggdGVyaW5zdGFsDQojIGluc3RhbGwucGFja2FnZXMoYygidGlkeXZlcnNlIiwgImtuaXRyIiwgImthYmxlRXh0cmEiKSkNCiMgRGF0YQ0KZGF0YV90dWdhc19zZWxlc2FpIDwtIGMoOC40LCA3LjksIDkuMSwgOC43LCA4LjIsIDkuMCwgNy44LCA4LjUsIDguOSwgOC4xLCA4LjYsIDguMykNCm5fMiA8LSBsZW5ndGgoZGF0YV90dWdhc19zZWxlc2FpKQ0KeF9iYXJfMiA8LSBtZWFuKGRhdGFfdHVnYXNfc2VsZXNhaSkNCnNfMiA8LSBzZChkYXRhX3R1Z2FzX3NlbGVzYWkpDQpkZl8yIDwtIG5fMiAtIDENCnNlXzIgPC0gc18yIC8gc3FydChuXzIpDQoNCiMjIE5pbGFpIEtyaXRpcyBUDQp0XzkwIDwtIHF0KDAuOTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDkwJSAoYWxwaGEvMiA9IDAuMDUpDQp0Xzk1IDwtIHF0KDAuOTc1LCBkZiA9IGRmXzIpICMgVC1zY29yZSB1bnR1ayA5NSUgKGFscGhhLzIgPSAwLjAyNSkNCnRfOTkgPC0gcXQoMC45OTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDk5JSAoYWxwaGEvMiA9IDAuMDA1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSBkYW4gVGFiZWwNCmNpX2RhdGFfMiA8LSB0aWJibGUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBUX1Njb3JlID0gYyh0XzkwLCB0Xzk1LCB0Xzk5KSwNCiAgTWFyZ2luX29mX0Vycm9yID0gVF9TY29yZSAqIHNlXzIsDQogIExvd2VyX0JvdW5kID0geF9iYXJfMiAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSB4X2Jhcl8yICsgTWFyZ2luX29mX0Vycm9yDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgMg0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMiwgIlRhYmVsIDIuMTogQ29uZmlkZW5jZSBJbnRlcnZhbCBNZWFuICh0LVRlc3QsIFNpZ21hIFRpZGFrIERpa2V0YWh1aSkiKQ0KDQojIyBWaXN1YWxpc2FzaSBTQyAyOiBQZXJiYW5kaW5nYW4gSW50ZXJ2YWwNCnBsb3RfMiA8LSBjaV9kYXRhXzIgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0geF9iYXJfMiwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogICMgSW50ZXJ2YWwgSG9yaXpvbnRhbCAoRXJyb3IgQmFyKQ0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyX0JvdW5kLCB4bWF4ID0gVXBwZXJfQm91bmQpLA0KICAgICAgICAgICAgICAgICBoZWlnaHQgPSAwLjMsIHNpemUgPSAxLjIsIGNvbG9yID0gIiMwMDgwODAiKSArICMgV2FybmEgVGVhbA0KICAjIFRpdGlrIFJhdGEtcmF0YSBTYW1wZWwNCiAgZ2VvbV9wb2ludChjb2xvciA9ICIjYjMwMDAwIiwgc2l6ZSA9IDMsIHNoYXBlID0gMTkpICsNCiAgIyBHYXJpcyBWZXJ0aWthbCB1bnR1ayBNZWFuDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHhfYmFyXzIsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImdyYXk1MCIpICsNCiAgDQogICMgRXN0ZXRpa2EgUGxvdA0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIDIuMTogUGVyYmFuZGluZ2FuIENvbmZpZGVuY2UgSW50ZXJ2YWwgdC1UZXN0IiwNCiAgICBzdWJ0aXRsZSA9ICJXYWt0dSBQZW55ZWxlc2FpYW4gVHVnYXMgKFNhbXBlbCBLZWNpbCwgJFxcc2lnbWEkIFRpZGFrIERpa2V0YWh1aSkiLA0KICAgIHggPSAiUmF0YS1SYXRhIFdha3R1IFBlbnllbGVzYWlhbiAoTWVuaXQpIiwNCiAgICB5ID0gIlRpbmdrYXQgS2VwZXJjYXlhYW4iDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiNiMzAwMDAiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyYXkzMCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiksDQogICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIsIGNvbG9yID0gImdyYXk5MCIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBQbG90IFNDIDINCnByaW50KHBsb3RfMikNCmBgYA0KDQojIC4gU3R1ZHkgQ2FzZSAzOiBDSSBQUk9QT1JTSSAoQS9CIFRFU1RJTkcpDQoNCkRhbGFtIEEvQiBUZXN0aW5nLCBraXRhIGJpYXNhbnlhIG1lbWJhbmRpbmdrYW4gZHVhIGtlbG9tcG9rOg0KDQpLZWxvbXBvayBBIChLb250cm9sKTogVmVyc2kgbGFtYS9hc2xpLg0KDQpLZWxvbXBvayBCIChWYXJpYXNpKTogVmVyc2kgYmFydSBkZW5nYW4gcGVydWJhaGFuIHRlcnRlbnR1Lg0KDQpDSSBQcm9wb3JzaSBkaWd1bmFrYW4gdW50dWsgbWVuZW50dWthbiBzZWJlcmFwYSB5YWtpbiBraXRhIGJhaHdhIHBlcmJlZGFhbiBDb252ZXJzaW9uIFJhdGUgKENSKSBhbnRhcmEga2VkdWEga2Vsb21wb2sgdGVyc2VidXQgYnVrYW4gdGVyamFkaSBrYXJlbmEga2ViZXR1bGFuLCBtZWxhaW5rYW4ga2FyZW5hIHBlcnViYWhhbiB5YW5nIGRpbGFrdWthbi4NCg0KDQpVbnR1ayBtZW5naGl0dW5nIENJIFByb3BvcnNpLCBraXRhIG1lbWJ1dHVoa2FuIGRhdGEgYmVyaWt1dCBkYXJpIG1hc2luZy1tYXNpbmcga2Vsb21wb2s6JG4kOiBUb3RhbCBqdW1sYWggcGVuZ3VuanVuZy9zdWJqZWsuJHgkOiBKdW1sYWggc3Vrc2VzIChtaXNhbG55YToga2xpaywgYmVsaSwgZGFmdGFyKS4kXGhhdHtwfSQ6IFByb3BvcnNpIHNhbXBlbCAoJFxoYXR7cH0gPSBcZnJhY3t4fXtufSQpLg0KDQpEYWxhbSBBL0IgdGVzdGluZywgZm9rdXMga2l0YSBhZGFsYWggcGFkYSBzZWxpc2loIHByb3BvcnNpICgkcF8xIC0gcF8yJCkuIFJ1bXVzIENvbmZpZGVuY2UgSW50ZXJ2YWwgdW50dWsgc2VsaXNpaCBkdWEgcHJvcG9yc2kgYWRhbGFoOiQkKHBfMSAtIHBfMikgXHBtIHpfe1xhbHBoYS8yfSBcY2RvdCBcc3FydHtcZnJhY3tcaGF0e3B9XzEoMS1caGF0e3B9XzEpfXtuXzF9ICsgXGZyYWN7XGhhdHtwfV8yKDEtXGhhdHtwfV8yKX17bl8yfX0kJA0KDQokKHBfMSAtIHBfMikkOiBFc3RpbWFzaSB0aXRpayBzZWxpc2loIGNvbnZlcnNpb24gcmF0ZS4kel97XGFscGhhLzJ9JDogTmlsYWkga3JpdGlzIChtaXNhbDogMS45NiB1bnR1ayBrZXBlcmNheWFhbiA5NSUpLkJhZ2lhbiBha2FyIGFkYWxhaCBTdGFuZGFyZCBFcnJvciAoU0UpIGRhcmkgc2VsaXNpaCB0ZXJzZWJ1dC4NCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCiMgLS0tIFNUVURZIENBU0UgMzogQ0kgU0VMSVNJSCBQUk9QT1JTSSAoQS9CIFRFU1RJTkcpIC0tLQ0KDQojIyBEYXRhDQojIEtlbG9tcG9rIEEgKFZlcnNpIExhbWEpDQpuX0EgPC0gNTAwDQp4X0EgPC0gOTANCnBfaGF0X0EgPC0geF9BIC8gbl9BICAjIENSOiAxOCUNCg0KIyBLZWxvbXBvayBCIChWZXJzaSBCYXJ1KQ0Kbl9CIDwtIDUwMA0KeF9CIDwtIDEyMA0KcF9oYXRfQiA8LSB4X0IgLyBuX0IgICMgQ1I6IDI0JQ0KDQojIFNlbGlzaWggUHJvcG9yc2kgKFBvaW50IEVzdGltYXRlKQ0KZF9oYXQgPC0gcF9oYXRfQiAtIHBfaGF0X0ENCg0KIyMgU3RhbmRhcmQgRXJyb3IgdW50dWsgU2VsaXNpaCBEdWEgUHJvcG9yc2kNCnNlX2RpZmYgPC0gc3FydCgocF9oYXRfQSAqICgxIC0gcF9oYXRfQSkgLyBuX0EpICsgKHBfaGF0X0IgKiAoMSAtIHBfaGF0X0IpIC8gbl9CKSkNCg0KIyMgTmlsYWkgS3JpdGlzIFoNCnpfOTAgPC0gcW5vcm0oMC45NSkNCnpfOTUgPC0gcW5vcm0oMC45NzUpDQp6Xzk5IDwtIHFub3JtKDAuOTk1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSB1bnR1ayBTZWxpc2loDQpjaV9hYl90ZXN0aW5nIDwtIHRpYmJsZSgNCiAgVGluZ2thdF9LZXBlcmNheWFhbiA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIFpfU2NvcmUgPSBjKHpfOTAsIHpfOTUsIHpfOTkpLA0KICBNYXJnaW5fb2ZfRXJyb3IgPSBaX1Njb3JlICogc2VfZGlmZiwNCiAgTG93ZXJfQm91bmQgPSBkX2hhdCAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSBkX2hhdCArIE1hcmdpbl9vZl9FcnJvcg0KKQ0KDQojIE1lbmFtcGlsa2FuIFRhYmVsDQp0YWJlbF9hZXN0aGV0aWMoY2lfYWJfdGVzdGluZywgIlRhYmVsIDMuMTogQ0kgU2VsaXNpaCBQcm9wb3JzaSAoQiAtIEEpIC0gQS9CIFRlc3RpbmciKQ0KDQojIyBWaXN1YWxpc2FzaSBTZWxpc2loIChVcGxpZnQpDQpwbG90XzNfdXBkYXRlZCA8LSBjaV9hYl90ZXN0aW5nICU+JQ0KICBtdXRhdGUoVGluZ2thdF9LZXBlcmNheWFhbiA9IGZhY3RvcihUaW5na2F0X0tlcGVyY2F5YWFuLCBsZXZlbHMgPSBjKCI5OSUiLCAiOTUlIiwgIjkwJSIpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGRfaGF0LCB5ID0gVGluZ2thdF9LZXBlcmNheWFhbikpICsNCiAgIyBHYXJpcyBOZXRyYWwgKDAlKSAtIEppa2EgaW50ZXJ2YWwgbWVsZXdhdGkgZ2FyaXMgaW5pLCBiZXJhcnRpIHRpZGFrIGFkYSBwZXJiZWRhYW4gc2lnbmlmaWthbg0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvciA9ICJyZWQiLCBzaXplID0gMSkgKw0KICAjIEludGVydmFsIFNlbGlzaWgNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBMb3dlcl9Cb3VuZCwgeG1heCA9IFVwcGVyX0JvdW5kKSwgDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMywgc2l6ZSA9IDEuMiwgY29sb3IgPSAiIzhBMkJFMiIpICsNCiAgIyBUaXRpayBFc3RpbWFzaSBTZWxpc2loDQogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMykgKw0KICANCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAzLjE6IEVzdGltYXNpIFNlbGlzaWggQ29udmVyc2lvbiBSYXRlIChCIC0gQSkiLA0KICAgIHN1YnRpdGxlID0gcGFzdGUoIlVwbGlmdCBUZXJkZXRla3NpOiIsIHJvdW5kKGRfaGF0ICogMTAwLCAyKSwgIiUiKSwNCiAgICB4ID0gIlNlbGlzaWggUHJvcG9yc2kgKEIgLSBBKSIsDQogICAgeSA9ICJUaW5na2F0IEtlcGVyY2F5YWFuIg0KICApICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiM0QjAwODIiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpDQogICkNCg0KcHJpbnQocGxvdF8zX3VwZGF0ZWQpDQoNCmBgYA0KDQojIC4gU3R1ZHkgQ2FzZSA0OiBQRVJCQU5ESU5HQU4gWiBWUyBUIA0KTWVtaWxpaCBhbnRhcmEgVWppIFogZGFuIFVqaSBUIGFkYWxhaCBrZXB1dHVzYW4ga3J1c2lhbCBkYWxhbSBhbmFsaXNpcyBkYXRhLiBQZXJiZWRhYW4gdXRhbWFueWEgdGVybGV0YWsgcGFkYSB1a3VyYW4gc2FtcGVsIGRhbiBhcGFrYWgga2l0YSBtZW5nZXRhaHVpIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpLg0KDQoNCg0KIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIHlhbmcgc2ViZW5hcm55YSAoamFyYW5nIHRlcmphZGkgZGkgZHVuaWEgbnlhdGEga2VjdWFsaSBwYWRhIGRhdGEgaGlzdG9yaXMvcGFicmlrKS5Va3VyYW4gc2FtcGVsIEFuZGEgYmVzYXIgKCRuIFxnZXEgMzAkKS4gTWVudXJ1dCBUZW9yZW1hIExpbWl0IFB1c2F0LCBqaWthIHNhbXBlbCBjdWt1cCBiZXNhciwgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGFrYW4gbWVuZGVrYXRpIG5vcm1hbCBtZXNraXB1biBwb3B1bGFzaSBhc2xpbnlhIHRpZGFrLkd1bmFrYW4gVWppIFQgSmlrYTpBbmRhIHRpZGFrIHRhaHUgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgZGFuIGhhcnVzIG1lbmdlc3RpbWFzaW55YSBtZW5nZ3VuYWthbiBzdGFuZGFyIGRldmlhc2kgc2FtcGVsICgkcyQpLlVrdXJhbiBzYW1wZWwgQW5kYSBrZWNpbCAoJG4gPCAzMCQpLkRpc3RyaWJ1c2kgVCBtZW1pbGlraSAiZWtvciIgeWFuZyBsZWJpaCB0ZWJhbCAobGVwdG9rdXJ0aWspIHVudHVrIG1lbmdvbXBlbnNhc2kga2V0aWRha3Bhc3RpYW4gdGFtYmFoYW4ga2FyZW5hDQogDQogDQoNCiBNZXNraXB1biB0ZXJsaWhhdCBtaXJpcCwgcGVyaGF0aWthbiBzaW1ib2wgeWFuZyBkaWd1bmFrYW46VWppIFo6JCRaID0gXGZyYWN7XGJhcnt4fSAtIFxtdX17XGZyYWN7XHNpZ21hfXtcc3FydHtufX19JCRVamkgVDokJFQgPSBcZnJhY3tcYmFye3h9IC0gXG11fXtcZnJhY3tzfXtcc3FydHtufX19JCQkXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwkXG11JDogUmF0YS1yYXRhIHBvcHVsYXNpJFxzaWdtYSQ6IFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSRzJDogU3RhbmRhciBkZXZpYXNpIHNhbXBlbCRuJDogVWt1cmFuIHNhbXBlbA0KIA0KIA0KIA0KIERhbGFtIFVqaSBULCBBbmRhIG1lbWVybHVrYW4gbmlsYWkgRGVncmVlcyBvZiBGcmVlZG9tIChEZXJhamF0IEJlYmFzKSB1bnR1ayBtZWxpaGF0IHRhYmVsIGRpc3RyaWJ1c2ktdC5SdW11czogJGRmID0gbiAtIDEkU2VtYWtpbiBiZXNhciBuaWxhaSAkbiQgKGRhbiAkZGYkKSwgYmVudHVrIGRpc3RyaWJ1c2ktdCBha2FuIHNlbWFraW4gbWVuZGVrYXRpIGRpc3RyaWJ1c2ktWi4gSXR1bGFoIHNlYmFibnlhIHBhZGEgc2FtcGVsIGRpIGF0YXMgMzAsIGhhc2lsIFVqaSBUIHNlcmluZ2thbGkgbWVtYmVyaWthbiBrZXNpbXB1bGFuIHlhbmcgbWlyaXAgZGVuZ2FuIFVqaSBaLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KDQoNCiMjIERhdGENCnhfYmFyXzQgPC0gMTAuNQ0Kc2RfNCA8LSAwLjggIyBTaW1wYW5nYW4gQmFrdQ0Kbl80IDwtIDQ1DQpkZl80IDwtIG5fNCAtIDENCnNlXzQgPC0gc2RfNCAvIHNxcnQobl80KQ0KDQojIyBOaWxhaSBLcml0aXMNCiMgWi1TY29yZSAoVGltIEEpDQp6X3Njb3Jlc180IDwtIGMocW5vcm0oMC45NSksIHFub3JtKDAuOTc1KSwgcW5vcm0oMC45OTUpKQ0KIyBULVNjb3JlIChUaW0gQikNCnRfc2NvcmVzXzQgPC0gYyhxdCgwLjk1LCBkZiA9IGRmXzQpLCBxdCgwLjk3NSwgZGYgPSBkZl80KSwgcXQoMC45OTUsIGRmID0gZGZfNCkpDQoNCiMjIFBlcmhpdHVuZ2FuIENJIGRhbiBUYWJlbA0KY2lfdGltX2EgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgVGVzID0gIlRpbSBBIChaLVRlc3QsICRcXHNpZ21hJCBLbm93bikiLA0KICBDcml0aWNhbF9WYWx1ZSA9IHpfc2NvcmVzXzQsDQogIExvd2VyX0JvdW5kID0geF9iYXJfNCAtICh6X3Njb3Jlc180ICogc2VfNCksDQogIFVwcGVyX0JvdW5kID0geF9iYXJfNCArICh6X3Njb3Jlc180ICogc2VfNCkNCikNCg0KY2lfdGltX2IgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgVGVzID0gIlRpbSBCICh0LVRlc3QsICRzJCBVc2VkKSIsDQogIENyaXRpY2FsX1ZhbHVlID0gdF9zY29yZXNfNCwNCiAgTG93ZXJfQm91bmQgPSB4X2Jhcl80IC0gKHRfc2NvcmVzXzQgKiBzZV80KSwNCiAgVXBwZXJfQm91bmQgPSB4X2Jhcl80ICsgKHRfc2NvcmVzXzQgKiBzZV80KQ0KKQ0KDQpjaV9kYXRhXzQgPC0gYmluZF9yb3dzKGNpX3RpbV9hLCBjaV90aW1fYikgJT4lDQogIG11dGF0ZShNRSA9IENyaXRpY2FsX1ZhbHVlICogc2VfNCkNCiMjIE1lbWJ1YXQgVGFiZWwgU0MgNCBkZW5nYW4gZ2F5YSBiYXJ1DQpjaV9kYXRhXzQgPC0gYmluZF9yb3dzKGNpX3RpbV9hLCBjaV90aW1fYikgJT4lDQogIG11dGF0ZShNRSA9IHJvdW5kKENyaXRpY2FsX1ZhbHVlICogc2VfNCwgMyksDQogICAgICAgICBMb3dlcl9Cb3VuZCA9IHJvdW5kKExvd2VyX0JvdW5kLCAzKSwNCiAgICAgICAgIFVwcGVyX0JvdW5kID0gcm91bmQoVXBwZXJfQm91bmQsIDMpKQ0KDQojIFRhYmVsIGRlbmdhbiBrYWJsZUV4dHJhIHVudHVrIGVzdGV0aWthIGJlcmJlZGENCmxpYnJhcnkoa2FibGVFeHRyYSkNCg0KY2lfZGF0YV80ICU+JQ0KICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSAiVGFiZWwgNC4yOiBDb25maWRlbmNlIEludGVydmFsIFotVGVzdCB2cyB0LVRlc3QgKFZlcnNpIENyaXNwaW0pIiwNCiAgICAgICAgY29sLm5hbWVzID0gYygiVGluZ2thdCBLZXBlcmNheWFhbiIsICJUZXMiLCAiTmlsYWkgS3JpdGlzIiwgIkJhdGFzIEJhd2FoIiwgIkJhdGFzIEF0YXMiLCAiTWFyZ2luIEVycm9yIikpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLA0KICAgICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGQUxTRSwNCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICJjZW50ZXIiKSAlPiUNCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGJhY2tncm91bmQgPSAiIzFFOTBGRiIsIGNvbG9yID0gIndoaXRlIikgJT4lICAgIyBIZWFkZXIgYmlydQ0KICByb3dfc3BlYygxOm5yb3coY2lfZGF0YV80KSwgYmFja2dyb3VuZCA9ICIjRjBGOEZGIikgJT4lICAgICAgICAgICAgICAgICAjIElzaSBiaXJ1IG11ZGENCiAgY29sdW1uX3NwZWMoMzo2LCBjb2xvciA9ICIjMDAwMDgwIikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbmdrYSBuYXZ5DQoNCiMjIFZpc3VhbGlzYXNpIFNDIDQ6IFZlcnNpICAoc2VtdWEgZXN0ZXRpa2EgZGl1YmFoKQ0KcGxvdF80IDwtIGNpX2RhdGFfNCAlPiUNCiAgbXV0YXRlKA0KICAgIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBmYWN0b3IoVGluZ2thdF9LZXBlcmNheWFhbiwgbGV2ZWxzID0gYygiOTklIiwgIjk1JSIsICI5MCUiKSksDQogICAgR3J1cCA9IHBhc3RlKFRlcywgVGluZ2thdF9LZXBlcmNheWFhbiwgc2VwID0gIiAtICIpDQogICkgJT4lDQogIGdncGxvdChhZXMoeCA9IHhfYmFyXzQsIHkgPSBHcnVwLCBjb2xvciA9IFRlcykpICsNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBMb3dlcl9Cb3VuZCwgeG1heCA9IFVwcGVyX0JvdW5kKSwNCiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMC40LCBzaXplID0gMS41KSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDQsIHNoYXBlID0gMTcpICsgIyBzZWdpdGlnYSwgYnVrYW4gYnVsYXQNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0geF9iYXJfNCwgbGluZXR5cGUgPSAiZG90ZGFzaCIsIGNvbG9yID0gIiNEQzE0M0MiKSArICMgQ3JpbXNvbg0KICANCiAgIyBXYXJuYSBiYXJ1IHVudHVrIFRpbSBBICYgVGltIEINCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNGRkQ3MDAiLCAiIzAwOEI4QiIpKSArICMgR29sZCB2cyBEYXJrIEN5YW4NCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSA0LjE6IENJIFotVGVzdCB2cyB0LVRlc3QgKFZlcnNpIENyaXNwaW0pIiwNCiAgICBzdWJ0aXRsZSA9ICJ0LVRlc3QgKFRpbSBCKSB0ZXRhcCBsZWJpaCBsZWJhciIsDQogICAgeCA9ICJBUEkgTGF0ZW5jeSAobXMpIiwNCiAgICB5ID0gIkdydXAgQW5hbGlzaXMgJiBDb25maWRlbmNlIExldmVsIg0KICApICsNCiAgdGhlbWVfY2xhc3NpYygpICsgIyBnYW50aSB0ZW1hDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzRCMDA4MiIsIHNpemUgPSAxNCksICAgIyBJbmRpZ28NCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMyRjRGNEYiLCBzaXplID0gMTEpLCAgICAgICAgICAgICAgICMgRGFyayBTbGF0ZSBHcmF5DQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIsIGNvbG9yID0gIiMwMDAwODAiKSwgICAgICAgICAgICAjIE5hdnkNCiAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGluZGFoIGxlZ2VuZA0KICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI0Y1RjVGNSIsIGNvbG9yID0gIiNDQ0NDQ0MiKSAgICAgIyBiYWNrZ3JvdW5kIGxlZ2VuZA0KICApDQoNCiMgTWVuYW1waWxrYW4gUGxvdCBTQyA0DQpwcmludChwbG90XzQpDQpgYGANCg0KIyAuIFN0dWR5IENhc2UgNTogT05FLVNJREVEIExPV0VSIENJDQoNCk1hdGVyaSBtZW5nZW5haSBPbmUtU2lkZWQgTG93ZXIgQ29uZmlkZW5jZSBJbnRlcnZhbCAoQ0kpIGF0YXUgU2VsYW5nIEtlcGVyY2F5YWFuIEJhdGFzIEJhd2FoIFNhdHUgU2lzaSBzYW5nYXQgcGVudGluZyBkYWxhbSBzdGF0aXN0aWssIHRlcnV0YW1hIGtldGlrYSBraXRhIGhhbnlhIHBlZHVsaSBwYWRhIG5pbGFpIG1pbmltdW0geWFuZyBtdW5na2luIGRhcmkgc3VhdHUgcGFyYW1ldGVyIChzZXBlcnRpIHJhdGEtcmF0YSBhdGF1IHByb3BvcnNpKS4NCg0KQmVyaWt1dCBhZGFsYWggcmluZ2thc2FuIG1hdGVyaSB1bnR1ayBzdHVkaSBrYXN1cyBBbmRhOg0KDQpiZXJiZWRhIGRlbmdhbiBzZWxhbmcga2VwZXJjYXlhYW4gZHVhIHNpc2kgKHlhbmcgbWVtaWxpa2kgYmF0YXMgYmF3YWggZGFuIGF0YXMpLCBPbmUtU2lkZWQgTG93ZXIgQ0kgbWVtYmVyaWthbiBiYXRhcyBtaW5pbXVtIHlhbmcgbWFzdWsgYWthbCBiYWdpIHBhcmFtZXRlciBwb3B1bGFzaSBkZW5nYW4gdGluZ2thdCBrZXBlcmNheWFhbiB0ZXJ0ZW50dSAobWlzYWxueWEgOTUlKS5EYWxhbSBrb250ZWtzIGluaSwga2l0YSBtZW55YXRha2FuIGJhaHdhIG5pbGFpIHNlYmVuYXJueWEgInNldGlkYWtueWEiIHNlYmVzYXIgJEwkIChMb3dlciBsaW1pdCksIGRhbiBiYXRhcyBhdGFzbnlhIGFkYWxhaCB0YWsgdGVyaGluZ2dhICgkXGluZnR5JCkuUXVhbGl0eSBDb250cm9sOiBNZW1hc3Rpa2FuIGtla3VhdGFuIG1hdGVyaWFsIHRpZGFrIGRpIGJhd2FoIHN0YW5kYXIgdGVydGVudHUuDQoNCkFuYWxpc2lzIEtldW50dW5nYW46IE1lbmVudHVrYW4gZXN0aW1hc2kgdGVyZW5kYWggZGFyaSBsYWJhIGludmVzdGFzaS4NCg0KS2VzZWhhdGFuOiBNZW1hc3Rpa2FuIGthbmR1bmdhbiBudXRyaXNpIGRhbGFtIG1ha2FuYW4gbWluaW1hbCBtZW5jYXBhaSBhbmdrYSB0ZXJ0ZW50dS4NCg0KVW50dWsgcmF0YS1yYXRhIHBvcHVsYXNpICgkXG11JCkgZGVuZ2FuIGFzdW1zaSBkaXN0cmlidXNpIG5vcm1hbCBhdGF1IHNhbXBlbCBiZXNhciAoJG4gPiAzMCQpOiQkTG93ZXJcIExpbWl0ID0gXGJhcnt4fSAtICh6X3tcYWxwaGF9IFxjZG90IFxmcmFje1xzaWdtYX17XHNxcnR7bn19KSQkDQokXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwuJHpfe1xhbHBoYX0kOiBOaWxhaSBrcml0aXMgZGFyaSB0YWJlbCBaIChtZW5nZ3VuYWthbiAkXGFscGhhJCwgYnVrYW4gJFxhbHBoYS8yJCBrYXJlbmEgaGFueWEgc2F0dSBzaXNpKS4kXHNpZ21hJDogU3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIChhdGF1ICRzJCBqaWthIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwpLiRuJDogVWt1cmFuIHNhbXBlbC4NCg0KDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCg0KIyMgRGF0YQ0Kbl81IDwtIDgwMA0KeF81IDwtIDU5Mg0KcF9oYXRfNSA8LSB4XzUgLyBuXzUNCnRhcmdldF9wcm9wIDwtIDAuNzANCg0KIyMgU3RhbmRhcmQgRXJyb3INCnNlXzUgPC0gc3FydChwX2hhdF81ICogKDEgLSBwX2hhdF81KSAvIG5fNSkNCg0KIyMgTmlsYWkgS3JpdGlzIFogKE9uZS1TaWRlZDogWl9hbHBoYSkNCnpfOTBfb25lIDwtIHFub3JtKDAuOTApICMgWi1zY29yZSB1bnR1ayA5MCUgKGFscGhhID0gMC4xMCkNCnpfOTVfb25lIDwtIHFub3JtKDAuOTUpICMgWi1zY29yZSB1bnR1ayA5NSUgKGFscGhhID0gMC4wNSkNCnpfOTlfb25lIDwtIHFub3JtKDAuOTkpICMgWi1zY29yZSB1bnR1ayA5OSUgKGFscGhhID0gMC4wMSkNCg0KIyMgUGVyaGl0dW5nYW4gQ0kgZGFuIFRhYmVsDQpjaV9kYXRhXzUgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgWl9TY29yZV9PbmVTaWRlZCA9IGMoel85MF9vbmUsIHpfOTVfb25lLCB6Xzk5X29uZSksDQogIE1hcmdpbl9vZl9FcnJvciA9IFpfU2NvcmVfT25lU2lkZWQgKiBzZV81LA0KICBMb3dlcl9Cb3VuZCA9IHBfaGF0XzUgLSBNYXJnaW5fb2ZfRXJyb3IsDQogIFRhcmdldF9UZXJjYXBhaSA9IExvd2VyX0JvdW5kID49IHRhcmdldF9wcm9wDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgNQ0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfNSwgIlRhYmVsIDUuMTogT25lLVNpZGVkIExvd2VyIENvbmZpZGVuY2UgSW50ZXJ2YWwgdW50dWsgUHJvcG9yc2kiKQ0KDQoNCiMjIFZpc3VhbGlzYXNpIFNDIDU6IExvd2VyIEJvdW5kcyAoVmVyc2kgQ3Jpc3BpbSkNCnBsb3RfNSA8LSBjaV9kYXRhXzUgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gTG93ZXJfQm91bmQsIHkgPSBUaW5na2F0X0tlcGVyY2F5YWFuKSkgKw0KICAjIFRpdGlrIExvd2VyIEJvdW5kDQogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gVGFyZ2V0X1RlcmNhcGFpKSwgc2l6ZSA9IDUpICsNCiAgIyBHYXJpcyBWZXJ0aWthbCB1bnR1ayBUYXJnZXQgQmlzbmlzIDcwJQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0YXJnZXRfcHJvcCwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvciA9ICIjREFBNTIwIiwgc2l6ZSA9IDEpICsgIyBHb2xkZW5yb2QNCiAgIyBUZWtzIFRhcmdldA0KICBhbm5vdGF0ZSgidGV4dCIsIHggPSB0YXJnZXRfcHJvcCwgeSA9IDMuNSwgbGFiZWwgPSAiVGFyZ2V0IEJpc25pcyAoNzAlKSIsDQogICAgICAgICAgIGhqdXN0ID0gLTAuMSwgY29sb3IgPSAiI0RBQTUyMCIsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIA0KICAjIEVzdGV0aWthIFBsb3QgZGVuZ2FuIHdhcm5hIGJhcnUNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIlRSVUUiID0gIiM5NDAwRDMiKSwgbmFtZSA9ICJUYXJnZXQgVGVycGVudWhpIikgKyAjIERhcmsgVmlvbGV0DQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQsIGxpbWl0cyA9IGMoMC43MCwgMC43NDUpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgNS4xOiBCYXRhcyBCYXdhaCBDb25maWRlbmNlIEludGVydmFsIE9uZS1TaWRlZCAoVmVyc2kgQ3Jpc3BpbSkiLA0KICAgIHN1YnRpdGxlID0gIk1lbWFzdGlrYW4gUHJvcG9yc2kgUGVuZ2d1bmEgUHJlbWl1bSBNZW5jYXBhaSBNaW5pbWFsIDcwJSIsDQogICAgeCA9ICJCYXRhcyBCYXdhaCBQcm9wb3JzaSAoQ29uZmlkZW5jZSBCb3VuZCkiLA0KICAgIHkgPSAiVGluZ2thdCBLZXBlcmNheWFhbiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzRCMDA4MiIpLCAgICMgSW5kaWdvDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjQjg4NjBCIiksICAgICAgICAgICAgICAgIyBEYXJrIEdvbGRlbnJvZA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzk0MDBEMyIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIg0KICApDQoNCiMgTWVuYW1waWxrYW4gUGxvdCBTQyA1DQpwcmludChwbG90XzUpDQpgYGANCg0K