Study Cases

Assignment Week 14

1 . Pendahuluan

Dalam dunia industri yang bergerak cepat, setiap data yang masuk membawa cerita tentang bagaimana pengguna berinteraksi dengan produk kita. Namun, tantangan terbesarnya adalah membedakan mana perubahan yang memang nyata dan mana yang hanya sekadar fluktuasi acak. Laporan ini disusun sebagai upaya untuk membedah berbagai data lapangan melalui kacamata statistik yang objektif, guna memastikan setiap keputusan bisnis diambil berdasarkan bukti, bukan sekadar intuisi.

Laporan ini merangkum enam studi kasus krusial yang mewakili dinamika operasional perusahaan. Kita akan melihat bagaimana angka-angka teknis diterjemahkan menjadi wawasan strategis:

  • Audit Realita: Menguji apakah durasi belajar pengguna masih sesuai dengan klaim yang kita berikan kepada publik atau sudah mengalami penurunan yang perlu diwaspadai.

  • Validasi UX: Memastikan apakah perubahan desain aplikasi benar-benar membantu pengguna bekerja lebih cepat atau justru tidak memberikan dampak apa pun.

  • Efektivitas Strategi: Membandingkan dua versi tampilan web melalui A/B Testing untuk menentukan arah pengembangan produk ke depan.

  • Pola Perilaku: Membongkar hubungan antara perangkat yang digunakan pelanggan dengan metode pembayaran yang mereka pilih untuk personalisasi promo.

  • Keamanan & Risiko: Menghitung risiko kegagalan algoritma deteksi penipuan agar perusahaan tidak mengalami kerugian finansial maupun kehilangan kepercayaan pelanggan.

Setiap kasus dalam laporan ini diuji menggunakan standar pengujian hipotesis, mulai dari Z-test, T-test, hingga Chi-Square. Kita tidak hanya melihat angka akhir, tetapi juga mempertimbangkan aspek kualitas data, ukuran sampel, dan besarnya dampak nyata (effect size).

Untuk mempermudah pemahaman, setiap bab dilengkapi dengan visualisasi distribusi normal yang interaktif. Grafik ini berfungsi sebagai “peta navigasi” yang menunjukkan secara jelas posisi data kita: apakah masih berada dalam batas wajar atau sudah masuk ke zona signifikan yang memerlukan tindakan segera dari manajemen.

Tujuan utama dari laporan ini bukan sekadar menyajikan rumus, melainkan memberikan kepastian. Dengan memahami kapan sebuah data dianggap signifikan, kita dapat menghindari kesalahan investasi pada strategi yang salah dan lebih fokus pada pengembangan yang memberikan hasil nyata bagi pertumbuhan perusahaan.

2 . Study Case 1

  1. Executive Summary

Laporan ini disusun untuk memverifikasi apakah klaim performa rata-rata waktu belajar pengguna sebesar 120 menit/hari masih relevan dengan kondisi lapangan saat ini. Berdasarkan audit data terbaru terhadap 64 sampel pengguna, ditemukan angka rata-rata sebesar 116 menit.

Tujuan analisis ini adalah menentukan apakah penurunan 4 menit tersebut merupakan fluktuasi harian yang wajar (random noise) atau merupakan sinyal penurunan keterlibatan pengguna (engagement) yang signifikan secara statistik.

  1. Kerangka Pengujian (Hypothesis Design)

Untuk menghindari bias subjektif, kita menggunakan metode Two-Tailed Z-Test dengan struktur logika sebagai berikut: - \(H_0\) (Null Hypothesis): Rata-rata waktu belajar tetap 120 menit. Perbedaan yang ditemukan hanyalah variasi acak yang tidak berarti. - \(H_1\) (Alternative Hypothesis): Rata-rata waktu belajar sudah berubah (tidak sama dengan 120 menit). Perbedaan 4 menit adalah nyata dan representatif terhadap populasi.

  1. Metodologi dan Komputasi

Kita menggunakan parameter teknis sebagai berikut:

  • Populasi Standar Deviasi (\(\sigma\)): 15

  • Jumlah Sampel (\(n\)): 64

  • Level Signifikansi (\(\alpha\)): 0.05 (Toleransi error 5%)

  • Rumus Perhitungan:\[Z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}}\]

Langkah Analisis:

  • Standard Error: mengukur seberapa besar penyimpangan rata-rata sampel dari rata-rata populasi. Nilainya adalah \(15 / \sqrt{64} = 1.875\).

  • Z-Score: menghitung sejauh mana jarak fakta (116) dari target (120). Hasilnya adalah -2.13. Artinya, data kita berada 2.13 standar deviasi di bawah target.

Tabel 1: Summary Statistik Validasi Data
Indikator Nilai Interpretasi
Target Perusahaan (µ) 120.0 Min Benchmark
Rata-rata Lapangan (x̄) 116.0 Min Observasi Sampel
Selisih (Gap) -4.0 Min Penurunan Terdeteksi
Z-Score -2.133 Penyimpangan
P-Value 0.0329 Signifikansi Statistik

  1. Kesimpulan Strategis Berdasarkan hasil pengujian:
  • Signifikansi: Nilai P-Value (0.033) berada di bawah ambang batas 0.05. Ini berarti penurunan 4 menit tersebut bukan kebetulan.

  • Dampak Bisnis: Klaim pemasaran kita mengenai Belajar 120 menit/hari sekarang secara ilmiah dianggap tidak akurat. Jika terus digunakan, kita berisiko memberikan informasi yang menyesatkan kepada investor atau pengguna.

  • Rekomendasi: Segera lakukan evaluasi pada modul pembelajaran yang baru saja dirilis. Ada kemungkinan engagement menurun karena konten atau kendala teknis pada aplikasi.

3 . Study Case 2

  1. Strategi Pengujian Kita tidak ingin sekadar menebak. Kita menggunakan Two-Tailed T-Test karena fokus kita adalah mencari tahu apakah ada perbedaan (entah itu lebih cepat atau lebih lambat).
  • \(H_0\) (The Status Quo): \(\mu = 10\). Rata-rata waktu penyelesaian tugas masih tepat di angka 10 menit.
  • \(H_1\) (The Deviation): \(\mu \neq 10\). Waktu penyelesaian tugas sudah berubah secara signifikan dari 10 menit.
  1. Dalam kasus ini, kita menggunakan One-Sample T-Test karena:
  • Blind on Population: Kita tidak tahu standar deviasi populasi (\(\sigma\)).
  • Small Data: Sampel kita kecil (\(n = 10\)).
  • Real-world Data: Kita mengandalkan standar deviasi dari sampel (\(s\)) untuk melakukan estimasi.
  1. Komputasi dan Rumus Statistik Data yang kita miliki: 9.2, 10.5, 9.8, 10.1, 9.6, 10.3, 9.9, 9.7, 10.0, 9.5
  • Formula Utama:\[t = \frac{\bar{x} - \mu_0}{s / \sqrt{n}}\]

Langkah Perhitungan:

  • Rata-rata Sampel (\(\bar{x}\)): 9.86 menit.

  • Standar Deviasi Sampel (\(s\)): \(\approx 0.403\).

  • T-Score: mengukur seberapa jauh deviasi rata-rata kita terhadap standar error yang ada.

Tabel 2: Hasil Uji Efisiensi Task Baru
Indikator Nilai Keterangan
Target UX (µ) 10.00 Min Benchmark
Rata-rata User (x̄) 9.86 Min Realita
Standar Deviasi (s) 0.386 Variansi
T-Statistic -1.146 Skor Uji
P-Value 0.2815 Signifikansi

  1. Kesimpulan Strategis
  • Setelah kita bedah datanya, berikut adalah insight untuk tim UX: HASIL: Tidak signifikan nilai P-Value (0.288) jauh lebih besar dari 0.05. Ini artinya kita gagal menolak hipotesis nol (\(H_0\)).

  • Makna bisnis meskipun rata-rata sampel kita 9.86 menit (terlihat lebih cepat), secara statistik perbedaan itu tidak berarti. Fluktuasi tersebut masih dianggap wajar dalam batas error. Tim UX bisa menyimpulkan bahwa aplikasi baru ini performa waktunya masih sama dengan ekspektasi 10 menit.

  • Rekomendasi:Jangan terburu-buru mengklaim aplikasi lebih cepat. Jika ingin benar-benar melihat perbedaan, tim UX perlu menambah jumlah partisipan tes (increase sample size) atau melakukan optimasi lebih lanjut pada alur navigasi.

4 . Study Case 3

  1. Hipotesis: Mencari perbedaan nyata

Kita menggunakan uji dua arah (two-tailed) untuk memastikan apakah ada perbedaan durasi yang signifikan di antara kedua versi tersebut.

  • \(H_0\) (Status Quo): Tidak ada perbedaan rata-rata durasi antara Versi A dan Versi B.

  • (\(\mu_A = \mu_B\)).\(H_1\) (Difference): Ada perbedaan rata-rata durasi yang nyata antara Versi A dan Versi B (\(\mu_A \neq \mu_B\)).

  1. Metodologi: Independent Two-Sample T-Test
  • Independent Groups: User yang melihat Versi A berbeda dengan user yang melihat Versi B.

  • Small Sample: Ukuran sampel tiap kelompok adalah 25 (\(n < 30\)).

  • Standard Deviation: Kita menggunakan standar deviasi dari sampel masing-masing kelompok.

  1. Rumus dan Logika perhitungan

Kita menggunakan pendekatan Pooled Variance karena jumlah sampel kedua kelompok sama.

  • Formula T-Statistic:\[t = \frac{\bar{x}_A - \bar{x}_B}{\sqrt{\frac{s_A^2}{n_A} + \frac{s_B^2}{n_B}}}\]

Data yang Kita Miliki:

  • Versi A: \(n = 25\), \(\bar{x} = 4.8\), \(s = 1.2\)

  • Versi B: \(n = 25\), \(\bar{x} = 5.4\), \(s = 1.4\)

  • Standard Error: \(\sqrt{(1.2^2/25) + (1.4^2/25)} \approx 0.3688\)

  • T-Score: \((4.8 - 5.4) / 0.3688 = \mathbf{-1.627}\)

Tabel 3: Perbandingan Metrik Performa Landing Page
Version n Mean SD
Versi A (Kontrol) 25 4.8 1.2
Versi B (Varian) 25 5.4 1.4

  1. Kesimpulan strategis Setelah kita uji secara mendalam, ini hasilnya untuk tim produk:
  • Status: tidak signifikan Nilai P-Value (0.1101) berada di atas ambang batas 0.05. Secara statistik, kita gagal menolak Hipotesis Nol (\(H_0\)).

  • Realita di balik angka secara kasat mata, Versi B memang punya rata-rata 5.4 menit (lebih tinggi dari A yang 4.8). Tapi, karena variansinya cukup lebar dan sampelnya cuma 25, perbedaan ini dianggap sebagai kebetulan (random noise) saja. Data belum cukup kuat untuk bilang Versi B lebih unggul.

5 . Study Case 4

  1. Hipotesis

Mencari Koneksi RahasiaKita ingin membuktikan apakah pilihan perangkat (Device) ada hubungannya dengan cara mereka membayar, ataukah semuanya cuma kebetulan saja.

  • \(H_0\) (Independen): Tidak ada hubungan. Pengguna Mobile maupun Desktop punya selera pembayaran yang sama saja.

  • \(H_1\) (Dependen): Ada hubungan kuat. Tipe perangkat yang digunakan memengaruhi cara user membayar.

  1. Metodologi: Chi-Square Test of Independence

Kita menggunakan uji Chi-Square karena:

  • Categorical Data: Variabel kita bukan angka murni (seperti menit), melainkan kategori (Mobile/Desktop dan E-Wallet/CC/COD).

  • Contingency Table: Kita membandingkan frekuensi kemunculan (jumlah orang) dalam setiap kombinasi kategori.

  1. Logika Perhitungan (The Logic)

Kita membandingkan Nilai Observasi (O) — data yang benar-benar terjadi di lapangan — dengan Nilai Harapan (E) — data yang seharusnya muncul jika memang tidak ada hubungan apa-apa.

  • Rumus Utama:\[\chi^2 = \sum \frac{(O - E)^2}{E}\]

Jika selisih antara realita dan harapan terlalu jauh, maka kita bisa simpulkan bahwa ada koneksi tersembunyi antara perangkat dan pembayaran.

Tabel 4: Sebaran Metode Pembayaran Berdasarkan Perangkat
E-Wallet Credit Card COD
Mobile (App) 120 80 50
Desktop (Web) 60 90 40

  1. Kesimpulan dan Strategi Bisnis

Berdasarkan angka P-Value (0.005) yang jauh di bawah 0.05, kita Menolak \(H_0\). Ini berarti hubungan antara perangkat dan cara bayar itu Nyata, bukan kebetulan.

  • Insight Strategis untuk Manajemen:
  1. Mobile = E-Wallet Paradise: Pengguna Mobile sangat dominan menggunakan E-Wallet (hampir 50% dari total pengguna mobile).
  • Action: Percepat proses checkout satu klik (1-click checkout) untuk E-Wallet di aplikasi HP.
  1. Desktop = Credit Card Users: Pengguna Desktop jauh lebih nyaman bertransaksi dengan Kartu Kredit dibandingkan Mobile.
  • Action: Perkuat fitur keamanan seperti 3D Secure dan pastikan form input kartu kredit sangat user-friendly di layar besar.
  1. Targeted Promotion:
  • Jangan bakar duit buat promo CC di aplikasi mobile.
  • Fokuskan cashback E-Wallet hanya untuk pengguna aplikasi mobile untuk menekan biaya akuisisi (Customer Acquisition Cost).

6 . Study Case 5

Dalam dunia fintech, algoritma deteksi penipuan bertujuan untuk membedakan transaksi normal dari transaksi yang mencurigakan. Namun, setiap keputusan statistik membawa risiko kesalahan yang berdampak langsung pada finansial dan reputasi perusahaan.

  1. Formulasi Hipotesis

Kita menguji apakah algoritma baru memberikan dampak nyata dibandingkan sistem lama:

  • \(H_0\) (Hipotesis Nol): Algoritma baru tidak efektif mengurangi penipuan (\(\mu_{lama} = \mu_{baru}\)).

  • \(H_1\) (Hipotesis Alternatif): Algoritma baru efektif mengurangi penipuan (\(\mu_{baru} < \mu_{lama}\)).

  1. Identifikasi Risiko Keputusan (The Two Errors)

Dalam pengujian ini, kita menghadapi dua jenis kegagalan logika yang krusial:

  1. Type I Error (\(\alpha\)): Menyimpulkan algoritma efektif (Tolak \(H_0\)), padahal kenyataannya tidak ada perubahan.
  • Dampak Bisnis: Pemborosan anggaran investasi teknologi untuk sesuatu yang tidak berguna.

2.Type II Error (\(\beta\)): Menyimpulkan algoritma tidak efektif (Gagal Tolak \(H_0\)), padahal kenyataannya sangat ampuh. - Dampak Bisnis: Perusahaan terus merugi karena transaksi penipuan tidak terdeteksi, serta risiko kehilangan kepercayaan.

  1. Rumus dan Hubungan Power Analysis

Untuk memperkecil risiko kebobolan (Type II Error), kita harus meningkatkan Statistical Power.

Rumus Dasar Power:\[Power = 1 - \beta\]

Faktor yang Mempengaruhi:

  1. Sample Size (\(n\)): Semakin banyak data, semakin tajam deteksi kita.

  2. Significance Level (\(\alpha\)): Standar toleransi kesalahan (biasanya 0.05).

  3. Effect Size (\(d\)): Seberapa besar perbedaan yang ingin kita deteksi.

Tabel 5: Matriks Risiko Keputusan Bisnis
Skenario Definisi Dampak_Bisnis
Type I Error (Alpha) Salah Tuduh (False Positive) Kerugian Biaya Teknologi
Type II Error (Beta) Kebobolan (False Negative) Kerugian Finansial & Fraud
Statistical Power Kemampuan Deteksi Efisiensi Sistem Keamanan

  1. Kesimpulan strategis

Berdasarkan analisis risiko di atas, berikut adalah arahan untuk manajemen:

  • Prioritaskan type II error: Dalam industri fintech, kerugian akibat penipuan yang tidak terdeteksi jauh lebih berbahaya daripada biaya implementasi sistem. Oleh karena itu, kita harus menekan risiko \(\beta\) serendah mungkin.

  • Validasi sampel: Jangan mengambil keputusan berdasarkan data yang sedikit. Grafik menunjukkan kita butuh minimal 65-70 data transaksi untuk mencapai Power 80%.

  • Rekomendasi: Jika pengujian awal menunjukkan hasil yang tidak signifikan, disarankan untuk menambah durasi eksperimen guna memperbesar ukuran sampel sebelum memutuskan untuk menolak algoritma baru tersebut.

7 . Study Case 6

Berdasarkan data yang diberikan: - Test Statistic: 2.31

  • P-Value: 0.021

  • Significance Level (): 0.05

  1. Memahami P-Value dalam Konteks Bisnis

Dalam analisis ini, kita mendapatkan nilai P-Value sebesar 0,021.Secara sederhana, P-Value adalah indikator kejutan. Jika kita menganggap model kita sebenarnya tidak punya pengaruh apa-apa (Hipotesis Nol/\(H_0\)), maka peluang kita mendapatkan hasil sekuat ini hanya karena faktor keberuntungan adalah 2,1%. Karena angka ini sangat kecil (di bawah ambang batas 5%), kita bisa menyimpulkan bahwa performa model ini memang nyata, bukan sekadar kebetulan.

  1. Dasar pengambilan keputusan

Untuk mengambil keputusan, kita membandingkan nilai temuan dengan standar industri (\(\alpha = 0,05\)).Rumus Perbandingan:\[P\text{-Value} < \alpha \implies \text{Tolak } H_0\]Data Kita:\[0,021 < 0,05 \implies \text{SIGNIFIKAN}\]Keputusan: Kita resmi Menolak Hipotesis Nol. Artinya, ada perbedaan signifikan yang dihasilkan oleh model ini dalam mendeteksi churn.

  1. Waspada Terhadap Kualitas Data Meskipun hasil statistiknya bagus, kita harus memastikan bahwa data yang digunakan sudah mewakili seluruh pelanggan. Jika sampel yang kita ambil bias (tidak representatif), muncul dua risiko besar:
  • Kesimpulan yang Salah: Model mungkin terlihat hebat di atas kertas (data uji), namun gagal total saat diterapkan ke seluruh pelanggan asli.

  • Pemborosan Anggaran: Perusahaan berisiko mengucurkan dana besar untuk kampanye pencegahan churn yang sebenarnya salah sasaran.

  1. Signifikansi vs. Dampak Nyata Penting untuk diingat bahwa P-Value hanya memberi tahu kita “Apakah model ini bekerja?”, tetapi tidak menjawab “Seberapa besar dampaknya?”.
  • P-Value: Menunjukkan tingkat kepercayaan (Keyakinan).

  • Effect Size: Menunjukkan kekuatan dampak (Dahsyatnya hasil).

Sekalipun P-Value kita kecil, kita tetap perlu memantau metrik bisnis seperti persentase penurunan angka churn yang sebenarnya untuk memastikan keuntungan finansial yang nyata.

Grafik ini membagi dua dunia: Dunia Kebetulan (abu-abu) dan Dunia Efektivitas (merah).

  • Zona Merah (The Danger Zone for \(H_0\)):Ini adalah area eksklusif yang hanya bisa ditembus jika model kita benar-benar memiliki performa yang kuat. Karena kita menggunakan standar \(\alpha = 0.05\), area ini adalah ambang batas pembuktian bahwa hasil kita bukan karena keberuntungan semata.

  • Tiang Biru Neon (Posisi Model Kita):Garis biru yang menonjol ini adalah representasi dari data nyata kita (\(Z = 2.31\)). Secara visual, garis ini telah menyeberang jauh ke dalam zona merah. Ini adalah bukti fisik bahwa model prediksi churn kita sudah lulus ujian dan bekerja secara efektif.

  • Lengkungan Abu-abu (Distribusi Normal):Gunung ini menunjukkan kemungkinan hasil jika model kita sebenarnya biasa-biasa saja. Karena garis biru kita berada jauh di lereng paling ujung, maka peluang kita salah dalam mengambil kesimpulan sangatlah tipis (hanya 2,1%).

8 . Referensi

1 . Walpole, R. E. (2016). Probability & Statistics for Engineers & Scientists. Pearson.

2 . Everitt, B. S., & Skrondal, A. (2010). The Cambridge Dictionary of Statistics. Cambridge University Press.

3 . Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer.

4 . Field, A., Miles, J., & Field, Z. (2012). Discovering Statistics Using R. SAGE Publications.

5 . Nielsen, J. (1993). Usability Engineering. Academic Press.

6 . Schmuller, J. (2017). Statistical Analysis with R For Dummies. John Wiley & Sons.

7 . Kohavi, R., Tang, D., & Xu, Y. (2020). Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testing. Cambridge University Press.

8 . Gelman, A., & Hill, J. (2006). Data Analysis Using Regression and Multilevel/Hierarchical Models. Cambridge University Press.

9 . Dalgaard, P. (2008). Introductory Statistics with R. Springer.

  1. Agresti, A. (2018). An Introduction to Categorical Data Analysis. Wiley.

  2. Siegel, S., & Castellan, N. J. (1988). Nonparametric Statistics for the Behavioral Sciences. McGraw-Hill.

  3. Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences. Lawrence Erlbaum Associates.

  4. Fawcett, T. (2006). An Introduction to ROC Analysis. Pattern Recognition Letters.

LS0tDQp0aXRsZTogIlN0dWR5IENhc2VzIg0Kc3VidGl0bGU6ICJBc3NpZ25tZW50IFdlZWsgMTQiDQphdXRob3I6ICJDaHJpY3llc2lhIFdpbm5lcmxhZHkgRnJleGlzb3ZhcmEgVXZhcyINCmRhdGU6ICIyMDI1LTEyLTI0Ig0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyIgICAgIA0KLS0tDQoNCmBgYHtyLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIG91dC5leHRyYT0nc3R5bGU9ImRpc3BsYXk6YmxvY2s7IG1hcmdpbi1sZWZ0OmF1dG87IG1hcmdpbi1yaWdodDphdXRvOyInfQ0KDQpsaWJyYXJ5KG1hZ2ljaykNCmdhbWJhciA8LSBpbWFnZV9yZWFkKCJ+L1R1Z2FzIGVzdGF0aXN0aWthIHdpbmVyL3R1Z2FzIHdlZWsgMTEgfiBwcm9iYWJpbGl0eSBkaXN0cmlidWl0aW9uL2ZvdG9fMV9qcGcuanBnIikNCmdhbWJhcg0KYGBgDQoNCiMgLiBQZW5kYWh1bHVhbg0KRGFsYW0gZHVuaWEgaW5kdXN0cmkgeWFuZyBiZXJnZXJhayBjZXBhdCwgc2V0aWFwIGRhdGEgeWFuZyBtYXN1ayBtZW1iYXdhIGNlcml0YSB0ZW50YW5nIGJhZ2FpbWFuYSBwZW5nZ3VuYSBiZXJpbnRlcmFrc2kgZGVuZ2FuIHByb2R1ayBraXRhLiBOYW11biwgdGFudGFuZ2FuIHRlcmJlc2FybnlhIGFkYWxhaCBtZW1iZWRha2FuIG1hbmEgcGVydWJhaGFuIHlhbmcgbWVtYW5nIG55YXRhIGRhbiBtYW5hIHlhbmcgaGFueWEgc2VrYWRhciBmbHVrdHVhc2kgYWNhay4gTGFwb3JhbiBpbmkgZGlzdXN1biBzZWJhZ2FpIHVwYXlhIHVudHVrIG1lbWJlZGFoIGJlcmJhZ2FpIGRhdGEgbGFwYW5nYW4gbWVsYWx1aSBrYWNhbWF0YSBzdGF0aXN0aWsgeWFuZyBvYmpla3RpZiwgZ3VuYSBtZW1hc3Rpa2FuIHNldGlhcCBrZXB1dHVzYW4gYmlzbmlzIGRpYW1iaWwgYmVyZGFzYXJrYW4gYnVrdGksIGJ1a2FuIHNla2FkYXIgaW50dWlzaS4NCg0KTGFwb3JhbiBpbmkgbWVyYW5na3VtIGVuYW0gc3R1ZGkga2FzdXMga3J1c2lhbCB5YW5nIG1ld2FraWxpIGRpbmFtaWthIG9wZXJhc2lvbmFsIHBlcnVzYWhhYW4uIEtpdGEgYWthbiBtZWxpaGF0IGJhZ2FpbWFuYSBhbmdrYS1hbmdrYSB0ZWtuaXMgZGl0ZXJqZW1haGthbiBtZW5qYWRpIHdhd2FzYW4gc3RyYXRlZ2lzOg0KDQotIEF1ZGl0IFJlYWxpdGE6IE1lbmd1amkgYXBha2FoIGR1cmFzaSBiZWxhamFyIHBlbmdndW5hIG1hc2loIHNlc3VhaSBkZW5nYW4ga2xhaW0geWFuZyBraXRhIGJlcmlrYW4ga2VwYWRhIHB1YmxpayBhdGF1IHN1ZGFoIG1lbmdhbGFtaSBwZW51cnVuYW4geWFuZyBwZXJsdSBkaXdhc3BhZGFpLg0KDQotIFZhbGlkYXNpIFVYOiBNZW1hc3Rpa2FuIGFwYWthaCBwZXJ1YmFoYW4gZGVzYWluIGFwbGlrYXNpIGJlbmFyLWJlbmFyIG1lbWJhbnR1IHBlbmdndW5hIGJla2VyamEgbGViaWggY2VwYXQgYXRhdSBqdXN0cnUgdGlkYWsgbWVtYmVyaWthbiBkYW1wYWsgYXBhIHB1bi4NCg0KLSBFZmVrdGl2aXRhcyBTdHJhdGVnaTogTWVtYmFuZGluZ2thbiBkdWEgdmVyc2kgdGFtcGlsYW4gd2ViIG1lbGFsdWkgQS9CIFRlc3RpbmcgdW50dWsgbWVuZW50dWthbiBhcmFoIHBlbmdlbWJhbmdhbiBwcm9kdWsga2UgZGVwYW4uDQoNCi0gUG9sYSBQZXJpbGFrdTogTWVtYm9uZ2thciBodWJ1bmdhbiBhbnRhcmEgcGVyYW5na2F0IHlhbmcgZGlndW5ha2FuIHBlbGFuZ2dhbiBkZW5nYW4gbWV0b2RlIHBlbWJheWFyYW4geWFuZyBtZXJla2EgcGlsaWggdW50dWsgcGVyc29uYWxpc2FzaSBwcm9tby4NCg0KLSBLZWFtYW5hbiAmIFJpc2lrbzogTWVuZ2hpdHVuZyByaXNpa28ga2VnYWdhbGFuIGFsZ29yaXRtYSBkZXRla3NpIHBlbmlwdWFuIGFnYXIgcGVydXNhaGFhbiB0aWRhayBtZW5nYWxhbWkga2VydWdpYW4gZmluYW5zaWFsIG1hdXB1biBrZWhpbGFuZ2FuIGtlcGVyY2F5YWFuIHBlbGFuZ2dhbi4NCg0KU2V0aWFwIGthc3VzIGRhbGFtIGxhcG9yYW4gaW5pIGRpdWppIG1lbmdndW5ha2FuIHN0YW5kYXIgcGVuZ3VqaWFuIGhpcG90ZXNpcywgbXVsYWkgZGFyaSBaLXRlc3QsIFQtdGVzdCwgaGluZ2dhIENoaS1TcXVhcmUuIEtpdGEgdGlkYWsgaGFueWEgbWVsaWhhdCBhbmdrYSBha2hpciwgdGV0YXBpIGp1Z2EgbWVtcGVydGltYmFuZ2thbiBhc3BlayBrdWFsaXRhcyBkYXRhLCB1a3VyYW4gc2FtcGVsLCBkYW4gYmVzYXJueWEgZGFtcGFrIG55YXRhIChlZmZlY3Qgc2l6ZSkuDQoNClVudHVrIG1lbXBlcm11ZGFoIHBlbWFoYW1hbiwgc2V0aWFwIGJhYiBkaWxlbmdrYXBpIGRlbmdhbiB2aXN1YWxpc2FzaSBkaXN0cmlidXNpIG5vcm1hbCB5YW5nIGludGVyYWt0aWYuIEdyYWZpayBpbmkgYmVyZnVuZ3NpIHNlYmFnYWkgInBldGEgbmF2aWdhc2kiIHlhbmcgbWVudW5qdWtrYW4gc2VjYXJhIGplbGFzIHBvc2lzaSBkYXRhIGtpdGE6IGFwYWthaCBtYXNpaCBiZXJhZGEgZGFsYW0gYmF0YXMgd2FqYXIgYXRhdSBzdWRhaCBtYXN1ayBrZSB6b25hIHNpZ25pZmlrYW4geWFuZyBtZW1lcmx1a2FuIHRpbmRha2FuIHNlZ2VyYSBkYXJpIG1hbmFqZW1lbi4NCg0KVHVqdWFuIHV0YW1hIGRhcmkgbGFwb3JhbiBpbmkgYnVrYW4gc2VrYWRhciBtZW55YWppa2FuIHJ1bXVzLCBtZWxhaW5rYW4gbWVtYmVyaWthbiBrZXBhc3RpYW4uIERlbmdhbiBtZW1haGFtaSBrYXBhbiBzZWJ1YWggZGF0YSBkaWFuZ2dhcCBzaWduaWZpa2FuLCBraXRhIGRhcGF0IG1lbmdoaW5kYXJpIGtlc2FsYWhhbiBpbnZlc3Rhc2kgcGFkYSBzdHJhdGVnaSB5YW5nIHNhbGFoIGRhbiBsZWJpaCBmb2t1cyBwYWRhIHBlbmdlbWJhbmdhbiB5YW5nIG1lbWJlcmlrYW4gaGFzaWwgbnlhdGEgYmFnaSBwZXJ0dW1idWhhbiBwZXJ1c2FoYWFuLg0KDQoNCiMgLiBTdHVkeSBDYXNlIDENCjEuIEV4ZWN1dGl2ZSBTdW1tYXJ5DQoNCkxhcG9yYW4gaW5pIGRpc3VzdW4gdW50dWsgbWVtdmVyaWZpa2FzaSBhcGFrYWgga2xhaW0gcGVyZm9ybWEgcmF0YS1yYXRhIHdha3R1IGJlbGFqYXIgcGVuZ2d1bmEgc2ViZXNhciAxMjAgbWVuaXQvaGFyaSBtYXNpaCByZWxldmFuIGRlbmdhbiBrb25kaXNpIGxhcGFuZ2FuIHNhYXQgaW5pLiBCZXJkYXNhcmthbiBhdWRpdCBkYXRhIHRlcmJhcnUgdGVyaGFkYXAgNjQgc2FtcGVsIHBlbmdndW5hLCBkaXRlbXVrYW4gYW5na2EgcmF0YS1yYXRhIHNlYmVzYXIgMTE2IG1lbml0Lg0KDQpUdWp1YW4gYW5hbGlzaXMgaW5pIGFkYWxhaCBtZW5lbnR1a2FuIGFwYWthaCBwZW51cnVuYW4gNCBtZW5pdCB0ZXJzZWJ1dCBtZXJ1cGFrYW4gZmx1a3R1YXNpIGhhcmlhbiB5YW5nIHdhamFyIChyYW5kb20gbm9pc2UpIGF0YXUgbWVydXBha2FuIHNpbnlhbCBwZW51cnVuYW4ga2V0ZXJsaWJhdGFuIHBlbmdndW5hIChlbmdhZ2VtZW50KSB5YW5nIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3Rpay4NCg0KMi4gS2VyYW5na2EgUGVuZ3VqaWFuIChIeXBvdGhlc2lzIERlc2lnbikNCg0KVW50dWsgbWVuZ2hpbmRhcmkgYmlhcyBzdWJqZWt0aWYsIGtpdGEgbWVuZ2d1bmFrYW4gbWV0b2RlIFR3by1UYWlsZWQgWi1UZXN0IGRlbmdhbiBzdHJ1a3R1ciBsb2dpa2Egc2ViYWdhaSBiZXJpa3V0Og0KLSAkSF8wJCAoTnVsbCBIeXBvdGhlc2lzKTogUmF0YS1yYXRhIHdha3R1IGJlbGFqYXIgdGV0YXAgMTIwIG1lbml0LiBQZXJiZWRhYW4geWFuZyBkaXRlbXVrYW4gaGFueWFsYWggdmFyaWFzaSBhY2FrIHlhbmcgdGlkYWsgYmVyYXJ0aS4NCi0gJEhfMSQgKEFsdGVybmF0aXZlIEh5cG90aGVzaXMpOiBSYXRhLXJhdGEgd2FrdHUgYmVsYWphciBzdWRhaCBiZXJ1YmFoICh0aWRhayBzYW1hIGRlbmdhbiAxMjAgbWVuaXQpLiBQZXJiZWRhYW4gNCBtZW5pdCBhZGFsYWggbnlhdGEgZGFuIHJlcHJlc2VudGF0aWYgdGVyaGFkYXAgcG9wdWxhc2kuDQoNCjMuIE1ldG9kb2xvZ2kgZGFuIEtvbXB1dGFzaQ0KDQpLaXRhIG1lbmdndW5ha2FuIHBhcmFtZXRlciB0ZWtuaXMgc2ViYWdhaSBiZXJpa3V0Og0KDQotIFBvcHVsYXNpIFN0YW5kYXIgRGV2aWFzaSAoJFxzaWdtYSQpOiAxNSANCg0KLSBKdW1sYWggU2FtcGVsICgkbiQpOiA2NCANCg0KLSBMZXZlbCBTaWduaWZpa2Fuc2kgKCRcYWxwaGEkKTogMC4wNSAoVG9sZXJhbnNpIGVycm9yIDUlKQ0KDQotIFJ1bXVzIFBlcmhpdHVuZ2FuOiQkWiA9IFxmcmFje1xiYXJ7eH0gLSBcbXVfMH17XHNpZ21hIC8gXHNxcnR7bn19JCQNCg0KTGFuZ2thaCBBbmFsaXNpczoNCg0KLSBTdGFuZGFyZCBFcnJvcjogbWVuZ3VrdXIgc2ViZXJhcGEgYmVzYXIgcGVueWltcGFuZ2FuIHJhdGEtcmF0YSBzYW1wZWwgZGFyaSByYXRhLXJhdGEgcG9wdWxhc2kuIE5pbGFpbnlhIGFkYWxhaCAkMTUgLyBcc3FydHs2NH0gPSAxLjg3NSQuDQoNCi0gWi1TY29yZTogbWVuZ2hpdHVuZyBzZWphdWggbWFuYSBqYXJhayBmYWt0YSAoMTE2KSBkYXJpIHRhcmdldCAoMTIwKS4gDQpIYXNpbG55YSBhZGFsYWggLTIuMTMuIEFydGlueWEsIGRhdGEga2l0YSBiZXJhZGEgMi4xMyBzdGFuZGFyIGRldmlhc2kgZGkgYmF3YWggdGFyZ2V0Lg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgU0NSSVBUIEFOQUxJU0lTIA0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCiMgMS4gUGFyYW1ldGVyIERhdGENCm11MCAgICA8LSAxMjAgICAgIA0KeGJhciAgIDwtIDExNiAgICAgDQpzaWdtYSAgPC0gMTUgICAgICANCm4gICAgICA8LSA2NCAgICAgIA0Kc2UgICAgIDwtIHNpZ21hIC8gc3FydChuKSANCnpfc3RhdCA8LSAoeGJhciAtIG11MCkgLyBzZQ0KcF92YWwgIDwtIDIgKiBwbm9ybShhYnMoel9zdGF0KSwgbG93ZXIudGFpbCA9IEZBTFNFKQ0KDQojIDIuIFRhYmVsIExhcG9yYW4gDQpzdW1tYXJ5X2RmIDwtIGRhdGEuZnJhbWUoDQogIEluZGlrYXRvciA9IGMoIlRhcmdldCBQZXJ1c2FoYWFuICjCtSkiLCAiUmF0YS1yYXRhIExhcGFuZ2FuICh4zIQpIiwgIlNlbGlzaWggKEdhcCkiLCAiWi1TY29yZSIsICJQLVZhbHVlIiksDQogIE5pbGFpID0gYygiMTIwLjAgTWluIiwgIjExNi4wIE1pbiIsICItNC4wIE1pbiIsIHJvdW5kKHpfc3RhdCwgMyksIHJvdW5kKHBfdmFsLCA0KSksDQogIEludGVycHJldGFzaSA9IGMoIkJlbmNobWFyayIsICJPYnNlcnZhc2kgU2FtcGVsIiwgIlBlbnVydW5hbiBUZXJkZXRla3NpIiwgIlBlbnlpbXBhbmdhbiIsICJTaWduaWZpa2Fuc2kgU3RhdGlzdGlrIikNCikNCg0Ka2FibGUoc3VtbWFyeV9kZiwgZm9ybWF0ID0gImh0bWwiLCBjYXB0aW9uID0gIlRhYmVsIDE6IFN1bW1hcnkgU3RhdGlzdGlrIFZhbGlkYXNpIERhdGEiKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IFQsIGZvbnRfc2l6ZSA9IDE2KSAlPiUNCiAgcm93X3NwZWMoMCwgYmFja2dyb3VuZCA9ICIjMmMzZTUwIiwgY29sb3IgPSAid2hpdGUiKSAlPiUNCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjYzAzOTJiIikgIyBGYWt0YSBMYXBhbmdhbg0KDQojIDMuIFZpc3VhbGlzYXNpIERpc3RyaWJ1c2kgDQp4X3ZhbHMgPC0gc2VxKDExNCwgMTI2LCBsZW5ndGgub3V0ID0gMTAwMCkNCnlfdmFscyA8LSBkbm9ybSh4X3ZhbHMsIG1lYW4gPSAxMjAsIHNkID0gc2UpDQpkZl9wbG90IDwtIGRhdGEuZnJhbWUoeF92YWxzLCB5X3ZhbHMpDQoNCiMgQXJlYSBrcml0aXMgdW50dWsgdmlzdWFsaXNhc2kgDQpjcml0aWNhbF92YWwgPC0gMTIwIC0gKDEuOTYgKiBzZSkNCg0KZ2dwbG90KGRmX3Bsb3QsIGFlcyh4ID0geF92YWxzLCB5ID0geV92YWxzKSkgKw0KICAjIEFyZWEgRGlzdHJpYnVzaSBOb3JtYWwNCiAgZ2VvbV9hcmVhKGZpbGwgPSAiIzM0OThkYiIsIGFscGhhID0gMC4xKSArDQogIGdlb21fbGluZShjb2xvciA9ICIjMmMzZTUwIiwgc2l6ZSA9IDEuNSkgKw0KICANCiAgIyBIaWdobGlnaHQgQXJlYSBQZW5vbGFrYW4gKEtpcmkpDQogIGdlb21fYXJlYShkYXRhID0gc3Vic2V0KGRmX3Bsb3QsIHhfdmFscyA8PSBjcml0aWNhbF92YWwpLCBmaWxsID0gIiNlNzRjM2MiLCBhbHBoYSA9IDAuNCkgKw0KICANCiAgIyBHYXJpcyBJbmRpa2F0b3INCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMTIwLCBjb2xvciA9ICIjMjdhZTYwIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDEuMikgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxMTYsIGNvbG9yID0gIiNjMDM5MmIiLCBzaXplID0gMikgKw0KICANCiAgIyBMYWJlbCBEaW5hbWlzIA0KICBhbm5vdGF0ZSgibGFiZWwiLCB4ID0gMTIwLCB5ID0gMC4xOCwgbGFiZWwgPSAiS0xBSU06IDEyMCBNSU4iLCANCiAgICAgICAgICAgZmlsbCA9ICIjMjdhZTYwIiwgY29sb3IgPSAid2hpdGUiLCBmb250ZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDUpICsNCiAgYW5ub3RhdGUoImxhYmVsIiwgeCA9IDExNiwgeSA9IDAuMDUsIGxhYmVsID0gIlJFQUxJVEE6IDExNiBNSU4iLCANCiAgICAgICAgICAgZmlsbCA9ICIjYzAzOTJiIiwgY29sb3IgPSAid2hpdGUiLCBmb250ZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDUpICsNCiAgDQogICMgSnVkdWwgZGFuIFRlbWENCiAgbGFicyh0aXRsZSA9ICJBTkFMSVNJUyBBTk9NQUxJOiBEVVJBU0kgQkVMQUpBUiBIQVJJQU4iLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUoIlN0YXR1czogU2lnbmlmaWthbiAoUC1WYWx1ZToiLCByb3VuZChwX3ZhbCwgNCksICIpIC0gTWVub2xhayBIaXBvdGVzaXMgTm9sIiksDQogICAgICAgeCA9ICJEdXJhc2kgQmVsYWphciAoTWVuaXQpIiwgeSA9ICJEZW5zaXR5IFByb2JhYmlsaXRhcyIpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMiwgY29sb3IgPSAiIzJjM2U1MCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBjb2xvciA9ICIjN2Y4YzhkIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNlY2YwZjEiKQ0KICApDQpgYGANCg0KNS4gS2VzaW1wdWxhbiBTdHJhdGVnaXMgDQpCZXJkYXNhcmthbiBoYXNpbCBwZW5ndWppYW46DQoNCi0gU2lnbmlmaWthbnNpOiBOaWxhaSBQLVZhbHVlICgwLjAzMykgYmVyYWRhIGRpIGJhd2FoIGFtYmFuZyBiYXRhcyAwLjA1LiBJbmkgYmVyYXJ0aSBwZW51cnVuYW4gNCBtZW5pdCB0ZXJzZWJ1dCBidWthbiBrZWJldHVsYW4uDQoNCi0gRGFtcGFrIEJpc25pczogS2xhaW0gcGVtYXNhcmFuIGtpdGEgbWVuZ2VuYWkgQmVsYWphciAxMjAgbWVuaXQvaGFyaSBzZWthcmFuZyBzZWNhcmEgaWxtaWFoIGRpYW5nZ2FwIHRpZGFrIGFrdXJhdC4gSmlrYSB0ZXJ1cyBkaWd1bmFrYW4sIGtpdGEgYmVyaXNpa28gbWVtYmVyaWthbiBpbmZvcm1hc2kgeWFuZyBtZW55ZXNhdGthbiBrZXBhZGEgaW52ZXN0b3IgYXRhdSBwZW5nZ3VuYS4NCg0KLSBSZWtvbWVuZGFzaTogU2VnZXJhIGxha3VrYW4gZXZhbHVhc2kgcGFkYSBtb2R1bCBwZW1iZWxhamFyYW4geWFuZyBiYXJ1IHNhamEgZGlyaWxpcy4gQWRhIGtlbXVuZ2tpbmFuIGVuZ2FnZW1lbnQgbWVudXJ1biBrYXJlbmEga29udGVuIGF0YXUga2VuZGFsYSB0ZWtuaXMgcGFkYSBhcGxpa2FzaS4NCg0KIyAuIFN0dWR5IENhc2UgMg0KMS4gU3RyYXRlZ2kgUGVuZ3VqaWFuIA0KS2l0YSB0aWRhayBpbmdpbiBzZWthZGFyIG1lbmViYWsuIEtpdGEgbWVuZ2d1bmFrYW4gVHdvLVRhaWxlZCBULVRlc3Qga2FyZW5hIGZva3VzIGtpdGEgYWRhbGFoIG1lbmNhcmkgdGFodSBhcGFrYWggYWRhIHBlcmJlZGFhbiAoZW50YWggaXR1IGxlYmloIGNlcGF0IGF0YXUgbGViaWggbGFtYmF0KS4NCi0gJEhfMCQgKFRoZSBTdGF0dXMgUXVvKTogJFxtdSA9IDEwJC4gUmF0YS1yYXRhIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBtYXNpaCB0ZXBhdCBkaSBhbmdrYSAxMCBtZW5pdC4NCi0gJEhfMSQgKFRoZSBEZXZpYXRpb24pOiAkXG11IFxuZXEgMTAkLiBXYWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgc3VkYWggYmVydWJhaCBzZWNhcmEgc2lnbmlmaWthbiBkYXJpIDEwIG1lbml0Lg0KDQoNCjIuIERhbGFtIGthc3VzIGluaSwga2l0YSBtZW5nZ3VuYWthbiBPbmUtU2FtcGxlIFQtVGVzdCBrYXJlbmE6DQotIEJsaW5kIG9uIFBvcHVsYXRpb246IEtpdGEgdGlkYWsgdGFodSBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKCRcc2lnbWEkKS4NCi0gU21hbGwgRGF0YTogU2FtcGVsIGtpdGEga2VjaWwgKCRuID0gMTAkKS4NCi0gUmVhbC13b3JsZCBEYXRhOiBLaXRhIG1lbmdhbmRhbGthbiBzdGFuZGFyIGRldmlhc2kgZGFyaSBzYW1wZWwgKCRzJCkgdW50dWsgbWVsYWt1a2FuIGVzdGltYXNpLg0KDQozLiBLb21wdXRhc2kgZGFuIFJ1bXVzIFN0YXRpc3RpayANCkRhdGEgeWFuZyBraXRhIG1pbGlraTogOS4yLCAxMC41LCA5LjgsIDEwLjEsIDkuNiwgMTAuMywgOS45LCA5LjcsIDEwLjAsIDkuNQ0KLSBGb3JtdWxhIFV0YW1hOiQkdCA9IFxmcmFje1xiYXJ7eH0gLSBcbXVfMH17cyAvIFxzcXJ0e259fSQkDQoNCkxhbmdrYWggUGVyaGl0dW5nYW46DQoNCi0gUmF0YS1yYXRhIFNhbXBlbCAoJFxiYXJ7eH0kKTogOS44NiBtZW5pdC4NCg0KLSBTdGFuZGFyIERldmlhc2kgU2FtcGVsICgkcyQpOiAkXGFwcHJveCAwLjQwMyQuDQoNCi0gVC1TY29yZTogbWVuZ3VrdXIgc2ViZXJhcGEgamF1aCBkZXZpYXNpIHJhdGEtcmF0YSBraXRhIHRlcmhhZGFwIHN0YW5kYXIgZXJyb3IgeWFuZyBhZGEuDQoNCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENBU0UgMjogVVggUkVTRUFSQ0ggQU5BTFlUSUNTDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCg0KIyAxLiBJbnB1dCBEYXRhDQp3YWt0dSA8LSBjKDkuMiwgMTAuNSwgOS44LCAxMC4xLCA5LjYsIDEwLjMsIDkuOSwgOS43LCAxMC4wLCA5LjUpDQptdTAgICA8LSAxMA0KDQojIDIuIFN0YXRpc3RpayBEZXNrcmlwdGlmICYgVGFiZWwNCnJlcyA8LSB0LnRlc3Qod2FrdHUsIG11ID0gbXUwKQ0Kc3VtbWFyeV9kZiA8LSBkYXRhLmZyYW1lKA0KICBJbmRpa2F0b3IgPSBjKCJUYXJnZXQgVVggKMK1KSIsICJSYXRhLXJhdGEgVXNlciAoeMyEKSIsICJTdGFuZGFyIERldmlhc2kgKHMpIiwgIlQtU3RhdGlzdGljIiwgIlAtVmFsdWUiKSwNCiAgTmlsYWkgPSBjKCIxMC4wMCBNaW4iLCAiOS44NiBNaW4iLCByb3VuZChzZCh3YWt0dSksIDMpLCByb3VuZChyZXMkc3RhdGlzdGljLCAzKSwgcm91bmQocmVzJHAudmFsdWUsIDQpKSwNCiAgS2V0ZXJhbmdhbiA9IGMoIkJlbmNobWFyayIsICJSZWFsaXRhIiwgIlZhcmlhbnNpIiwgIlNrb3IgVWppIiwgIlNpZ25pZmlrYW5zaSIpDQopDQoNCmthYmxlKHN1bW1hcnlfZGYsIGZvcm1hdCA9ICJodG1sIiwgY2FwdGlvbiA9ICJUYWJlbCAyOiBIYXNpbCBVamkgRWZpc2llbnNpIFRhc2sgQmFydSIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gVCwgZm9udF9zaXplID0gMTYpICU+JQ0KICByb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gIiM4ZTQ0YWQiLCBjb2xvciA9ICJ3aGl0ZSIpICU+JQ0KICByb3dfc3BlYygyLCBib2xkID0gVCwgYmFja2dyb3VuZCA9ICIjZjNlNWY1IikNCg0KIyAzLiBJbXBhY3QgVmlzdWFsaXphdGlvbiAoQm94cGxvdCArIEppdHRlcikNCmdncGxvdChkYXRhLmZyYW1lKHdha3R1KSwgYWVzKHggPSAiIiwgeSA9IHdha3R1KSkgKw0KICAjIEJveHBsb3QgRWxlZ2FuDQogIGdlb21fYm94cGxvdChmaWxsID0gIiM5YjU5YjYiLCBhbHBoYSA9IDAuNCwgY29sb3IgPSAiIzhlNDRhZCIsIHdpZHRoID0gMC41KSArDQogICMgTWVuYW1iYWhrYW4gZGF0YSBwb2ludCBhc2xpIGFnYXIgdGVybGloYXQgc2ViYXJhbm55YQ0KICBnZW9tX2ppdHRlcihjb2xvciA9ICIjNGIwMDgyIiwgd2lkdGggPSAwLjEsIHNpemUgPSAzLCBhbHBoYSA9IDAuNikgKw0KICAjIEdhcmlzIFRhcmdldA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiI2U3NGMzYyIsIHNpemUgPSAxLjIpICsNCiAgIyBMYWJlbCAmIFN0eWxpbmcNCiAgYW5ub3RhdGUoImxhYmVsIiwgeCA9IDEuMzUsIHkgPSAxMCwgbGFiZWwgPSAiVGFyZ2V0OiAxMCBNaW4iLCBmaWxsID0gIiNlNzRjM2MiLCBjb2xvciA9ICJ3aGl0ZSIsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVzaSBXYWt0dSBQZW55ZWxlc2FpYW4gVHVnYXMgKFVYIFRlc3RpbmcpIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCJQLVZhbHVlOiIsIHJvdW5kKHJlcyRwLnZhbHVlLCA0KSwgInwgVGlkYWsgYWRhIHBlcmJlZGFhbiBzaWduaWZpa2FuIGRhcmkgdGFyZ2V0IiksDQogICAgICAgeSA9ICJNZW5pdCIsIHggPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE2KSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIwLCBjb2xvciA9ICIjNGIwMDgyIikpDQpgYGANCg0KDQo1LiBLZXNpbXB1bGFuIFN0cmF0ZWdpcw0KLSBTZXRlbGFoIGtpdGEgYmVkYWggZGF0YW55YSwgYmVyaWt1dCBhZGFsYWggaW5zaWdodCB1bnR1ayB0aW0gVVg6IA0KSEFTSUw6IFRpZGFrIHNpZ25pZmlrYW4gbmlsYWkgUC1WYWx1ZSAoMC4yODgpIGphdWggbGViaWggYmVzYXIgZGFyaSAwLjA1LiBJbmkgYXJ0aW55YSBraXRhIGdhZ2FsIG1lbm9sYWsgaGlwb3Rlc2lzIG5vbCAoJEhfMCQpLg0KDQotIE1ha25hIGJpc25pcyBtZXNraXB1biByYXRhLXJhdGEgc2FtcGVsIGtpdGEgOS44NiBtZW5pdCAodGVybGloYXQgbGViaWggY2VwYXQpLCBzZWNhcmEgc3RhdGlzdGlrIHBlcmJlZGFhbiBpdHUgdGlkYWsgYmVyYXJ0aS4gRmx1a3R1YXNpIHRlcnNlYnV0IG1hc2loIGRpYW5nZ2FwIHdhamFyIGRhbGFtIGJhdGFzIGVycm9yLiBUaW0gVVggYmlzYSBtZW55aW1wdWxrYW4gYmFod2EgYXBsaWthc2kgYmFydSBpbmkgcGVyZm9ybWEgd2FrdHVueWEgbWFzaWggc2FtYSBkZW5nYW4gZWtzcGVrdGFzaSAxMCBtZW5pdC4NCg0KLSBSZWtvbWVuZGFzaTpKYW5nYW4gdGVyYnVydS1idXJ1IG1lbmdrbGFpbSBhcGxpa2FzaSBsZWJpaCBjZXBhdC4gSmlrYSBpbmdpbiBiZW5hci1iZW5hciBtZWxpaGF0IHBlcmJlZGFhbiwgdGltIFVYIHBlcmx1IG1lbmFtYmFoIGp1bWxhaCBwYXJ0aXNpcGFuIHRlcyAoaW5jcmVhc2Ugc2FtcGxlIHNpemUpIGF0YXUgbWVsYWt1a2FuIG9wdGltYXNpIGxlYmloIGxhbmp1dCBwYWRhIGFsdXIgbmF2aWdhc2kuDQoNCiMgLiBTdHVkeSBDYXNlIDMNCjEuIEhpcG90ZXNpczogTWVuY2FyaSBwZXJiZWRhYW4gbnlhdGENCg0KS2l0YSBtZW5nZ3VuYWthbiB1amkgZHVhIGFyYWggKHR3by10YWlsZWQpIHVudHVrIG1lbWFzdGlrYW4gYXBha2FoIGFkYSBwZXJiZWRhYW4gZHVyYXNpIHlhbmcgc2lnbmlmaWthbiBkaSBhbnRhcmEga2VkdWEgdmVyc2kgdGVyc2VidXQuDQoNCi0gJEhfMCQgKFN0YXR1cyBRdW8pOiBUaWRhayBhZGEgcGVyYmVkYWFuIHJhdGEtcmF0YSBkdXJhc2kgYW50YXJhIFZlcnNpIEEgZGFuIFZlcnNpIEIuIA0KDQotICgkXG11X0EgPSBcbXVfQiQpLiRIXzEkIChEaWZmZXJlbmNlKTogQWRhIHBlcmJlZGFhbiByYXRhLXJhdGEgZHVyYXNpIHlhbmcgbnlhdGEgYW50YXJhIFZlcnNpIEEgZGFuIFZlcnNpIEIgKCRcbXVfQSBcbmVxIFxtdV9CJCkuDQoNCjIuIE1ldG9kb2xvZ2k6IEluZGVwZW5kZW50IFR3by1TYW1wbGUgVC1UZXN0DQoNCi0gSW5kZXBlbmRlbnQgR3JvdXBzOiBVc2VyIHlhbmcgbWVsaWhhdCBWZXJzaSBBIGJlcmJlZGEgZGVuZ2FuIHVzZXIgeWFuZyBtZWxpaGF0IFZlcnNpIEIuDQoNCi0gU21hbGwgU2FtcGxlOiBVa3VyYW4gc2FtcGVsIHRpYXAga2Vsb21wb2sgYWRhbGFoIDI1ICgkbiA8IDMwJCkuDQoNCi0gU3RhbmRhcmQgRGV2aWF0aW9uOiBLaXRhIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBkYXJpIHNhbXBlbCBtYXNpbmctbWFzaW5nIGtlbG9tcG9rLg0KDQozLiBSdW11cyBkYW4gTG9naWthIHBlcmhpdHVuZ2FuDQoNCktpdGEgbWVuZ2d1bmFrYW4gcGVuZGVrYXRhbiBQb29sZWQgVmFyaWFuY2Uga2FyZW5hIGp1bWxhaCBzYW1wZWwga2VkdWEga2Vsb21wb2sgc2FtYS4NCg0KLSBGb3JtdWxhIFQtU3RhdGlzdGljOiQkdCA9IFxmcmFje1xiYXJ7eH1fQSAtIFxiYXJ7eH1fQn17XHNxcnR7XGZyYWN7c19BXjJ9e25fQX0gKyBcZnJhY3tzX0JeMn17bl9CfX19JCQNCg0KRGF0YSB5YW5nIEtpdGEgTWlsaWtpOg0KDQotIFZlcnNpIEE6ICRuID0gMjUkLCAkXGJhcnt4fSA9IDQuOCQsICRzID0gMS4yJA0KDQotIFZlcnNpIEI6ICRuID0gMjUkLCAkXGJhcnt4fSA9IDUuNCQsICRzID0gMS40JA0KDQotIFN0YW5kYXJkIEVycm9yOiAkXHNxcnR7KDEuMl4yLzI1KSArICgxLjReMi8yNSl9IFxhcHByb3ggMC4zNjg4JA0KDQotIFQtU2NvcmU6ICQoNC44IC0gNS40KSAvIDAuMzY4OCA9IFxtYXRoYmZ7LTEuNjI3fSQNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDQVNFIDM6IEEvQiBURVNUSU5HIEFOQUxZVElDUyANCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KDQojIDEuIE1lbnlpYXBrYW4gRGF0YSBSaW5na2FzYW4NCmRhdGFfYWIgPC0gZGF0YS5mcmFtZSgNCiAgVmVyc2lvbiA9IGMoIlZlcnNpIEEgKEtvbnRyb2wpIiwgIlZlcnNpIEIgKFZhcmlhbikiKSwNCiAgbiA9IGMoMjUsIDI1KSwNCiAgTWVhbiA9IGMoNC44LCA1LjQpLA0KICBTRCA9IGMoMS4yLCAxLjQpDQopDQoNCiMgMi4gVGFiZWwgUmluZ2thc2FuIEVzdGV0aWsNCmthYmxlKGRhdGFfYWIsIGZvcm1hdCA9ICJodG1sIiwgY2FwdGlvbiA9ICJUYWJlbCAzOiBQZXJiYW5kaW5nYW4gTWV0cmlrIFBlcmZvcm1hIExhbmRpbmcgUGFnZSIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gVCwgZm9udF9zaXplID0gMTYpICU+JQ0KICByb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gIiMyYzNlNTAiLCBjb2xvciA9ICJ3aGl0ZSIpICU+JQ0KICByb3dfc3BlYygyLCBib2xkID0gVCwgYmFja2dyb3VuZCA9ICIjZWJmNWZiIikgIyBIaWdobGlnaHQgVmVyc2kgQg0KDQojIDMuIEthbGt1bGFzaSBTdGF0aXN0aWsNCnNlIDwtIHNxcnQoKDEuMl4yLzI1KSArICgxLjReMi8yNSkpDQp0X3N0YXQgPC0gKDQuOCAtIDUuNCkgLyBzZQ0KcF92YWwgPC0gMiAqIHB0KGFicyh0X3N0YXQpLCBkZiA9IDQ4LCBsb3dlci50YWlsID0gRkFMU0UpDQoNCiMgNC4gVmlzdWFsaXNhc2kgQmFyIENoYXJ0IEhpZ2gtSW1wYWN0DQpnZ3Bsb3QoZGF0YV9hYiwgYWVzKHggPSBWZXJzaW9uLCB5ID0gTWVhbiwgZmlsbCA9IFZlcnNpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNSwgYWxwaGEgPSAwLjg1LCBjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBNZWFuIC0gU0QsIHltYXggPSBNZWFuICsgU0QpLCB3aWR0aCA9IDAuMTUsIHNpemUgPSAxLjIsIGNvbG9yID0gIiMzNDQ5NWUiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNiZGMzYzciLCAiIzI5ODBiOSIpKSArDQogICMgQW5vdGFzaSBhbmdrYSByYXRhLXJhdGEgZGkgYXRhcyBiYXINCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IE1lYW4pLCB2anVzdCA9IC0wLjUsIHNpemUgPSA2LCBmb250ZmFjZSA9ICJib2xkIikgKw0KICBsYWJzKHRpdGxlID0gIlBFUkJBTkRJTkdBTiBEVVJBU0kgU0VTSTogVkVSU0kgQSBWUyBCIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCJIYXNpbCBVamkgVDogUC1WYWx1ZSA9Iiwgcm91bmQocF92YWwsIDQpLCAifCBQZXJiZWRhYW4gQmVsdW0gU2lnbmlmaWthbiIpLA0KICAgICAgIHkgPSAiUmF0YS1yYXRhIER1cmFzaSAoTWVuaXQpIiwgeCA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTYpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMjIsIGNvbG9yID0gIiMyYzNlNTAiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgY29sb3IgPSAiIzdmOGM4ZCIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCkNCiAgKQ0KYGBgDQoNCjUuIEtlc2ltcHVsYW4gc3RyYXRlZ2lzDQpTZXRlbGFoIGtpdGEgdWppIHNlY2FyYSBtZW5kYWxhbSwgaW5pIGhhc2lsbnlhIHVudHVrIHRpbSBwcm9kdWs6DQoNCi0gU3RhdHVzOiB0aWRhayBzaWduaWZpa2FuIE5pbGFpIFAtVmFsdWUgKDAuMTEwMSkgYmVyYWRhIGRpIGF0YXMgYW1iYW5nIGJhdGFzIDAuMDUuIFNlY2FyYSBzdGF0aXN0aWssIGtpdGEgZ2FnYWwgbWVub2xhayBIaXBvdGVzaXMgTm9sICgkSF8wJCkuDQoNCi0gUmVhbGl0YSBkaSBiYWxpayBhbmdrYSBzZWNhcmEga2FzYXQgbWF0YSwgVmVyc2kgQiBtZW1hbmcgcHVueWEgcmF0YS1yYXRhIDUuNCBtZW5pdCAobGViaWggdGluZ2dpIGRhcmkgQSB5YW5nIDQuOCkuIFRhcGksIGthcmVuYSB2YXJpYW5zaW55YSBjdWt1cCBsZWJhciBkYW4gc2FtcGVsbnlhIGN1bWEgMjUsIHBlcmJlZGFhbiBpbmkgZGlhbmdnYXAgc2ViYWdhaSBrZWJldHVsYW4gKHJhbmRvbSBub2lzZSkgc2FqYS4gRGF0YSBiZWx1bSBjdWt1cCBrdWF0IHVudHVrIGJpbGFuZyBWZXJzaSBCIGxlYmloIHVuZ2d1bC4NCg0KIyAuIFN0dWR5IENhc2UgNCANCjEuIEhpcG90ZXNpcw0KDQpNZW5jYXJpIEtvbmVrc2kgUmFoYXNpYUtpdGEgaW5naW4gbWVtYnVrdGlrYW4gYXBha2FoIHBpbGloYW4gcGVyYW5na2F0IChEZXZpY2UpIGFkYSBodWJ1bmdhbm55YSBkZW5nYW4gY2FyYSBtZXJla2EgbWVtYmF5YXIsIGF0YXVrYWggc2VtdWFueWEgY3VtYSBrZWJldHVsYW4gc2FqYS4NCg0KLSAkSF8wJCAoSW5kZXBlbmRlbik6IFRpZGFrIGFkYSBodWJ1bmdhbi4gUGVuZ2d1bmEgTW9iaWxlIG1hdXB1biBEZXNrdG9wIHB1bnlhIHNlbGVyYSBwZW1iYXlhcmFuIHlhbmcgc2FtYSBzYWphLg0KDQotICRIXzEkIChEZXBlbmRlbik6IEFkYSBodWJ1bmdhbiBrdWF0LiBUaXBlIHBlcmFuZ2thdCB5YW5nIGRpZ3VuYWthbiBtZW1lbmdhcnVoaSBjYXJhIHVzZXIgbWVtYmF5YXIuDQoNCjIuIE1ldG9kb2xvZ2k6IENoaS1TcXVhcmUgVGVzdCBvZiBJbmRlcGVuZGVuY2UNCg0KS2l0YSBtZW5nZ3VuYWthbiB1amkgQ2hpLVNxdWFyZSBrYXJlbmE6DQoNCi0gQ2F0ZWdvcmljYWwgRGF0YTogVmFyaWFiZWwga2l0YSBidWthbiBhbmdrYSBtdXJuaSAoc2VwZXJ0aSBtZW5pdCksIG1lbGFpbmthbiBrYXRlZ29yaSAoTW9iaWxlL0Rlc2t0b3AgZGFuIEUtV2FsbGV0L0NDL0NPRCkuDQoNCi0gQ29udGluZ2VuY3kgVGFibGU6IEtpdGEgbWVtYmFuZGluZ2thbiBmcmVrdWVuc2kga2VtdW5jdWxhbiAoanVtbGFoIG9yYW5nKSBkYWxhbSBzZXRpYXAga29tYmluYXNpIGthdGVnb3JpLg0KDQozLiBMb2dpa2EgUGVyaGl0dW5nYW4gKFRoZSBMb2dpYykNCg0KS2l0YSBtZW1iYW5kaW5na2FuIE5pbGFpIE9ic2VydmFzaSAoTykg4oCUIGRhdGEgeWFuZyBiZW5hci1iZW5hciB0ZXJqYWRpIGRpIGxhcGFuZ2FuIOKAlCBkZW5nYW4gTmlsYWkgSGFyYXBhbiAoRSkg4oCUIGRhdGEgeWFuZyBzZWhhcnVzbnlhIG11bmN1bCBqaWthIG1lbWFuZyB0aWRhayBhZGEgaHVidW5nYW4gYXBhLWFwYS4NCg0KLSBSdW11cyBVdGFtYTokJFxjaGleMiA9IFxzdW0gXGZyYWN7KE8gLSBFKV4yfXtFfSQkDQoNCkppa2Egc2VsaXNpaCBhbnRhcmEgcmVhbGl0YSBkYW4gaGFyYXBhbiB0ZXJsYWx1IGphdWgsIG1ha2Ega2l0YSBiaXNhIHNpbXB1bGthbiBiYWh3YSBhZGEga29uZWtzaSB0ZXJzZW1idW55aSBhbnRhcmEgcGVyYW5na2F0IGRhbiBwZW1iYXlhcmFuLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENBU0UgNDogQ09OU1VNRVIgQkVIQVZJT1IgLSBDSEktU1FVQVJFIEFOQUxZU0lTDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCiMgMS4gTWF0cmlrcyBEYXRhIEtvbnRpbmdlbnNpDQpkYXRhX21hdHJpeCA8LSBtYXRyaXgoYygxMjAsIDgwLCA1MCwgNjAsIDkwLCA0MCksIA0KICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAyLCBieXJvdyA9IFRSVUUpDQpyb3duYW1lcyhkYXRhX21hdHJpeCkgPC0gYygiTW9iaWxlIChBcHApIiwgIkRlc2t0b3AgKFdlYikiKQ0KY29sbmFtZXMoZGF0YV9tYXRyaXgpIDwtIGMoIkUtV2FsbGV0IiwgIkNyZWRpdCBDYXJkIiwgIkNPRCIpDQoNCiMgMi4gVGFiZWwgS29udGluZ2Vuc2kgUHJlbWl1bQ0Ka2FibGUoYXMuZGF0YS5mcmFtZShkYXRhX21hdHJpeCksIGZvcm1hdCA9ICJodG1sIiwgY2FwdGlvbiA9ICJUYWJlbCA0OiBTZWJhcmFuIE1ldG9kZSBQZW1iYXlhcmFuIEJlcmRhc2Fya2FuIFBlcmFuZ2thdCIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gVCwgZm9udF9zaXplID0gMTYpICU+JQ0KICByb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gIiMyYzNlNTAiLCBjb2xvciA9ICJ3aGl0ZSIpICU+JQ0KICBjb2x1bW5fc3BlYygxLCBib2xkID0gVCwgYm9yZGVyX3JpZ2h0ID0gVCkNCg0KIyAzLiBVamkgU3RhdGlzdGlrDQpoYXNpbF9jaGkgPC0gY2hpc3EudGVzdChkYXRhX21hdHJpeCkNCg0KIyA0LiBWaXN1YWxpc2FzaSBTdGFja2VkIEJhciAoUHJvcG9yc2kgUGVyc2VudGFzZSkNCmRmX3Bsb3QgPC0gbWVsdChkYXRhX21hdHJpeCkNCmNvbG5hbWVzKGRmX3Bsb3QpIDwtIGMoIkRldmljZSIsICJQYXltZW50IiwgIkNvdW50IikNCg0KZ2dwbG90KGRmX3Bsb3QsIGFlcyh4ID0gRGV2aWNlLCB5ID0gQ291bnQsIGZpbGwgPSBQYXltZW50KSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZmlsbCIsIHdpZHRoID0gMC42LCBjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAwLjUpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWFiYzljIiwgIiMzNDk4ZGIiLCAiI2U2N2UyMiIpKSArDQogICMgVGFtYmFoa2FuIGxhYmVsIHBlcnNlbnRhc2UgZGkgZGFsYW0gYmFyDQogIGxhYnModGl0bGUgPSAiRE9NSU5BU0kgUEVNQkFZQVJBTiBCRVJEQVNBUktBTiBQRVJBTkdLQVQiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUoIlAtVmFsdWU6Iiwgcm91bmQoaGFzaWxfY2hpJHAudmFsdWUsIDQpLCAifCBUZXJkYXBhdCBrb3JlbGFzaSBzaWduaWZpa2FuIGFudGFyYSBEZXZpY2UgJiBQYXltZW50IiksDQogICAgICAgeSA9ICJQcm9wb3JzaSAoMTAwJSkiLCB4ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMiwgY29sb3IgPSAiIzJjM2U1MCIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkNCiAgKQ0KYGBgDQoNCjUuIEtlc2ltcHVsYW4gZGFuIFN0cmF0ZWdpIEJpc25pcw0KDQpCZXJkYXNhcmthbiBhbmdrYSBQLVZhbHVlICgwLjAwNSkgeWFuZyBqYXVoIGRpIGJhd2FoIDAuMDUsIGtpdGEgTWVub2xhayAkSF8wJC4gSW5pIGJlcmFydGkgaHVidW5nYW4gYW50YXJhIHBlcmFuZ2thdCBkYW4gY2FyYSBiYXlhciBpdHUgTnlhdGEsIGJ1a2FuIGtlYmV0dWxhbi4NCg0KLSBJbnNpZ2h0IFN0cmF0ZWdpcyB1bnR1ayBNYW5hamVtZW46DQoxLiBNb2JpbGUgPSBFLVdhbGxldCBQYXJhZGlzZTogUGVuZ2d1bmEgTW9iaWxlIHNhbmdhdCBkb21pbmFuIG1lbmdndW5ha2FuIEUtV2FsbGV0IChoYW1waXIgNTAlIGRhcmkgdG90YWwgcGVuZ2d1bmEgbW9iaWxlKS4NCg0KLSBBY3Rpb246IFBlcmNlcGF0IHByb3NlcyBjaGVja291dCBzYXR1IGtsaWsgKDEtY2xpY2sgY2hlY2tvdXQpIHVudHVrIEUtV2FsbGV0IGRpIGFwbGlrYXNpIEhQLg0KDQoyLiBEZXNrdG9wID0gQ3JlZGl0IENhcmQgVXNlcnM6IFBlbmdndW5hIERlc2t0b3AgamF1aCBsZWJpaCBueWFtYW4gYmVydHJhbnNha3NpIGRlbmdhbiBLYXJ0dSBLcmVkaXQgZGliYW5kaW5na2FuIE1vYmlsZS4NCg0KLSBBY3Rpb246IFBlcmt1YXQgZml0dXIga2VhbWFuYW4gc2VwZXJ0aSAzRCBTZWN1cmUgZGFuIHBhc3Rpa2FuIGZvcm0gaW5wdXQga2FydHUga3JlZGl0IHNhbmdhdCB1c2VyLWZyaWVuZGx5IGRpIGxheWFyIGJlc2FyLg0KDQozLiBUYXJnZXRlZCBQcm9tb3Rpb246DQotIEphbmdhbiBiYWthciBkdWl0IGJ1YXQgcHJvbW8gQ0MgZGkgYXBsaWthc2kgbW9iaWxlLg0KLSBGb2t1c2thbiBjYXNoYmFjayBFLVdhbGxldCBoYW55YSB1bnR1ayBwZW5nZ3VuYSBhcGxpa2FzaSBtb2JpbGUgdW50dWsgbWVuZWthbiBiaWF5YSBha3Vpc2lzaSAoQ3VzdG9tZXIgQWNxdWlzaXRpb24gQ29zdCkuDQoNCiMgLiBTdHVkeSBDYXNlIDUNCkRhbGFtIGR1bmlhIGZpbnRlY2gsIGFsZ29yaXRtYSBkZXRla3NpIHBlbmlwdWFuIGJlcnR1anVhbiB1bnR1ayBtZW1iZWRha2FuIHRyYW5zYWtzaSBub3JtYWwgZGFyaSB0cmFuc2Frc2kgeWFuZyBtZW5jdXJpZ2FrYW4uIE5hbXVuLCBzZXRpYXAga2VwdXR1c2FuIHN0YXRpc3RpayBtZW1iYXdhIHJpc2lrbyBrZXNhbGFoYW4geWFuZyBiZXJkYW1wYWsgbGFuZ3N1bmcgcGFkYSBmaW5hbnNpYWwgZGFuIHJlcHV0YXNpIHBlcnVzYWhhYW4uDQoNCjEuIEZvcm11bGFzaSBIaXBvdGVzaXMNCg0KS2l0YSBtZW5ndWppIGFwYWthaCBhbGdvcml0bWEgYmFydSBtZW1iZXJpa2FuIGRhbXBhayBueWF0YSBkaWJhbmRpbmdrYW4gc2lzdGVtIGxhbWE6DQoNCi0gJEhfMCQgKEhpcG90ZXNpcyBOb2wpOiBBbGdvcml0bWEgYmFydSB0aWRhayBlZmVrdGlmIG1lbmd1cmFuZ2kgcGVuaXB1YW4gKCRcbXVfe2xhbWF9ID0gXG11X3tiYXJ1fSQpLg0KDQotICRIXzEkIChIaXBvdGVzaXMgQWx0ZXJuYXRpZik6IEFsZ29yaXRtYSBiYXJ1IGVmZWt0aWYgbWVuZ3VyYW5naSBwZW5pcHVhbiAoJFxtdV97YmFydX0gPCBcbXVfe2xhbWF9JCkuDQoNCjIuIElkZW50aWZpa2FzaSBSaXNpa28gS2VwdXR1c2FuIChUaGUgVHdvIEVycm9ycykNCg0KRGFsYW0gcGVuZ3VqaWFuIGluaSwga2l0YSBtZW5naGFkYXBpIGR1YSBqZW5pcyBrZWdhZ2FsYW4gbG9naWthIHlhbmcga3J1c2lhbDoNCg0KMS4gVHlwZSBJIEVycm9yICgkXGFscGhhJCk6IE1lbnlpbXB1bGthbiBhbGdvcml0bWEgZWZla3RpZiAoVG9sYWsgJEhfMCQpLCBwYWRhaGFsIGtlbnlhdGFhbm55YSB0aWRhayBhZGEgcGVydWJhaGFuLg0KLSBEYW1wYWsgQmlzbmlzOiBQZW1ib3Jvc2FuIGFuZ2dhcmFuIGludmVzdGFzaSB0ZWtub2xvZ2kgdW50dWsgc2VzdWF0dSB5YW5nIHRpZGFrIGJlcmd1bmEuDQoNCjIuVHlwZSBJSSBFcnJvciAoJFxiZXRhJCk6IE1lbnlpbXB1bGthbiBhbGdvcml0bWEgdGlkYWsgZWZla3RpZiAoR2FnYWwgVG9sYWsgJEhfMCQpLCBwYWRhaGFsIGtlbnlhdGFhbm55YSBzYW5nYXQgYW1wdWguDQotIERhbXBhayBCaXNuaXM6IFBlcnVzYWhhYW4gdGVydXMgbWVydWdpIGthcmVuYSB0cmFuc2Frc2kgcGVuaXB1YW4gdGlkYWsgdGVyZGV0ZWtzaSwgc2VydGEgcmlzaWtvIGtlaGlsYW5nYW4ga2VwZXJjYXlhYW4uDQoNCjMuIFJ1bXVzIGRhbiBIdWJ1bmdhbiBQb3dlciBBbmFseXNpcw0KDQpVbnR1ayBtZW1wZXJrZWNpbCByaXNpa28ga2Vib2JvbGFuIChUeXBlIElJIEVycm9yKSwga2l0YSBoYXJ1cyBtZW5pbmdrYXRrYW4gU3RhdGlzdGljYWwgUG93ZXIuDQoNClJ1bXVzIERhc2FyIFBvd2VyOiQkUG93ZXIgPSAxIC0gXGJldGEkJA0KDQpGYWt0b3IgeWFuZyBNZW1wZW5nYXJ1aGk6DQoNCjEuIFNhbXBsZSBTaXplICgkbiQpOiBTZW1ha2luIGJhbnlhayBkYXRhLCBzZW1ha2luIHRhamFtIGRldGVrc2kga2l0YS4NCg0KMi4gU2lnbmlmaWNhbmNlIExldmVsICgkXGFscGhhJCk6IFN0YW5kYXIgdG9sZXJhbnNpIGtlc2FsYWhhbiAoYmlhc2FueWEgMC4wNSkuDQoNCjMuIEVmZmVjdCBTaXplICgkZCQpOiBTZWJlcmFwYSBiZXNhciBwZXJiZWRhYW4geWFuZyBpbmdpbiBraXRhIGRldGVrc2kuDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDQVNFIDU6IFJJU0sgJiBQT1dFUiBBTkFMWVNJUyANCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHB3cikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCiMgMS4gU2ltdWxhc2kgUG93ZXIgQW5hbHlzaXMNCnNhbXBsZV9zaXplcyA8LSBzZXEoMTAsIDEwMCwgYnkgPSA1KQ0KcG93ZXJzIDwtIHNhcHBseShzYW1wbGVfc2l6ZXMsIGZ1bmN0aW9uKG4pIHsNCiAgcHdyLnQudGVzdChuID0gbiwgZCA9IDAuNSwgc2lnLmxldmVsID0gMC4wNSwgdHlwZSA9ICJvbmUuc2FtcGxlIikkcG93ZXINCn0pDQoNCiMgMi4gTWVtYnVhdCBUYWJlbCBSaXNpa28gDQpkZl9yaXNrIDwtIGRhdGEuZnJhbWUoDQogIFNrZW5hcmlvID0gYygiVHlwZSBJIEVycm9yIChBbHBoYSkiLCAiVHlwZSBJSSBFcnJvciAoQmV0YSkiLCAiU3RhdGlzdGljYWwgUG93ZXIiKSwNCiAgRGVmaW5pc2kgPSBjKCJTYWxhaCBUdWR1aCAoRmFsc2UgUG9zaXRpdmUpIiwgIktlYm9ib2xhbiAoRmFsc2UgTmVnYXRpdmUpIiwgIktlbWFtcHVhbiBEZXRla3NpIiksDQogIERhbXBha19CaXNuaXMgPSBjKCJLZXJ1Z2lhbiBCaWF5YSBUZWtub2xvZ2kiLCAiS2VydWdpYW4gRmluYW5zaWFsICYgRnJhdWQiLCAiRWZpc2llbnNpIFNpc3RlbSBLZWFtYW5hbiIpDQopDQoNCmthYmxlKGRmX3Jpc2ssIGZvcm1hdCA9ICJodG1sIiwgY2FwdGlvbiA9ICJUYWJlbCA1OiBNYXRyaWtzIFJpc2lrbyBLZXB1dHVzYW4gQmlzbmlzIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBULCBmb250X3NpemUgPSAxNikgJT4lDQogIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiIzJjM2U1MCIsIGNvbG9yID0gIndoaXRlIikgJT4lDQogIHJvd19zcGVjKDIsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAiI2MwMzkyYiIpICMgSGlnaGxpZ2h0IFR5cGUgSUkgRXJyb3INCg0KIyAzLiBWaXN1YWxpc2FzaSBQb3dlciBDdXJ2ZSANCmRmX3Bsb3QgPC0gZGF0YS5mcmFtZShuID0gc2FtcGxlX3NpemVzLCBwb3dlciA9IHBvd2VycykNCg0KZ2dwbG90KGRmX3Bsb3QsIGFlcyh4ID0gbiwgeSA9IHBvd2VyKSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAiIzM0OThkYiIsIHNpemUgPSAyKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAiIzJjM2U1MCIsIHNpemUgPSA0KSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuOCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiI2U3NGMzYyIsIHNpemUgPSAxKSArDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSAyNSwgeSA9IDAuODUsIGxhYmVsID0gIlRhcmdldCBQb3dlcjogODAlIiwgZmlsbCA9ICIjZTc0YzNjIiwgY29sb3IgPSAid2hpdGUiLCBmb250ZmFjZSA9ICJib2xkIikgKw0KICBsYWJzKHRpdGxlID0gIkhVQlVOR0FOIFVLVVJBTiBTQU1QRUwgVEVSSEFEQVAgUE9XRVIiLA0KICAgICAgIHN1YnRpdGxlID0gIlNlbWFraW4gdGluZ2dpIFBvd2VyLCBzZW1ha2luIHJlbmRhaCByaXNpa28gJ0tlYm9ib2xhbicgKFR5cGUgSUkgRXJyb3IpIiwNCiAgICAgICB4ID0gIlVrdXJhbiBTYW1wZWwgKG4pIiwgeSA9ICJTdGF0aXN0aWNhbCBQb3dlciAoMSAtIEJldGEpIikgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE2KSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE4LCBjb2xvciA9ICIjMmMzZTUwIikpDQpgYGANCg0KNS4gS2VzaW1wdWxhbiBzdHJhdGVnaXMNCg0KQmVyZGFzYXJrYW4gYW5hbGlzaXMgcmlzaWtvIGRpIGF0YXMsIGJlcmlrdXQgYWRhbGFoIGFyYWhhbiB1bnR1ayBtYW5hamVtZW46DQoNCi0gUHJpb3JpdGFza2FuIHR5cGUgSUkgZXJyb3I6IERhbGFtIGluZHVzdHJpIGZpbnRlY2gsIGtlcnVnaWFuIGFraWJhdCBwZW5pcHVhbiB5YW5nIHRpZGFrIHRlcmRldGVrc2kgamF1aCBsZWJpaCBiZXJiYWhheWEgZGFyaXBhZGEgYmlheWEgaW1wbGVtZW50YXNpIHNpc3RlbS4gT2xlaCBrYXJlbmEgaXR1LCBraXRhIGhhcnVzIG1lbmVrYW4gcmlzaWtvICRcYmV0YSQgc2VyZW5kYWggbXVuZ2tpbi4NCg0KLSBWYWxpZGFzaSBzYW1wZWw6IEphbmdhbiBtZW5nYW1iaWwga2VwdXR1c2FuIGJlcmRhc2Fya2FuIGRhdGEgeWFuZyBzZWRpa2l0LiBHcmFmaWsgbWVudW5qdWtrYW4ga2l0YSBidXR1aCBtaW5pbWFsIDY1LTcwIGRhdGEgdHJhbnNha3NpIHVudHVrIG1lbmNhcGFpIFBvd2VyIDgwJS4NCg0KLSBSZWtvbWVuZGFzaTogSmlrYSBwZW5ndWppYW4gYXdhbCBtZW51bmp1a2thbiBoYXNpbCB5YW5nIHRpZGFrIHNpZ25pZmlrYW4sIGRpc2FyYW5rYW4gdW50dWsgbWVuYW1iYWggZHVyYXNpIGVrc3BlcmltZW4gZ3VuYSBtZW1wZXJiZXNhciB1a3VyYW4gc2FtcGVsIHNlYmVsdW0gbWVtdXR1c2thbiB1bnR1ayBtZW5vbGFrIGFsZ29yaXRtYSBiYXJ1IHRlcnNlYnV0Lg0KDQojIC4gU3R1ZHkgQ2FzZSA2DQpCZXJkYXNhcmthbiBkYXRhIHlhbmcgZGliZXJpa2FuOg0KLSBUZXN0IFN0YXRpc3RpYzogMi4zMQ0KDQotIFAtVmFsdWU6IDAuMDIxDQoNCi0gU2lnbmlmaWNhbmNlIExldmVsIChcYWxwaGEpOiAwLjA1DQoNCjEuIE1lbWFoYW1pIFAtVmFsdWUgZGFsYW0gS29udGVrcyBCaXNuaXMgDQoNCkRhbGFtIGFuYWxpc2lzIGluaSwga2l0YSBtZW5kYXBhdGthbiBuaWxhaSBQLVZhbHVlIHNlYmVzYXIgMCwwMjEuU2VjYXJhIHNlZGVyaGFuYSwgUC1WYWx1ZSBhZGFsYWggaW5kaWthdG9yIGtlanV0YW4uIEppa2Ega2l0YSBtZW5nYW5nZ2FwIG1vZGVsIGtpdGEgc2ViZW5hcm55YSB0aWRhayBwdW55YSBwZW5nYXJ1aCBhcGEtYXBhIChIaXBvdGVzaXMgTm9sLyRIXzAkKSwgbWFrYSBwZWx1YW5nIGtpdGEgbWVuZGFwYXRrYW4gaGFzaWwgc2VrdWF0IGluaSBoYW55YSBrYXJlbmEgZmFrdG9yIGtlYmVydW50dW5nYW4gYWRhbGFoIDIsMSUuIEthcmVuYSBhbmdrYSBpbmkgc2FuZ2F0IGtlY2lsIChkaSBiYXdhaCBhbWJhbmcgYmF0YXMgNSUpLCBraXRhIGJpc2EgbWVueWltcHVsa2FuIGJhaHdhIHBlcmZvcm1hIG1vZGVsIGluaSBtZW1hbmcgbnlhdGEsIGJ1a2FuIHNla2FkYXIga2ViZXR1bGFuLg0KDQoyLiBEYXNhciBwZW5nYW1iaWxhbiBrZXB1dHVzYW4NCg0KVW50dWsgbWVuZ2FtYmlsIGtlcHV0dXNhbiwga2l0YSBtZW1iYW5kaW5na2FuIG5pbGFpIHRlbXVhbiBkZW5nYW4gc3RhbmRhciBpbmR1c3RyaSAoJFxhbHBoYSA9IDAsMDUkKS5SdW11cyBQZXJiYW5kaW5nYW46JCRQXHRleHR7LVZhbHVlfSA8IFxhbHBoYSBcaW1wbGllcyBcdGV4dHtUb2xhayB9IEhfMCQkRGF0YSBLaXRhOiQkMCwwMjEgPCAwLDA1IFxpbXBsaWVzIFx0ZXh0e1NJR05JRklLQU59JCRLZXB1dHVzYW46IEtpdGEgcmVzbWkgTWVub2xhayBIaXBvdGVzaXMgTm9sLiBBcnRpbnlhLCBhZGEgcGVyYmVkYWFuIHNpZ25pZmlrYW4geWFuZyBkaWhhc2lsa2FuIG9sZWggbW9kZWwgaW5pIGRhbGFtIG1lbmRldGVrc2kgY2h1cm4uDQoNCg0KMy4gV2FzcGFkYSBUZXJoYWRhcCBLdWFsaXRhcyBEYXRhIA0KTWVza2lwdW4gaGFzaWwgc3RhdGlzdGlrbnlhIGJhZ3VzLCBraXRhIGhhcnVzIG1lbWFzdGlrYW4gYmFod2EgZGF0YSB5YW5nIGRpZ3VuYWthbiBzdWRhaCBtZXdha2lsaSBzZWx1cnVoIHBlbGFuZ2dhbi4gSmlrYSBzYW1wZWwgeWFuZyBraXRhIGFtYmlsIGJpYXMgKHRpZGFrIHJlcHJlc2VudGF0aWYpLCBtdW5jdWwgZHVhIHJpc2lrbyBiZXNhcjoNCg0KLSBLZXNpbXB1bGFuIHlhbmcgU2FsYWg6IE1vZGVsIG11bmdraW4gdGVybGloYXQgaGViYXQgZGkgYXRhcyBrZXJ0YXMgKGRhdGEgdWppKSwgbmFtdW4gZ2FnYWwgdG90YWwgc2FhdCBkaXRlcmFwa2FuIGtlIHNlbHVydWggcGVsYW5nZ2FuIGFzbGkuDQoNCi0gUGVtYm9yb3NhbiBBbmdnYXJhbjogUGVydXNhaGFhbiBiZXJpc2lrbyBtZW5ndWN1cmthbiBkYW5hIGJlc2FyIHVudHVrIGthbXBhbnllIHBlbmNlZ2FoYW4gY2h1cm4geWFuZyBzZWJlbmFybnlhIHNhbGFoIHNhc2FyYW4uDQoNCjQuIFNpZ25pZmlrYW5zaSB2cy4gRGFtcGFrIE55YXRhIA0KUGVudGluZyB1bnR1ayBkaWluZ2F0IGJhaHdhIFAtVmFsdWUgaGFueWEgbWVtYmVyaSB0YWh1IGtpdGEgIkFwYWthaCBtb2RlbCBpbmkgYmVrZXJqYT8iLCB0ZXRhcGkgdGlkYWsgbWVuamF3YWIgIlNlYmVyYXBhIGJlc2FyIGRhbXBha255YT8iLg0KDQotIFAtVmFsdWU6IE1lbnVuanVra2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gKEtleWFraW5hbikuDQoNCi0gRWZmZWN0IFNpemU6IE1lbnVuanVra2FuIGtla3VhdGFuIGRhbXBhayAoRGFoc3lhdG55YSBoYXNpbCkuDQoNClNla2FsaXB1biBQLVZhbHVlIGtpdGEga2VjaWwsIGtpdGEgdGV0YXAgcGVybHUgbWVtYW50YXUgbWV0cmlrIGJpc25pcyBzZXBlcnRpIHBlcnNlbnRhc2UgcGVudXJ1bmFuIGFuZ2thIGNodXJuIHlhbmcgc2ViZW5hcm55YSB1bnR1ayBtZW1hc3Rpa2FuIGtldW50dW5nYW4gZmluYW5zaWFsIHlhbmcgbnlhdGEuDQoNCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KbGlicmFyeShnZ3Bsb3QyKQ0KDQojIDEuIE1lbnlpYXBrYW4gZGF0YSBrdXJ2YSBkaXN0cmlidXNpIG5vcm1hbA0KeCA8LSBzZXEoLTQsIDQsIGxlbmd0aD01MDApDQp5IDwtIGRub3JtKHgpDQpkZiA8LSBkYXRhLmZyYW1lKHgsIHkpDQoNCiMgMi4gUGFyYW1ldGVyIHN0YXRpc3Rpaw0Kel9jcml0IDwtIHFub3JtKDAuOTc1KSANCnRlc3Rfc3RhdCA8LSAyLjMxDQoNCg0KZ2dwbG90KGRmLCBhZXMoeCwgeSkpICsNCiAgIyBBcmVhIGRpc3RyaWJ1c2kgdXRhbWEgZGVuZ2FuIGdyYWRhc2kgd2FybmEgc29mdCBiaXJ1IGtlIHVuZ3UNCiAgZ2VvbV9hcmVhKGZpbGwgPSAiI2YwZjRmOCIpICsNCiAgDQogICMgQXJlYSBQZW5vbGFrYW4gKE1lcmFoIFZpYnJhbnQvT3JhbmdlKQ0KICBnZW9tX2FyZWEoZGF0YSA9IHN1YnNldChkZiwgeCA+IHpfY3JpdCksIGFlcyhmaWxsID0gIlpvbmEgU2lnbmlmaWthbiIpLCBhbHBoYSA9IDAuOCkgKw0KICBnZW9tX2FyZWEoZGF0YSA9IHN1YnNldChkZiwgeCA8IC16X2NyaXQpLCBhZXMoZmlsbCA9ICJab25hIFNpZ25pZmlrYW4iKSwgYWxwaGEgPSAwLjgpICsNCiAgDQogICMgR2FyaXMga3VydmEgdXRhbWEgZGVuZ2FuIHdhcm5hIGdlbGFwIGVsZWdhbg0KICBnZW9tX2xpbmUoY29sb3IgPSAiIzFhMWExYSIsIHNpemUgPSAxLjIpICsNCiAgDQogICMgR2FyaXMgVGVzdCBTdGF0aXN0aWMgKFdhcm5hIE5lb24gQmx1ZSB1bnR1ayBlZmVrICdIaWdobGlnaHQnKQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0ZXN0X3N0YXQsIGNvbG9yID0gIiMwMGQyZmYiLCBzaXplID0gMikgKw0KICANCiAgIyBHYXJpcyBLcml0aXMgKFRocmVzaG9sZCkNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYygtel9jcml0LCB6X2NyaXQpLCBjb2xvciA9ICIjZmY0YjJiIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDAuOCkgKw0KICANCiAgIyBBbm90YXNpIFRla3MgeWFuZyBzdHlsaXNoDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSB0ZXN0X3N0YXQsIHkgPSAwLjM1LCANCiAgICAgICAgICAgbGFiZWwgPSBwYXN0ZSgiU2tvciBNb2RlbCBLaXRhOiIsIHRlc3Rfc3RhdCksIA0KICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiIzAwZDJmZiIsIGZvbnRmYWNlID0gImJvbGQiLCBzaXplID0gNSwgbGFiZWwucGFkZGluZyA9IHVuaXQoMC41LCAibGluZXMiKSkgKw0KICANCiAgYW5ub3RhdGUoInRleHQiLCB4ID0gMy4yLCB5ID0gMC4wNSwgbGFiZWwgPSAiSEFTSUxcblNJR05JRklLQU4iLCANCiAgICAgICAgICAgY29sb3IgPSAiI2ZmNGIyYiIsIGZvbnRmYWNlID0gImJvbGQiLCBzaXplID0gNCkgKw0KDQogICMgUGVuZ2F0dXJhbiBTa2FsYSBXYXJuYQ0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJab25hIFNpZ25pZmlrYW4iID0gIiNmZjRiMmIiKSkgKw0KICANCiAgIyBKdWR1bCBkYW4gTGFiZWwNCiAgbGFicyh0aXRsZSA9ICJFVkFMVUFTSSBQRVJGT1JNQSBNT0RFTCBQUkVESUtTSSIsDQogICAgICAgc3VidGl0bGUgPSAiVmlzdWFsaXNhc2kgRGlzdHJpYnVzaSBOb3JtYWw6IERhdGEgS2l0YSBCZXJhZGEgZGkgQXJlYSBLZXN1a3Nlc2FuIChTaWduaWZpa2FuKSIsDQogICAgICAgY2FwdGlvbiA9ICJBbmFsaXNpcyBTdGF0aXN0aWsgQ2h1cm4gUGVsYW5nZ2FuIHwgQWxwaGEgPSAwLjA1IiwNCiAgICAgICB4ID0gIlRpbmdrYXQgS2V5YWtpbmFuIChTdGFuZGFyZGl6ZWQgU2NvcmUpIiwgDQogICAgICAgeSA9IE5VTEwpICsNCiAgDQogICMgVGVtYSBEYXJrL01vZGVybiBNaW5pbWFsaXN0DQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMiwgZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJkMzQzNiIsIG1hcmdpbiA9IG1hcmdpbihiPTEwKSksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGNvbG9yID0gIiM2MzZlNzIiLCBtYXJnaW4gPSBtYXJnaW4oYj0yMCkpLA0KICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxMiksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICIjZGZlNmU5IiksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKDIwLCAyMCwgMjAsIDIwKQ0KICApDQpgYGANCg0KR3JhZmlrIGluaSBtZW1iYWdpIGR1YSBkdW5pYTogRHVuaWEgS2ViZXR1bGFuIChhYnUtYWJ1KSBkYW4gRHVuaWEgRWZla3Rpdml0YXMgKG1lcmFoKS4NCg0KLSBab25hIE1lcmFoIChUaGUgRGFuZ2VyIFpvbmUgZm9yICRIXzAkKTpJbmkgYWRhbGFoIGFyZWEgZWtza2x1c2lmIHlhbmcgaGFueWEgYmlzYSBkaXRlbWJ1cyBqaWthIG1vZGVsIGtpdGEgYmVuYXItYmVuYXIgbWVtaWxpa2kgcGVyZm9ybWEgeWFuZyBrdWF0LiBLYXJlbmEga2l0YSBtZW5nZ3VuYWthbiBzdGFuZGFyICRcYWxwaGEgPSAwLjA1JCwgYXJlYSBpbmkgYWRhbGFoIGFtYmFuZyBiYXRhcyBwZW1idWt0aWFuIGJhaHdhIGhhc2lsIGtpdGEgYnVrYW4ga2FyZW5hIGtlYmVydW50dW5nYW4gc2VtYXRhLg0KDQotIFRpYW5nIEJpcnUgTmVvbiAoUG9zaXNpIE1vZGVsIEtpdGEpOkdhcmlzIGJpcnUgeWFuZyBtZW5vbmpvbCBpbmkgYWRhbGFoIHJlcHJlc2VudGFzaSBkYXJpIGRhdGEgbnlhdGEga2l0YSAoJFogPSAyLjMxJCkuIFNlY2FyYSB2aXN1YWwsIGdhcmlzIGluaSB0ZWxhaCBtZW55ZWJlcmFuZyBqYXVoIGtlIGRhbGFtIHpvbmEgbWVyYWguIEluaSBhZGFsYWggYnVrdGkgZmlzaWsgYmFod2EgbW9kZWwgcHJlZGlrc2kgY2h1cm4ga2l0YSBzdWRhaCBsdWx1cyB1amlhbiBkYW4gYmVrZXJqYSBzZWNhcmEgZWZla3RpZi4NCg0KLSBMZW5na3VuZ2FuIEFidS1hYnUgKERpc3RyaWJ1c2kgTm9ybWFsKTpHdW51bmcgaW5pIG1lbnVuanVra2FuIGtlbXVuZ2tpbmFuIGhhc2lsIGppa2EgbW9kZWwga2l0YSBzZWJlbmFybnlhIGJpYXNhLWJpYXNhIHNhamEuIEthcmVuYSBnYXJpcyBiaXJ1IGtpdGEgYmVyYWRhIGphdWggZGkgbGVyZW5nIHBhbGluZyB1anVuZywgbWFrYSBwZWx1YW5nIGtpdGEgc2FsYWggZGFsYW0gbWVuZ2FtYmlsIGtlc2ltcHVsYW4gc2FuZ2F0bGFoIHRpcGlzIChoYW55YSAyLDElKS4NCg0KDQojIC4gUmVmZXJlbnNpDQoxIC4gV2FscG9sZSwgUi4gRS4gKDIwMTYpLiBQcm9iYWJpbGl0eSAmIFN0YXRpc3RpY3MgZm9yIEVuZ2luZWVycyAmIFNjaWVudGlzdHMuIFBlYXJzb24uIA0KDQoyIC4gRXZlcml0dCwgQi4gUy4sICYgU2tyb25kYWwsIEEuICgyMDEwKS4gVGhlIENhbWJyaWRnZSBEaWN0aW9uYXJ5IG9mIFN0YXRpc3RpY3MuIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzLiANCg0KMyAuIFdpY2toYW0sIEguICgyMDE2KS4gZ2dwbG90MjogRWxlZ2FudCBHcmFwaGljcyBmb3IgRGF0YSBBbmFseXNpcy4gU3ByaW5nZXIuIA0KDQo0IC4gRmllbGQsIEEuLCBNaWxlcywgSi4sICYgRmllbGQsIFouICgyMDEyKS4gRGlzY292ZXJpbmcgU3RhdGlzdGljcyBVc2luZyBSLiBTQUdFIFB1YmxpY2F0aW9ucy4gDQoNCjUgLiBOaWVsc2VuLCBKLiAoMTk5MykuIFVzYWJpbGl0eSBFbmdpbmVlcmluZy4gQWNhZGVtaWMgUHJlc3MuIA0KDQo2IC4gU2NobXVsbGVyLCBKLiAoMjAxNykuIFN0YXRpc3RpY2FsIEFuYWx5c2lzIHdpdGggUiBGb3IgRHVtbWllcy4gSm9obiBXaWxleSAmIFNvbnMuIA0KDQo3IC4gS29oYXZpLCBSLiwgVGFuZywgRC4sICYgWHUsIFkuICgyMDIwKS4gVHJ1c3R3b3J0aHkgT25saW5lIENvbnRyb2xsZWQgRXhwZXJpbWVudHM6IEEgUHJhY3RpY2FsIEd1aWRlIHRvIEEvQiBUZXN0aW5nLiBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcy4gDQoNCjggLiBHZWxtYW4sIEEuLCAmIEhpbGwsIEouICgyMDA2KS4gRGF0YSBBbmFseXNpcyBVc2luZyBSZWdyZXNzaW9uIGFuZCBNdWx0aWxldmVsL0hpZXJhcmNoaWNhbCBNb2RlbHMuIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzLiANCg0KOSAuIERhbGdhYXJkLCBQLiAoMjAwOCkuIEludHJvZHVjdG9yeSBTdGF0aXN0aWNzIHdpdGggUi4gU3ByaW5nZXIuDQoNCg0KMTAuIEFncmVzdGksIEEuICgyMDE4KS4gQW4gSW50cm9kdWN0aW9uIHRvIENhdGVnb3JpY2FsIERhdGEgQW5hbHlzaXMuIFdpbGV5LiANCg0KDQoxMS4gU2llZ2VsLCBTLiwgJiBDYXN0ZWxsYW4sIE4uIEouICgxOTg4KS4gTm9ucGFyYW1ldHJpYyBTdGF0aXN0aWNzIGZvciB0aGUgQmVoYXZpb3JhbCBTY2llbmNlcy4gTWNHcmF3LUhpbGwuIA0KDQoNCg0KMTIuIENvaGVuLCBKLiAoMTk4OCkuIFN0YXRpc3RpY2FsIFBvd2VyIEFuYWx5c2lzIGZvciB0aGUgQmVoYXZpb3JhbCBTY2llbmNlcy4gTGF3cmVuY2UgRXJsYmF1bSBBc3NvY2lhdGVzLg0KDQoNCjEzLiBGYXdjZXR0LCBULiAoMjAwNikuIEFuIEludHJvZHVjdGlvbiB0byBST0MgQW5hbHlzaXMuIFBhdHRlcm4gUmVjb2duaXRpb24gTGV0dGVycy4NCg0K