Rangkuman Teknik Survey dan Sampling

Principle of Sampling

1. Apa itu Sampel?

Sampling itu adalah proses memilih data dari sebuah subset individu, beberapa item, atau observasi dari sebuah populasi yang besar untuk perkiraan karakteristik dari seluruh populasi. Itu banyak digunakan dalam riset, bisnis, dan kebijakan publik untuk membuat efisiensi keputusan berdasakan data.

Di dalam Vidio itu menjelaskan tentang sampling, Sampling itu adalah teknik yang mereprentasikan Seluruh data menjadi Sebagian kecil data, dalam hal ini sample yang representatif akan berusaha untuk mencerminkan seluruh populasi. Untuk lebih pasti ukurna sample harus cukup besar dan ada langkah langkah yang dapat di ambil untuk memastikan yaitu: - Memastikan Sampel anda acak - Membuat Multiple Sampel

Contoh dalam Vidio Sampling ada 2 yaitu:

  1. Data di sebuah kota. Menjelaskan bahwa mengumpulkan data di dalam sebuah kota itu membutuhkan Korelasi antara β€œBerapa Umur mu?” dan β€œApa Pekerjaan mu?”.
  2. Data di sebuah sekolah. Menjelaskan tentang mengumpulkan data di dalam sebuah sekolah yang berisi 1000 siswa menggunakan susu coklat dan menjelaskan sample yang akurat dan tidak akurat, di contoh ini awal sample menggunakan 10 siswa itu menandakan sample tidak akurat karena jumlah mahasiswa terlalu banyak, tetapi di jelaskan juga yang lebih baik yaitu menggunakan 100 siswa dalam sample atau 1/10 dari jumlah siswa tersebut, tetapi untuk pengujian tidak selalu menggunakan 1/10, sesuai dengan jumlah populasi yang ada.

2. Populasi vs Sampel

Dalam Statistik, memahami perbedaan antara populasi dan sampel sangat penting untuk analis data, inferensi, dan pengambilan keputusan.

2.1. Populasi

Populasi adalah setiap orang, benda, atau titik data yang termasuk kelompok tertentu.

Misalnya populasi adalah setiap orang yang merupakan warga negara asal anda atau populasi dari setiap celana yang di produksi oleh perusahaan, tapi sebenarnya itu bisa apa saja, tetapi bahwa populasi terdiri dari setiap benda yang termasuk dalam kelompok itu.

Simbol yang digunakan :

  1. \(\mu=\) Mean
  2. \(p=\) Proportion
  3. \(\sigma=\) Std. Deviasi
  4. \(N=\) Size
  5. \(\rho=\) Correlation Coefficient

2.2 Sample

Sample adalah bagian kecil dari populasi yang besar.

Contoh : 1. Survey terhadap 1000 orang di suatu negara. 2. Celana yang diproduksi dalam waktu tertentu.

Simbol yang digunakan :

  1. \(\bar{x}=\) Mean
  2. \(\hat{p}=\) Proportion
  3. \(s=\) Std. Deviasi
  4. \(n=\) Size
  5. \(r=\) Correlation Coefficient

2.3 Perbedaan Utama

Saat melakukan penelitian statistik, penting untuk membedakan antara data populasi dan data sampel. Populasi itu mengacu pada seluruh kelompok yang menjadi perhatian dalam sebuah penelitian, Sedangkan sampel adalah bagian yang kecil dipilih dari populasi tersebut untuk dianalisis.

Fitur Populasi (N) Sample(n)
Definisi Seluruh Kelompok yang diminati Subset yang dipilih untuk dipelajari
Ukuran Besar atau tak terbatas Porsi lebih kecil dan mudah diatur
Notasi Menggunakan Huruf Besar Menggunakan Huruf Kecil
Parameter Nilai Sebenarnya Perkiraan
Biaya & Waktu Tinggi Lebih Rendah
Ketepatan Memberikan Informasi yang akurat Memberikan Perkiran dengan Beberapa margin Kesalahan

3. Mengapa menggunakan Sampel?

1. Efektivitas Biaya. Karena pengumpulan data jika kita menggunakan populasi maka akan banyak biayanya, Jika kita menggunakan sampel itu dapat mengurangi biaya yang terkait dengan pengumpulam, proses, dan analisis data.

2. Efisiensi Waktu Karena Waktu yang diperlukan cukup banyak jika kita mempelajari atau menanalisis dari keseluruhan populasi, Jadi agar efisiensi yang baik dengan cara menggunaakan sampel untuk memungkinkan pengumpulan data yang lebih cepat.

3. Kelayakan Beberapa populasi terlalu besar atau tidak dapat diakses secara menyeluruh, jadi kita menggunakan sampel untuk melakukan penelitian.

4. Akurasi dan Keandalan Sampel dapat memberikan wawasan yang sangat akurat dan handal.

5. Mengurangi Kompleksitas Pengelolaan data Karena seluruh data cukup besar untuk dianalisis, jadi sampel ini menyederhanakan pengolaan data serta mewakili seluruh kesimpulan yang bemakna.

6. Pertimbangan Etis Beberapa Penelitian (Kesehatan/Medis). mungkin mengandung risiko.

4. Menghindari Bias Sampel

Bias dalam pengambilan sampel terjadi ketika anggota populasi tertentu secara sistematis dikecualikan atau terwakili secara berlebihan dalam sample. Saya juga sudah merangkum beberapa point yang di ambil dari vidio youtube yang di berikan, berikut adalah rangkuman tersebut:

Di dalam vidio tersebut kita disuruh membayangkan mempunyai termometer yang selalu memberikan pembacaan lima derajat lebih tinggi dari suhu sebenarnya. Apa itu bias?, Setiap yang kita lakukan dengan termometer ini akan salah karena ada pola di dalam kesalahan ini, kesalahan ini bersifat sistematis bukan acak, dalam sains hal ini dinamakan dengan bias.

Agar penelitian bisa akurat, kita harus mewaspadai bias dan harus selalu berusaha untuk menghilangkannya. Nah dalam kasus termometer yang rusak, kita bisa mengganti termometernya, Namun jenis bias lain biasanya lebih sulit di identifikasi dan di hindari.

Seleksi Bias Bayangkan anda sedang menguji vaksin baru untuk melawan virus mematikan, anda mengumpulkan sampel dari universitas setempat. Jika semua peserta adalah pria sehat berumur 20an tahun, hasil penelitian jadi tidak akurat. Mungkin vaksin tersebut memiliki efek samping terhadap wanita atau memiliki efek samping yang hanya muncul pada orang tau yang memiliki penyakit jantung, karena sampel yang dilakukan tidak mewakili populasi secara banyak atau luas, penelitian ini menjadi terbatas. Kesalahan ini terjadi ketika sampel tidak mewakili populasi target salah satu cara untuk menghindari ini adalah pengambilan sampel secara acak.

Lalu disini juga ada Konfirmasi Bias, disini anda menyelidiki bahwa pewarna makanan buatan dapat menyebabkan hyperaktif pada anak anak, disini anda membagi dua kelompok yaitu kelompok memakan permen menggunakan pewarna dan satu lagi kelompok pemakan buah segar. Ternyata anak anak yang memakan permen lebih aktif dibandingkan dengan memakan buah segar. Namun disini ada penjelasan alternatif yang harus dipertimbangkan, yaitu kandungan gula terhadap permen lebih besar dari buah, kesalahan sistematis ini sering terjadi agar sesuai dengan hipotesis yang kita buat. Cara menghindarinya adalah dengan selalu mempertimbangkan penjelasan alternatif dan secara aktif yang bisa membantah hipotesis yang kita buat.

Kesimpulan : Bias bisa muncul di setiap penelitian, mulai dari perancangan metode, pengumpulan data, hingga interpretasi hasil dan penarikan kesimpulan.

Berikut ini beberapa penyebab bias pengambilan sampel:

Aspek Keterangan Cara Mengatasi
Kurangnya Cakupan Beberapa Kelompok dalam populasi tidak dimasukkan dalam kerangka sampel Gunakan kerangka sampel yang representatif untuk memastikan semua kelompok tercakup
Representasi Berlebih Kelompok tertentu memiliki peluang yang jauh lebih tinggi untuk dipilih Gunakan Pengambilan sampel berstrata untuk menjaga posisi seimbang
Bias Seleksi Diri Peserta secara sukarela memilih untuk mengambil bagian, sehingga menghasilkan sampel non acak Gunakan undangan acak dan pertimbangkan insentif untuk menarik kelompok responden yang lebih beragam.

Meminimalkan bias pengambilan sampel itu sangat penting untuk meenghasilkan temuan yang valid, dan dapat digeneralisasi. Dengan pengambilan sampel yang dibangun secara baik, pengambilan metode secara acak, dan mengurangi efek pilihan sendiri, peneliti dapat membangun kualitas serta akurasi penelitian mereka.

5. Pengacakan dalam pengambilan sampel

Pengacakan adalah proses yang memastikan setiap anggota populasi memiliki peluang yang sama untuk dipilih. Hal ini bisa mengurangi bias pengambilan sampel dan meningkatkan generalisasi temuan penelitian. Disini saya juga sudah merangkum isi dari vidio youtube yang di berikan, Berikut adalah rangkuman vidio tentang sampling dan randomisasi dalam Data Science:

Di dalam vidio tersebut mengatakan ada 7 langkah yang terus digunakan dalam berbagai analisis data yaitu:

  1. Define
  2. Identify
  3. Design
  4. Implement
  5. Explore
  6. Test
  7. Communicate

Pemahaman tentang desain penelitian sangat penting untuk menentukan masalah, mengidentifikasi data yang diperlukan, serta memilih variabel dan metode analisis yang tepat.

Disini akan membahas Berapa rata rata gaji seorang Data Scientist, ada beberapa faktor yang harus diperhatikan yaitu:

  • Lokasi: Gaji berbeda di berbagai kota dan negara.
  • Demografi: Ada faktor seperti gender gay pap dan pengaruh ras/gender terhadap gaji.
  • Waktu: Kondisi ekonomi, seperti pandemi covid-19, bisa mempengaruhi gaji dan kebijakan kompensasi.

Metode Penelitian

  1. Studi Eksperimental :

πŸ‘‰πŸ» Mengontrol lingkungan penelitian dari mengacak peserta

πŸ‘‰πŸ» Sulit Dilakukan untuk studi gaji karena banyak faktor lain yang memengaruhi hasil

  1. Studi Observasional :

πŸ‘‰πŸ» Mengumpul data tanpa intervensi langsung.

πŸ‘‰πŸ» Lebih mudah dilakukan, tetapi tidak bisa menentukan hubungan sebab-akibat

Tantangan dalam pengukuran data

  • Realibitas : Konsistensi data jika diatur ulang

  • Validitas : Apakah kita benar-benar mengukur apa yang ingin kita ukur?

  • Bias dalam Self-Report: Peserta bisa melebih-lebihkan atau menyembunyikan informasi

Pengambilan sampel dan bias seleksi:

  • Sampel harus representatif agar hasil dapat digeneralisasi

  • Bias seleksi bisa muncul jika hanya data scientist tertentu yang berpartisipasi

Kesimpulan dalam video tersebut, penelitian data science menghadapi banyak tantangan dalam desain studi, pengukuran, dan sampling. Memahami konsep-konsep ini membantu kita menghasilkan data yang lebih akurat dan berguna.

5.1 Pengambilan sampel acak

Suatu metode dimana setiap elemen dalam populasi memiliki probabilitas pemilihan yang sama, sehingga menghasilkan sampel secara acak. Berikut cara kerjanya:

  • Menggunakan Nomor untuk setiap populasi
  • Menggunakan sistem lotre untuk memilih peserta

Contoh : Sebuah perusahaan memiliki 5000 karyawan, perusahaan tersebut ingin mensurvei 500 karyawan, setiap karyawan diberi nomor dan akan di undi secara acak menggunakan sistem.

5.2 Pengambilan sampel sistematis

Metode yang memilih elemen secara berkala dari daftar berurutan. Berikut cara kerjanya:

  • Tentukan ukuran sample (Misalnya memilih 100 orang dari 1000)
  • Hitung interval pengambilan sample: Ukuran populasi \(\div\) Ukuran sampel (Misalnya 1000 \(\div\) 100 = 10)
  • Pilih titik awal secara acak, lalu pilih setiap orang ke 10

Contoh: Seorang sales ingin mensurvei setiap pelanggan ke 3 dari 600 daftar pembeli. Jika titik awalnya adalah 5, individu yang dipilih akan berada di urutan ke-5, ke-8, ke-11, dst.

5.3 Pengambilan sample subkelompok

Suatu metode yang membagi populasi ke dalam subkelompok bedasarkan statistik yang sama, kemudian secara acak memilih sejumlah partisipan yang berbeda dari setiap subkelompok. Berikut cara kerjanya:

  • Identifikasi Subkelompok yang relevan(Seperti, kelompok usia, tingkat pendapatan, dan pendidikan).
  • Tentukan proporsisi subkelompok dalam populasi.
  • Melakukan pengambilan sample secara acak dalam subkelompok.

Contoh: Sebuah universitas ingin mensurvei mahasiswa dari berbagai tahun akademik. Jika 40% mahasiswa adalah baru, 30% adalah mahasiswa tingkat dua, 20% adalah mahasiswa tingkat tiga, dan 10% mahasiswa tingkat empat, maka sample akan mencerminkan proporsi ini.

Penggunaan pengambilan metode secara acak seperti SRS, Pengambilan sample secara sistematis, dan pengambilan secara subkelompok membantu memastikan sample yang adil, tidak bias, dan representatif. Hal ini meningkatkan kendalan dan validitas temuan penelitian, sehingga bisa lebih dapat digeneralisasikan ke seluruh populasi.

6. Tantangan dalam pengambilan Sample

Proses ini memiliki beberapa tantangan yang dapat memengaruhi akurasi dan keandalan. Berikut beberapa tantangan utama beserta penyebab dan kemungkinan solusinya.

Tantangan Penyebab Solusi
Bias Non Respon Peserta tidak mau atau tidak mampu menanggapi. Survei terlalu panjang atau rumit. Kelompok tertentu cenderung tidak berpartisipasi. Kirim pengingat tindak lanjut. Tawarkan insentif. Sederhanakan format survei.
Kesalahan Rangka Sampling Daftar yang kedaluwarsa atau tidak lengkap. Klasifikasi yang salah. Peserta yang duplikat atau tidak memenuhi syarat disertakan Jaga agar kerangka sampel tetap mutakhir. Periksa kembali sumber data. Gunakan sampel berstrata
Ukuran Sampel Tidak Memadai Sumber daya terbatas untuk sampel besar. Ukuran sampel salah perhitungan. Tingkat putus sekolah tinggi dalam studi longitudinal. Gunakan metode statistik untuk menentukan ukuran sampel yang tepat. Perhitungkan kemungkinan adanya dropout.
Kendala biaya dan Waktu Biaya tinggi untuk pengumpulan data. Keterlambatan dalam menjangkau partisipan. Perlunya peralatan atau personel khusus. Gunakan metode yang hemat biaya seperti survei online. Otomatisasi pengumpulan data. Optimalkan sumber daya.

Dengan Menerapkan solusi yang efektif, peneliti dapat meminimalkan kesalahan dan meningkatkan kualitas studi secara keseluruhan.

7. Aplikasi Dalam Insdustri

Pengambilan sample juga memainkan peran penting terutama di bidang industri, yang memungkinkan organisasi untuk mengumupulkan wawasan, keputusan yang tepat, dan mengoptimalkan proses. Berikut ini adalah area utama dimana pengambilan sampel digunakan secara luas:

Industri Aplikasi Tujuan
Riset Pasar Melakukan survei dan kelompok fokus Memahami preferensi tren, dan perilaku pelanggan
Pelayanan Kesehatan Mempelajari data pasien dan uji klinis Memperkirakan prevalensi penyakit, efektivitas pengobatan, dan tren kesehatan masyarakat
Kontrol Kualitas Memeriksa sebagian produk dalam proses konduksi Memastikan kualitas produk dalam proses produksi
Keuangan Menganalisis transaksi keuangan dan tren pasar Menilai risiko, mendeteksi penipuan, dan membuat keputusan investasi

Dengan pengambilan sampel yang tepat, industri dapat memperoleh wawasan akurat dan handal sekaligus meminimalkan kesalahan atau bias. Hal ini memastikan pengambilan keputusan yang lebih baik, penghematan biaya, dan peningkatan efisiensi operasional.

LS0tDQp0aXRsZTogIlJhbmdrdW1hbiBUZWtuaWsgU3VydmV5IGRhbiBTYW1wbGluZyINCnN1YnRpdGxlOiAiUHJpbmNpcGxlIG9mIFNhbXBsaW5nIg0KYXV0aG9yOiANCiAgLSAiWmFpbiBJcWJhbCBTYXB1dHJhIE5JTSA1MjI0MDAyNCINCmRhdGU6ICAiU2VuaW4sIDEwLzAyLzIwMjUiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgM2RmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiDQotLS0NCg0KPGltZyBzcmM9IkdhbWJhci9Gb3RvLmpwZyIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB3aWR0aDozMDBweDsgbWFyZ2luOiBhdXRvOyI+DQoNCiMgMS4gQXBhIGl0dSBTYW1wZWw/DQogIFNhbXBsaW5nIGl0dSBhZGFsYWggcHJvc2VzIG1lbWlsaWggZGF0YSBkYXJpIHNlYnVhaCBzdWJzZXQgaW5kaXZpZHUsIGJlYmVyYXBhIGl0ZW0sIGF0YXUgb2JzZXJ2YXNpIGRhcmkgc2VidWFoIHBvcHVsYXNpIHlhbmcgYmVzYXIgdW50dWsgcGVya2lyYWFuIGthcmFrdGVyaXN0aWsgZGFyaSBzZWx1cnVoIHBvcHVsYXNpLiBJdHUgYmFueWFrIGRpZ3VuYWthbiBkYWxhbSByaXNldCwgYmlzbmlzLCBkYW4ga2ViaWpha2FuIHB1YmxpayB1bnR1ayBtZW1idWF0IGVmaXNpZW5zaSBrZXB1dHVzYW4gYmVyZGFzYWthbiBkYXRhLg0KICANCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHM9J2FzaXMnfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3lvdXR1YmUuY29tL2VtYmVkL3FoemtDZWJrU1dFP3NpPXVaaWdqN0d5TWtaeXV4T3AiKQ0KYGBgDQoNCiAgRGkgZGFsYW0gVmlkaW8gaXR1IG1lbmplbGFza2FuIHRlbnRhbmcgc2FtcGxpbmcsIFNhbXBsaW5nIGl0dSBhZGFsYWggdGVrbmlrIHlhbmcgbWVyZXByZW50YXNpa2FuIFNlbHVydWggZGF0YSBtZW5qYWRpIFNlYmFnaWFuIGtlY2lsIGRhdGEsIGRhbGFtIGhhbCBpbmkgc2FtcGxlIHlhbmcgcmVwcmVzZW50YXRpZiBha2FuIGJlcnVzYWhhIHVudHVrIG1lbmNlcm1pbmthbiBzZWx1cnVoIHBvcHVsYXNpLiBVbnR1ayBsZWJpaCBwYXN0aSB1a3VybmEgc2FtcGxlIGhhcnVzIGN1a3VwIGJlc2FyIGRhbiBhZGEgbGFuZ2thaCBsYW5na2FoIHlhbmcgZGFwYXQgZGkgYW1iaWwgdW50dWsgbWVtYXN0aWthbiB5YWl0dToNCiAgLSBNZW1hc3Rpa2FuIFNhbXBlbCBhbmRhIGFjYWsNCiAgLSBNZW1idWF0IE11bHRpcGxlIFNhbXBlbA0KICANCkNvbnRvaCBkYWxhbSBWaWRpbyBTYW1wbGluZyBhZGEgMiB5YWl0dToNCg0KMS4gRGF0YSBkaSBzZWJ1YWgga290YS4gDQogIE1lbmplbGFza2FuIGJhaHdhIG1lbmd1bXB1bGthbiBkYXRhIGRpIGRhbGFtIHNlYnVhaCBrb3RhIGl0dSBtZW1idXR1aGthbiBLb3JlbGFzaSBhbnRhcmEgIkJlcmFwYSBVbXVyIG11PyIgZGFuICJBcGEgUGVrZXJqYWFuIG11PyIuDQoyLiBEYXRhIGRpIHNlYnVhaCBzZWtvbGFoLg0KICBNZW5qZWxhc2thbiB0ZW50YW5nIG1lbmd1bXB1bGthbiBkYXRhIGRpIGRhbGFtIHNlYnVhaCBzZWtvbGFoIHlhbmcgYmVyaXNpIDEwMDAgc2lzd2EgbWVuZ2d1bmFrYW4gc3VzdSBjb2tsYXQgZGFuIG1lbmplbGFza2FuIHNhbXBsZSB5YW5nIGFrdXJhdCBkYW4gdGlkYWsgYWt1cmF0LCBkaSBjb250b2ggaW5pIGF3YWwgc2FtcGxlIG1lbmdndW5ha2FuIDEwIHNpc3dhIGl0dSBtZW5hbmRha2FuIHNhbXBsZSB0aWRhayBha3VyYXQga2FyZW5hIGp1bWxhaCBtYWhhc2lzd2EgdGVybGFsdSBiYW55YWssIHRldGFwaSBkaSBqZWxhc2thbiBqdWdhIHlhbmcgbGViaWggYmFpayB5YWl0dSBtZW5nZ3VuYWthbiAxMDAgc2lzd2EgZGFsYW0gc2FtcGxlIGF0YXUgMS8xMCBkYXJpIGp1bWxhaCBzaXN3YSB0ZXJzZWJ1dCwgdGV0YXBpIHVudHVrIHBlbmd1amlhbiB0aWRhayBzZWxhbHUgbWVuZ2d1bmFrYW4gMS8xMCwgc2VzdWFpIGRlbmdhbiBqdW1sYWggcG9wdWxhc2kgeWFuZyBhZGEuDQogIA0KIyAyLiBQb3B1bGFzaSB2cyBTYW1wZWwNCg0KRGFsYW0gU3RhdGlzdGlrLCBtZW1haGFtaSBwZXJiZWRhYW4gYW50YXJhIHBvcHVsYXNpIGRhbiBzYW1wZWwgc2FuZ2F0IHBlbnRpbmcgdW50dWsgYW5hbGlzIGRhdGEsIGluZmVyZW5zaSwgZGFuIHBlbmdhbWJpbGFuIGtlcHV0dXNhbi4NCg0KYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8veW91dHViZS5jb20vZW1iZWQvYkptMnB0LW1xMmM/c2k9VlBOdE1KZkV3em1RRE5mUiIpDQpgYGANCg0KIyMgMi4xLiBQb3B1bGFzaQ0KDQpQb3B1bGFzaSBhZGFsYWggc2V0aWFwIG9yYW5nLCBiZW5kYSwgYXRhdSB0aXRpayBkYXRhIHlhbmcgdGVybWFzdWsga2Vsb21wb2sgdGVydGVudHUuDQoNCk1pc2FsbnlhIHBvcHVsYXNpIGFkYWxhaCBzZXRpYXAgb3JhbmcgeWFuZyBtZXJ1cGFrYW4gd2FyZ2EgbmVnYXJhIGFzYWwgYW5kYSBhdGF1IHBvcHVsYXNpIGRhcmkgc2V0aWFwIGNlbGFuYSB5YW5nIGRpIHByb2R1a3NpIG9sZWggcGVydXNhaGFhbiwgdGFwaSBzZWJlbmFybnlhIGl0dSBiaXNhIGFwYSBzYWphLCB0ZXRhcGkgYmFod2EgcG9wdWxhc2kgdGVyZGlyaSBkYXJpIHNldGlhcCBiZW5kYSB5YW5nIHRlcm1hc3VrIGRhbGFtIGtlbG9tcG9rIGl0dS4NCg0KU2ltYm9sIHlhbmcgZGlndW5ha2FuIDogDQoNCjEuICRcbXU9JCBNZWFuDQoyLiAkcD0kIFByb3BvcnRpb24NCjMuICRcc2lnbWE9JCBTdGQuIERldmlhc2kNCjQuICROPSQgU2l6ZQ0KNS4gJFxyaG89JCBDb3JyZWxhdGlvbiBDb2VmZmljaWVudA0KDQojIyAyLjIgU2FtcGxlDQoNClNhbXBsZSBhZGFsYWggYmFnaWFuIGtlY2lsIGRhcmkgcG9wdWxhc2kgeWFuZyBiZXNhci4gDQoNCkNvbnRvaCA6DQoxLiBTdXJ2ZXkgdGVyaGFkYXAgMTAwMCBvcmFuZyBkaSBzdWF0dSBuZWdhcmEuDQoyLiBDZWxhbmEgeWFuZyBkaXByb2R1a3NpIGRhbGFtIHdha3R1IHRlcnRlbnR1Lg0KDQpTaW1ib2wgeWFuZyBkaWd1bmFrYW4gOg0KDQoxLiAkXGJhcnt4fT0kIE1lYW4NCjIuICRcaGF0e3B9PSQgUHJvcG9ydGlvbg0KMy4gJHM9JCBTdGQuIERldmlhc2kNCjQuICRuPSQgU2l6ZQ0KNS4gJHI9JCBDb3JyZWxhdGlvbiBDb2VmZmljaWVudA0KDQojIyAyLjMgUGVyYmVkYWFuIFV0YW1hDQoNClNhYXQgbWVsYWt1a2FuIHBlbmVsaXRpYW4gc3RhdGlzdGlrLCBwZW50aW5nIHVudHVrIG1lbWJlZGFrYW4gYW50YXJhIGRhdGEgcG9wdWxhc2kgZGFuIGRhdGEgc2FtcGVsLiBQb3B1bGFzaSBpdHUgbWVuZ2FjdSBwYWRhIHNlbHVydWgga2Vsb21wb2sgeWFuZyBtZW5qYWRpIHBlcmhhdGlhbiBkYWxhbSBzZWJ1YWggcGVuZWxpdGlhbiwgU2VkYW5na2FuIHNhbXBlbCBhZGFsYWggYmFnaWFuIHlhbmcga2VjaWwgZGlwaWxpaCBkYXJpIHBvcHVsYXNpIHRlcnNlYnV0IHVudHVrIGRpYW5hbGlzaXMuDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KDQojIERhdGEgZnJhbWUgdW50dWsgdGFiZWwNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgYEZpdHVyYCA9IGMoIkRlZmluaXNpIiwgIlVrdXJhbiIsICJOb3Rhc2kiLCAiUGFyYW1ldGVyIiwgIkJpYXlhICYgV2FrdHUiLCAiS2V0ZXBhdGFuIiksDQogIGBQb3B1bGFzaSAoTilgID0gYygiU2VsdXJ1aCBLZWxvbXBvayB5YW5nIGRpbWluYXRpIiwiQmVzYXIgYXRhdSB0YWsgdGVyYmF0YXMiLCAiTWVuZ2d1bmFrYW4gSHVydWYgQmVzYXIiLCAiTmlsYWkgU2ViZW5hcm55YSIsICJUaW5nZ2kiLCAiTWVtYmVyaWthbiBJbmZvcm1hc2kgeWFuZyBha3VyYXQiKSwNCiAgYFNhbXBsZSAobilgID0gYygiU3Vic2V0IHlhbmcgZGlwaWxpaCB1bnR1ayBkaXBlbGFqYXJpIiwgIlBvcnNpIGxlYmloIGtlY2lsIGRhbiBtdWRhaCBkaWF0dXIiLCAiTWVuZ2d1bmFrYW4gSHVydWYgS2VjaWwiLCAiUGVya2lyYWFuIiwgIkxlYmloIFJlbmRhaCIsICJNZW1iZXJpa2FuIFBlcmtpcmFuIGRlbmdhbiBCZWJlcmFwYSBtYXJnaW4gS2VzYWxhaGFuIikNCikNCg0KIyBDZXRhayB0YWJlbA0Ka2FibGUoZGF0YSwgY29sLm5hbWVzID0gYygiRml0dXIiLCAiUG9wdWxhc2kgKE4pIiwgIlNhbXBsZShuKSIpKQ0KYGBgDQoNCiMgMy4gTWVuZ2FwYSBtZW5nZ3VuYWthbiBTYW1wZWw/DQoNCioqMS4gRWZla3Rpdml0YXMgQmlheWEuKioNCkthcmVuYSBwZW5ndW1wdWxhbiBkYXRhIGppa2Ega2l0YSBtZW5nZ3VuYWthbiBwb3B1bGFzaSBtYWthIGFrYW4gYmFueWFrIGJpYXlhbnlhLCBKaWthIGtpdGEgbWVuZ2d1bmFrYW4gc2FtcGVsIGl0dSBkYXBhdCBtZW5ndXJhbmdpIGJpYXlhIHlhbmcgdGVya2FpdCBkZW5nYW4gcGVuZ3VtcHVsYW0sIHByb3NlcywgZGFuIGFuYWxpc2lzIGRhdGEuDQoNCioqMi4gRWZpc2llbnNpIFdha3R1KioNCkthcmVuYSBXYWt0dSB5YW5nIGRpcGVybHVrYW4gY3VrdXAgYmFueWFrIGppa2Ega2l0YSBtZW1wZWxhamFyaSBhdGF1IG1lbmFuYWxpc2lzIGRhcmkga2VzZWx1cnVoYW4gcG9wdWxhc2ksIEphZGkgYWdhciBlZmlzaWVuc2kgeWFuZyBiYWlrIGRlbmdhbiBjYXJhIG1lbmdndW5hYWthbiBzYW1wZWwgdW50dWsgbWVtdW5na2lua2FuIHBlbmd1bXB1bGFuIGRhdGEgeWFuZyBsZWJpaCBjZXBhdC4NCg0KKiozLiBLZWxheWFrYW4qKg0KQmViZXJhcGEgcG9wdWxhc2kgdGVybGFsdSBiZXNhciBhdGF1IHRpZGFrIGRhcGF0IGRpYWtzZXMgc2VjYXJhIG1lbnllbHVydWgsIGphZGkga2l0YSBtZW5nZ3VuYWthbiBzYW1wZWwgdW50dWsgbWVsYWt1a2FuIHBlbmVsaXRpYW4uDQoNCioqNC4gQWt1cmFzaSBkYW4gS2VhbmRhbGFuKioNClNhbXBlbCBkYXBhdCBtZW1iZXJpa2FuIHdhd2FzYW4geWFuZyBzYW5nYXQgYWt1cmF0IGRhbiBoYW5kYWwuDQoNCioqNS4gTWVuZ3VyYW5naSBLb21wbGVrc2l0YXMgUGVuZ2Vsb2xhYW4gZGF0YSoqDQpLYXJlbmEgc2VsdXJ1aCBkYXRhIGN1a3VwIGJlc2FyIHVudHVrIGRpYW5hbGlzaXMsIGphZGkgc2FtcGVsIGluaSBtZW55ZWRlcmhhbmFrYW4gcGVuZ29sYWFuIGRhdGEgc2VydGEgbWV3YWtpbGkgc2VsdXJ1aCBrZXNpbXB1bGFuIHlhbmcgYmVtYWtuYS4NCg0KKio2LiBQZXJ0aW1iYW5nYW4gRXRpcyoqDQpCZWJlcmFwYSBQZW5lbGl0aWFuIChLZXNlaGF0YW4vTWVkaXMpLiBtdW5na2luIG1lbmdhbmR1bmcgcmlzaWtvLg0KDQojIDQuIE1lbmdoaW5kYXJpIEJpYXMgU2FtcGVsDQoNCkJpYXMgZGFsYW0gcGVuZ2FtYmlsYW4gc2FtcGVsIHRlcmphZGkga2V0aWthIGFuZ2dvdGEgcG9wdWxhc2kgdGVydGVudHUgc2VjYXJhIHNpc3RlbWF0aXMgZGlrZWN1YWxpa2FuIGF0YXUgdGVyd2FraWxpIHNlY2FyYSBiZXJsZWJpaGFuIGRhbGFtIHNhbXBsZS4gU2F5YSBqdWdhIHN1ZGFoIG1lcmFuZ2t1bSBiZWJlcmFwYSBwb2ludCB5YW5nIGRpIGFtYmlsIGRhcmkgdmlkaW8geW91dHViZSB5YW5nIGRpIGJlcmlrYW4sIGJlcmlrdXQgYWRhbGFoIHJhbmdrdW1hbiB0ZXJzZWJ1dDoNCg0KYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8veW91dHViZS5jb20vZW1iZWQvQk5JQ01yWXRQSlk/c2k9emthMUFsRFhXcTMwaHZxZSIpDQpgYGANCg0KRGkgZGFsYW0gdmlkaW8gdGVyc2VidXQga2l0YSBkaXN1cnVoIG1lbWJheWFuZ2thbiBtZW1wdW55YWkgdGVybW9tZXRlciB5YW5nIHNlbGFsdSBtZW1iZXJpa2FuIHBlbWJhY2FhbiBsaW1hIGRlcmFqYXQgbGViaWggdGluZ2dpIGRhcmkgc3VodSBzZWJlbmFybnlhLiBBcGEgaXR1IGJpYXM/LCBTZXRpYXAgeWFuZyBraXRhIGxha3VrYW4gZGVuZ2FuIHRlcm1vbWV0ZXIgaW5pIGFrYW4gc2FsYWgga2FyZW5hIGFkYSBwb2xhIGRpIGRhbGFtIGtlc2FsYWhhbiBpbmksIGtlc2FsYWhhbiBpbmkgYmVyc2lmYXQgc2lzdGVtYXRpcyBidWthbiBhY2FrLCBkYWxhbSBzYWlucyBoYWwgaW5pIGRpbmFtYWthbiBkZW5nYW4gYmlhcy4NCg0KQWdhciBwZW5lbGl0aWFuIGJpc2EgYWt1cmF0LCBraXRhIGhhcnVzIG1ld2FzcGFkYWkgYmlhcyBkYW4gaGFydXMgc2VsYWx1IGJlcnVzYWhhIHVudHVrIG1lbmdoaWxhbmdrYW5ueWEuIE5haCBkYWxhbSBrYXN1cyB0ZXJtb21ldGVyIHlhbmcgcnVzYWssIGtpdGEgYmlzYSBtZW5nZ2FudGkgdGVybW9tZXRlcm55YSwgTmFtdW4gamVuaXMgYmlhcyBsYWluIGJpYXNhbnlhIGxlYmloIHN1bGl0IGRpIGlkZW50aWZpa2FzaSBkYW4gZGkgaGluZGFyaS4NCg0KKipTZWxla3NpIEJpYXMqKg0KQmF5YW5na2FuIGFuZGEgc2VkYW5nIG1lbmd1amkgdmFrc2luIGJhcnUgdW50dWsgbWVsYXdhbiB2aXJ1cyBtZW1hdGlrYW4sIGFuZGEgbWVuZ3VtcHVsa2FuIHNhbXBlbCBkYXJpIHVuaXZlcnNpdGFzIHNldGVtcGF0LiBKaWthIHNlbXVhIHBlc2VydGEgYWRhbGFoIHByaWEgc2VoYXQgYmVydW11ciAyMGFuIHRhaHVuLCBoYXNpbCBwZW5lbGl0aWFuIGphZGkgdGlkYWsgYWt1cmF0LiBNdW5na2luIHZha3NpbiB0ZXJzZWJ1dCBtZW1pbGlraSBlZmVrIHNhbXBpbmcgdGVyaGFkYXAgd2FuaXRhIGF0YXUgbWVtaWxpa2kgZWZlayBzYW1waW5nIHlhbmcgaGFueWEgbXVuY3VsIHBhZGEgb3JhbmcgdGF1IHlhbmcgbWVtaWxpa2kgcGVueWFraXQgamFudHVuZywga2FyZW5hIHNhbXBlbCB5YW5nIGRpbGFrdWthbiB0aWRhayBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEgYmFueWFrIGF0YXUgbHVhcywgcGVuZWxpdGlhbiBpbmkgbWVuamFkaSB0ZXJiYXRhcy4gS2VzYWxhaGFuIGluaSB0ZXJqYWRpIGtldGlrYSBzYW1wZWwgdGlkYWsgbWV3YWtpbGkgcG9wdWxhc2kgdGFyZ2V0IHNhbGFoIHNhdHUgY2FyYSB1bnR1ayBtZW5naGluZGFyaSBpbmkgYWRhbGFoIHBlbmdhbWJpbGFuIHNhbXBlbCBzZWNhcmEgYWNhay4NCg0KTGFsdSBkaXNpbmkganVnYSBhZGEgKipLb25maXJtYXNpIEJpYXMqKiwgZGlzaW5pIGFuZGEgbWVueWVsaWRpa2kgYmFod2EgKipwZXdhcm5hIG1ha2FuYW4gYnVhdGFuIGRhcGF0IG1lbnllYmFia2FuIGh5cGVyYWt0aWYgcGFkYSBhbmFrIGFuYWsqKiwgZGlzaW5pIGFuZGEgbWVtYmFnaSBkdWEga2Vsb21wb2sgeWFpdHUga2Vsb21wb2sgbWVtYWthbiBwZXJtZW4gbWVuZ2d1bmFrYW4gcGV3YXJuYSBkYW4gc2F0dSBsYWdpIGtlbG9tcG9rIHBlbWFrYW4gYnVhaCBzZWdhci4gVGVybnlhdGEgYW5hayBhbmFrIHlhbmcgbWVtYWthbiBwZXJtZW4gbGViaWggYWt0aWYgZGliYW5kaW5na2FuIGRlbmdhbiBtZW1ha2FuIGJ1YWggc2VnYXIuIE5hbXVuIGRpc2luaSBhZGEgcGVuamVsYXNhbiBhbHRlcm5hdGlmIHlhbmcgaGFydXMgZGlwZXJ0aW1iYW5na2FuLCB5YWl0dSBrYW5kdW5nYW4gZ3VsYSB0ZXJoYWRhcCBwZXJtZW4gbGViaWggYmVzYXIgZGFyaSBidWFoLCBrZXNhbGFoYW4gc2lzdGVtYXRpcyBpbmkgc2VyaW5nIHRlcmphZGkgYWdhciBzZXN1YWkgZGVuZ2FuIGhpcG90ZXNpcyB5YW5nIGtpdGEgYnVhdC4gQ2FyYSBtZW5naGluZGFyaW55YSBhZGFsYWggZGVuZ2FuIHNlbGFsdSBtZW1wZXJ0aW1iYW5na2FuIHBlbmplbGFzYW4gYWx0ZXJuYXRpZiBkYW4gc2VjYXJhIGFrdGlmIHlhbmcgYmlzYSBtZW1iYW50YWggaGlwb3Rlc2lzIHlhbmcga2l0YSBidWF0LiANCg0KS2VzaW1wdWxhbiA6IEJpYXMgYmlzYSBtdW5jdWwgZGkgc2V0aWFwIHBlbmVsaXRpYW4sIG11bGFpIGRhcmkgcGVyYW5jYW5nYW4gbWV0b2RlLCBwZW5ndW1wdWxhbiBkYXRhLCBoaW5nZ2EgaW50ZXJwcmV0YXNpIGhhc2lsIGRhbiBwZW5hcmlrYW4ga2VzaW1wdWxhbi4NCg0KQmVyaWt1dCBpbmkgYmViZXJhcGEgcGVueWViYWIgYmlhcyBwZW5nYW1iaWxhbiBzYW1wZWw6DQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCg0KIyBEYXRhIGZyYW1lIHVudHVrIHRhYmVsDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIGBBc3Bla2AgPSBjKCJLdXJhbmdueWEgQ2FrdXBhbiIsICJSZXByZXNlbnRhc2kgQmVybGViaWgiLCAiQmlhcyBTZWxla3NpIERpcmkiKSwNCiAgYEtldGVyYW5nYW5gID0gYygiQmViZXJhcGEgS2Vsb21wb2sgZGFsYW0gcG9wdWxhc2kgdGlkYWsgZGltYXN1a2thbiBkYWxhbSBrZXJhbmdrYSBzYW1wZWwiLCJLZWxvbXBvayB0ZXJ0ZW50dSBtZW1pbGlraSBwZWx1YW5nIHlhbmcgamF1aCBsZWJpaCB0aW5nZ2kgdW50dWsgZGlwaWxpaCIsICJQZXNlcnRhIHNlY2FyYSBzdWthcmVsYSBtZW1pbGloIHVudHVrIG1lbmdhbWJpbCBiYWdpYW4sIHNlaGluZ2dhIG1lbmdoYXNpbGthbiBzYW1wZWwgbm9uIGFjYWsiKSwNCiAgYENhcmEgTWVuZ2F0YXNpYCA9IGMoIkd1bmFrYW4ga2VyYW5na2Egc2FtcGVsIHlhbmcgcmVwcmVzZW50YXRpZiB1bnR1ayBtZW1hc3Rpa2FuIHNlbXVhIGtlbG9tcG9rIHRlcmNha3VwIiwgIkd1bmFrYW4gUGVuZ2FtYmlsYW4gc2FtcGVsIGJlcnN0cmF0YSB1bnR1ayBtZW5qYWdhIHBvc2lzaSBzZWltYmFuZyIsICJHdW5ha2FuIHVuZGFuZ2FuIGFjYWsgZGFuIHBlcnRpbWJhbmdrYW4gaW5zZW50aWYgdW50dWsgbWVuYXJpayBrZWxvbXBvayByZXNwb25kZW4geWFuZyBsZWJpaCBiZXJhZ2FtLiIpDQopDQoNCiMgQ2V0YWsgdGFiZWwNCmthYmxlKGRhdGEsIGNvbC5uYW1lcyA9IGMoIkFzcGVrIiwgIktldGVyYW5nYW4iLCAiQ2FyYSBNZW5nYXRhc2kiKSkNCmBgYA0KDQpNZW1pbmltYWxrYW4gYmlhcyBwZW5nYW1iaWxhbiBzYW1wZWwgaXR1IHNhbmdhdCBwZW50aW5nIHVudHVrIG1lZW5naGFzaWxrYW4gdGVtdWFuIHlhbmcgdmFsaWQsIGRhbiBkYXBhdCBkaWdlbmVyYWxpc2FzaS4gRGVuZ2FuIHBlbmdhbWJpbGFuIHNhbXBlbCB5YW5nIGRpYmFuZ3VuIHNlY2FyYSBiYWlrLCBwZW5nYW1iaWxhbiBtZXRvZGUgc2VjYXJhIGFjYWssIGRhbiBtZW5ndXJhbmdpIGVmZWsgcGlsaWhhbiBzZW5kaXJpLCBwZW5lbGl0aSBkYXBhdCBtZW1iYW5ndW4ga3VhbGl0YXMgc2VydGEgYWt1cmFzaSBwZW5lbGl0aWFuIG1lcmVrYS4NCg0KIyA1LiBQZW5nYWNha2FuIGRhbGFtIHBlbmdhbWJpbGFuIHNhbXBlbA0KDQpQZW5nYWNha2FuIGFkYWxhaCBwcm9zZXMgeWFuZyBtZW1hc3Rpa2FuIHNldGlhcCBhbmdnb3RhIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIGRpcGlsaWguIEhhbCBpbmkgYmlzYSBtZW5ndXJhbmdpIGJpYXMgcGVuZ2FtYmlsYW4gc2FtcGVsIGRhbiBtZW5pbmdrYXRrYW4gZ2VuZXJhbGlzYXNpIHRlbXVhbiBwZW5lbGl0aWFuLiBEaXNpbmkgc2F5YSBqdWdhIHN1ZGFoIG1lcmFuZ2t1bSBpc2kgZGFyaSB2aWRpbyB5b3V0dWJlIHlhbmcgZGkgYmVyaWthbiwgQmVyaWt1dCBhZGFsYWggcmFuZ2t1bWFuIHZpZGlvIHRlbnRhbmcgc2FtcGxpbmcgZGFuIHJhbmRvbWlzYXNpIGRhbGFtIERhdGEgU2NpZW5jZToNCg0KYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8veW91dHViZS5jb20vZW1iZWQvVTI3MkZGeEc4TEU/c2k9cHlVY3V2Wk1yMmFFZG1TSSIpDQpgYGANCg0KRGkgZGFsYW0gdmlkaW8gdGVyc2VidXQgbWVuZ2F0YWthbiBhZGEgNyBsYW5na2FoIHlhbmcgdGVydXMgZGlndW5ha2FuIGRhbGFtIGJlcmJhZ2FpIGFuYWxpc2lzIGRhdGEgeWFpdHU6DQoNCjEuIERlZmluZQ0KMi4gSWRlbnRpZnkNCjMuIERlc2lnbg0KNC4gSW1wbGVtZW50DQo1LiBFeHBsb3JlDQo2LiBUZXN0DQo3LiBDb21tdW5pY2F0ZQ0KDQpQZW1haGFtYW4gdGVudGFuZyBkZXNhaW4gcGVuZWxpdGlhbiBzYW5nYXQgcGVudGluZyB1bnR1ayBtZW5lbnR1a2FuIG1hc2FsYWgsIG1lbmdpZGVudGlmaWthc2kgZGF0YSB5YW5nIGRpcGVybHVrYW4sIHNlcnRhIG1lbWlsaWggdmFyaWFiZWwgZGFuIG1ldG9kZSBhbmFsaXNpcyB5YW5nIHRlcGF0Lg0KDQpEaXNpbmkgYWthbiBtZW1iYWhhcyBCZXJhcGEgcmF0YSByYXRhIGdhamkgc2VvcmFuZyBEYXRhIFNjaWVudGlzdCwgYWRhIGJlYmVyYXBhIGZha3RvciB5YW5nIGhhcnVzIGRpcGVyaGF0aWthbiB5YWl0dToNCg0KLSBMb2thc2k6IEdhamkgYmVyYmVkYSBkaSBiZXJiYWdhaSBrb3RhIGRhbiBuZWdhcmEuDQotIERlbW9ncmFmaTogQWRhIGZha3RvciBzZXBlcnRpIGdlbmRlciBnYXkgcGFwIGRhbiBwZW5nYXJ1aCByYXMvZ2VuZGVyIHRlcmhhZGFwIGdhamkuDQotIFdha3R1OiBLb25kaXNpIGVrb25vbWksIHNlcGVydGkgcGFuZGVtaSBjb3ZpZC0xOSwgYmlzYSBtZW1wZW5nYXJ1aGkgZ2FqaSBkYW4ga2ViaWpha2FuIGtvbXBlbnNhc2kuDQoNCioqTWV0b2RlIFBlbmVsaXRpYW4qKg0KDQoxLiBTdHVkaSBFa3NwZXJpbWVudGFsIDoNCg0K8J+RifCfj7sgTWVuZ29udHJvbCBsaW5na3VuZ2FuIHBlbmVsaXRpYW4gZGFyaSBtZW5nYWNhayBwZXNlcnRhDQoNCvCfkYnwn4+7IFN1bGl0IERpbGFrdWthbiB1bnR1ayBzdHVkaSBnYWppIGthcmVuYSBiYW55YWsgZmFrdG9yIGxhaW4geWFuZyBtZW1lbmdhcnVoaSBoYXNpbA0KDQoyLiBTdHVkaSBPYnNlcnZhc2lvbmFsIDoNCg0K8J+RifCfj7sgTWVuZ3VtcHVsIGRhdGEgdGFucGEgaW50ZXJ2ZW5zaSBsYW5nc3VuZy4NCg0K8J+RifCfj7sgTGViaWggbXVkYWggZGlsYWt1a2FuLCB0ZXRhcGkgdGlkYWsgYmlzYSBtZW5lbnR1a2FuIGh1YnVuZ2FuIHNlYmFiLWFraWJhdA0KDQoqKlRhbnRhbmdhbiBkYWxhbSBwZW5ndWt1cmFuIGRhdGEqKg0KDQotIFJlYWxpYml0YXMgOiBLb25zaXN0ZW5zaSBkYXRhIGppa2EgZGlhdHVyIHVsYW5nDQoNCi0gVmFsaWRpdGFzIDogQXBha2FoIGtpdGEgYmVuYXItYmVuYXIgbWVuZ3VrdXIgYXBhIHlhbmcgaW5naW4ga2l0YSB1a3VyPw0KDQotIEJpYXMgZGFsYW0gU2VsZi1SZXBvcnQ6IFBlc2VydGEgYmlzYSBtZWxlYmloLWxlYmloa2FuIGF0YXUgbWVueWVtYnVueWlrYW4gaW5mb3JtYXNpDQoNCioqUGVuZ2FtYmlsYW4gc2FtcGVsIGRhbiBiaWFzIHNlbGVrc2k6KioNCg0KLSBTYW1wZWwgaGFydXMgcmVwcmVzZW50YXRpZiBhZ2FyIGhhc2lsIGRhcGF0IGRpZ2VuZXJhbGlzYXNpDQoNCi0gQmlhcyBzZWxla3NpIGJpc2EgbXVuY3VsIGppa2EgaGFueWEgZGF0YSBzY2llbnRpc3QgdGVydGVudHUgeWFuZyBiZXJwYXJ0aXNpcGFzaQ0KDQpLZXNpbXB1bGFuIGRhbGFtIHZpZGVvIHRlcnNlYnV0LCBwZW5lbGl0aWFuIGRhdGEgc2NpZW5jZSBtZW5naGFkYXBpIGJhbnlhayB0YW50YW5nYW4gZGFsYW0gZGVzYWluIHN0dWRpLCBwZW5ndWt1cmFuLCBkYW4gc2FtcGxpbmcuIE1lbWFoYW1pIGtvbnNlcC1rb25zZXAgaW5pIG1lbWJhbnR1IGtpdGEgbWVuZ2hhc2lsa2FuIGRhdGEgeWFuZyBsZWJpaCBha3VyYXQgZGFuIGJlcmd1bmEuDQoNCiMjIDUuMSBQZW5nYW1iaWxhbiBzYW1wZWwgYWNhayANClN1YXR1IG1ldG9kZSBkaW1hbmEgc2V0aWFwIGVsZW1lbiBkYWxhbSBwb3B1bGFzaSBtZW1pbGlraSBwcm9iYWJpbGl0YXMgcGVtaWxpaGFuIHlhbmcgc2FtYSwgc2VoaW5nZ2EgbWVuZ2hhc2lsa2FuIHNhbXBlbCBzZWNhcmEgYWNhay4gQmVyaWt1dCBjYXJhIGtlcmphbnlhOg0KDQotIE1lbmdndW5ha2FuIE5vbW9yIHVudHVrIHNldGlhcCBwb3B1bGFzaQ0KLSBNZW5nZ3VuYWthbiBzaXN0ZW0gbG90cmUgdW50dWsgbWVtaWxpaCBwZXNlcnRhDQoNCkNvbnRvaCA6IFNlYnVhaCBwZXJ1c2FoYWFuIG1lbWlsaWtpIDUwMDAga2FyeWF3YW4sIHBlcnVzYWhhYW4gdGVyc2VidXQgaW5naW4gbWVuc3VydmVpIDUwMCBrYXJ5YXdhbiwgc2V0aWFwIGthcnlhd2FuIGRpYmVyaSBub21vciBkYW4gYWthbiBkaSB1bmRpIHNlY2FyYSBhY2FrIG1lbmdndW5ha2FuIHNpc3RlbS4NCg0KIyMgNS4yIFBlbmdhbWJpbGFuIHNhbXBlbCBzaXN0ZW1hdGlzDQpNZXRvZGUgeWFuZyBtZW1pbGloIGVsZW1lbiBzZWNhcmEgYmVya2FsYSBkYXJpIGRhZnRhciBiZXJ1cnV0YW4uIEJlcmlrdXQgY2FyYSBrZXJqYW55YToNCg0KLSBUZW50dWthbiB1a3VyYW4gc2FtcGxlIChNaXNhbG55YSBtZW1pbGloIDEwMCBvcmFuZyBkYXJpIDEwMDApDQotIEhpdHVuZyBpbnRlcnZhbCBwZW5nYW1iaWxhbiBzYW1wbGU6IFVrdXJhbiBwb3B1bGFzaSAkXGRpdiQgVWt1cmFuIHNhbXBlbCAoTWlzYWxueWEgMTAwMCAkXGRpdiQgMTAwID0gMTApDQotIFBpbGloIHRpdGlrIGF3YWwgc2VjYXJhIGFjYWssIGxhbHUgcGlsaWggc2V0aWFwIG9yYW5nIGtlIDEwDQoNCkNvbnRvaDogU2VvcmFuZyBzYWxlcyBpbmdpbiBtZW5zdXJ2ZWkgc2V0aWFwIHBlbGFuZ2dhbiBrZSAzIGRhcmkgNjAwIGRhZnRhciBwZW1iZWxpLiBKaWthIHRpdGlrIGF3YWxueWEgYWRhbGFoIDUsIGluZGl2aWR1IHlhbmcgZGlwaWxpaCBha2FuIGJlcmFkYSBkaSB1cnV0YW4ga2UtNSwga2UtOCwga2UtMTEsIGRzdC4NCg0KIyMgNS4zIFBlbmdhbWJpbGFuIHNhbXBsZSBzdWJrZWxvbXBvaw0KU3VhdHUgbWV0b2RlIHlhbmcgbWVtYmFnaSBwb3B1bGFzaSBrZSBkYWxhbSBzdWJrZWxvbXBvayBiZWRhc2Fya2FuIHN0YXRpc3RpayB5YW5nIHNhbWEsIGtlbXVkaWFuIHNlY2FyYSBhY2FrIG1lbWlsaWggc2VqdW1sYWggcGFydGlzaXBhbiB5YW5nIGJlcmJlZGEgZGFyaSBzZXRpYXAgc3Via2Vsb21wb2suIEJlcmlrdXQgY2FyYSBrZXJqYW55YToNCg0KLSBJZGVudGlmaWthc2kgU3Via2Vsb21wb2sgeWFuZyByZWxldmFuKFNlcGVydGksIGtlbG9tcG9rIHVzaWEsIHRpbmdrYXQgcGVuZGFwYXRhbiwgZGFuIHBlbmRpZGlrYW4pLg0KLSBUZW50dWthbiBwcm9wb3JzaXNpIHN1YmtlbG9tcG9rIGRhbGFtIHBvcHVsYXNpLg0KLSBNZWxha3VrYW4gcGVuZ2FtYmlsYW4gc2FtcGxlIHNlY2FyYSBhY2FrIGRhbGFtIHN1YmtlbG9tcG9rLg0KDQpDb250b2g6IFNlYnVhaCB1bml2ZXJzaXRhcyBpbmdpbiBtZW5zdXJ2ZWkgbWFoYXNpc3dhIGRhcmkgYmVyYmFnYWkgdGFodW4gYWthZGVtaWsuIEppa2EgNDAlIG1haGFzaXN3YSBhZGFsYWggYmFydSwgMzAlIGFkYWxhaCBtYWhhc2lzd2EgdGluZ2thdCBkdWEsIDIwJSBhZGFsYWggbWFoYXNpc3dhIHRpbmdrYXQgdGlnYSwgZGFuIDEwJSBtYWhhc2lzd2EgdGluZ2thdCBlbXBhdCwgbWFrYSBzYW1wbGUgYWthbiBtZW5jZXJtaW5rYW4gcHJvcG9yc2kgaW5pLg0KDQpQZW5nZ3VuYWFuIHBlbmdhbWJpbGFuIG1ldG9kZSBzZWNhcmEgYWNhayBzZXBlcnRpIFNSUywgUGVuZ2FtYmlsYW4gc2FtcGxlIHNlY2FyYSBzaXN0ZW1hdGlzLCBkYW4gcGVuZ2FtYmlsYW4gc2VjYXJhIHN1YmtlbG9tcG9rIG1lbWJhbnR1IG1lbWFzdGlrYW4gc2FtcGxlIHlhbmcgYWRpbCwgdGlkYWsgYmlhcywgZGFuIHJlcHJlc2VudGF0aWYuIEhhbCBpbmkgbWVuaW5na2F0a2FuIGtlbmRhbGFuIGRhbiB2YWxpZGl0YXMgdGVtdWFuIHBlbmVsaXRpYW4sIHNlaGluZ2dhIGJpc2EgbGViaWggZGFwYXQgZGlnZW5lcmFsaXNhc2lrYW4ga2Ugc2VsdXJ1aCBwb3B1bGFzaS4NCg0KIyA2LiBUYW50YW5nYW4gZGFsYW0gcGVuZ2FtYmlsYW4gU2FtcGxlDQoNClByb3NlcyBpbmkgbWVtaWxpa2kgYmViZXJhcGEgdGFudGFuZ2FuIHlhbmcgZGFwYXQgbWVtZW5nYXJ1aGkgYWt1cmFzaSBkYW4ga2VhbmRhbGFuLiBCZXJpa3V0IGJlYmVyYXBhIHRhbnRhbmdhbiB1dGFtYSBiZXNlcnRhIHBlbnllYmFiIGRhbiBrZW11bmdraW5hbiBzb2x1c2lueWEuDQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgYFRhbnRhbmdhbmAgPSBjKCJCaWFzIE5vbiBSZXNwb24iLCAiS2VzYWxhaGFuIFJhbmdrYSBTYW1wbGluZyIsICJVa3VyYW4gU2FtcGVsIFRpZGFrIE1lbWFkYWkiLCAiS2VuZGFsYSBiaWF5YSBkYW4gV2FrdHUiKSwNCiAgYFBlbnllYmFiYCA9IGMoIlBlc2VydGEgdGlkYWsgbWF1IGF0YXUgdGlkYWsgbWFtcHUgbWVuYW5nZ2FwaS4gU3VydmVpIHRlcmxhbHUgcGFuamFuZyBhdGF1IHJ1bWl0LiBLZWxvbXBvayB0ZXJ0ZW50dSBjZW5kZXJ1bmcgdGlkYWsgYmVycGFydGlzaXBhc2kuIiwgIkRhZnRhciB5YW5nIGtlZGFsdXdhcnNhIGF0YXUgdGlkYWsgbGVuZ2thcC4gS2xhc2lmaWthc2kgeWFuZyBzYWxhaC4gUGVzZXJ0YSB5YW5nIGR1cGxpa2F0IGF0YXUgdGlkYWsgbWVtZW51aGkgc3lhcmF0IGRpc2VydGFrYW4iLCAiU3VtYmVyIGRheWEgdGVyYmF0YXMgdW50dWsgc2FtcGVsIGJlc2FyLiBVa3VyYW4gc2FtcGVsIHNhbGFoIHBlcmhpdHVuZ2FuLiBUaW5na2F0IHB1dHVzIHNla29sYWggdGluZ2dpIGRhbGFtIHN0dWRpIGxvbmdpdHVkaW5hbC4iLCAiQmlheWEgdGluZ2dpIHVudHVrIHBlbmd1bXB1bGFuIGRhdGEuIEtldGVybGFtYmF0YW4gZGFsYW0gbWVuamFuZ2thdSBwYXJ0aXNpcGFuLiBQZXJsdW55YSBwZXJhbGF0YW4gYXRhdSBwZXJzb25lbCBraHVzdXMuIiksDQogIGBTb2x1c2lgPSBjKCJLaXJpbSBwZW5naW5nYXQgdGluZGFrIGxhbmp1dC4gVGF3YXJrYW4gaW5zZW50aWYuIFNlZGVyaGFuYWthbiBmb3JtYXQgc3VydmVpLiIsICJKYWdhIGFnYXIga2VyYW5na2Egc2FtcGVsIHRldGFwIG11dGFraGlyLiBQZXJpa3NhIGtlbWJhbGkgc3VtYmVyIGRhdGEuIEd1bmFrYW4gc2FtcGVsIGJlcnN0cmF0YSIsICJHdW5ha2FuIG1ldG9kZSBzdGF0aXN0aWsgdW50dWsgbWVuZW50dWthbiB1a3VyYW4gc2FtcGVsIHlhbmcgdGVwYXQuIFBlcmhpdHVuZ2thbiBrZW11bmdraW5hbiBhZGFueWEgZHJvcG91dC4iLCAiR3VuYWthbiBtZXRvZGUgeWFuZyBoZW1hdCBiaWF5YSBzZXBlcnRpIHN1cnZlaSBvbmxpbmUuIE90b21hdGlzYXNpIHBlbmd1bXB1bGFuIGRhdGEuIE9wdGltYWxrYW4gc3VtYmVyIGRheWEuIikNCikNCg0Ka2FibGUoZGF0YSwgY29sLm5hbWVzID0gYygiVGFudGFuZ2FuIiwgIlBlbnllYmFiIiwgIlNvbHVzaSIpKQ0KYGBgDQoNCkRlbmdhbiBNZW5lcmFwa2FuIHNvbHVzaSB5YW5nIGVmZWt0aWYsIHBlbmVsaXRpIGRhcGF0IG1lbWluaW1hbGthbiBrZXNhbGFoYW4gZGFuIG1lbmluZ2thdGthbiBrdWFsaXRhcyBzdHVkaSBzZWNhcmEga2VzZWx1cnVoYW4uDQoNCiMgNy4gQXBsaWthc2kgRGFsYW0gSW5zZHVzdHJpDQoNClBlbmdhbWJpbGFuIHNhbXBsZSBqdWdhIG1lbWFpbmthbiBwZXJhbiBwZW50aW5nIHRlcnV0YW1hIGRpIGJpZGFuZyBpbmR1c3RyaSwgeWFuZyBtZW11bmdraW5rYW4gb3JnYW5pc2FzaSB1bnR1ayBtZW5ndW11cHVsa2FuIHdhd2FzYW4sIGtlcHV0dXNhbiB5YW5nIHRlcGF0LCBkYW4gbWVuZ29wdGltYWxrYW4gcHJvc2VzLiBCZXJpa3V0IGluaSBhZGFsYWggYXJlYSB1dGFtYSBkaW1hbmEgcGVuZ2FtYmlsYW4gc2FtcGVsIGRpZ3VuYWthbiBzZWNhcmEgbHVhczoNCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBgSW5kdXN0cmlgID0gYygiUmlzZXQgUGFzYXIiLCAiUGVsYXlhbmFuIEtlc2VoYXRhbiIsICJLb250cm9sIEt1YWxpdGFzIiwgIktldWFuZ2FuIiksDQogIGBBcGxpa2FzaWAgPSBjKCJNZWxha3VrYW4gc3VydmVpIGRhbiBrZWxvbXBvayBmb2t1cyIsICJNZW1wZWxhamFyaSBkYXRhIHBhc2llbiBkYW4gdWppIGtsaW5pcyIsICJNZW1lcmlrc2Egc2ViYWdpYW4gcHJvZHVrIGRhbGFtIHByb3NlcyBrb25kdWtzaSIsICJNZW5nYW5hbGlzaXMgdHJhbnNha3NpIGtldWFuZ2FuIGRhbiB0cmVuIHBhc2FyIiksDQogIGBUdWp1YW5gID0gYygiTWVtYWhhbWkgcHJlZmVyZW5zaSB0cmVuLCBkYW4gcGVyaWxha3UgcGVsYW5nZ2FuIiwgIk1lbXBlcmtpcmFrYW4gcHJldmFsZW5zaSBwZW55YWtpdCwgZWZla3Rpdml0YXMgcGVuZ29iYXRhbiwgZGFuIHRyZW4ga2VzZWhhdGFuIG1hc3lhcmFrYXQiLCAiTWVtYXN0aWthbiBrdWFsaXRhcyBwcm9kdWsgZGFsYW0gcHJvc2VzIHByb2R1a3NpIiwgIk1lbmlsYWkgcmlzaWtvLCBtZW5kZXRla3NpIHBlbmlwdWFuLCBkYW4gbWVtYnVhdCBrZXB1dHVzYW4gaW52ZXN0YXNpIikNCikNCg0Ka2FibGUoZGF0YSwgY29sLm5hbWVzID0gYygiSW5kdXN0cmkiLCAiQXBsaWthc2kiLCAiVHVqdWFuIikpDQpgYGANCg0KRGVuZ2FuIHBlbmdhbWJpbGFuIHNhbXBlbCB5YW5nIHRlcGF0LCBpbmR1c3RyaSBkYXBhdCBtZW1wZXJvbGVoIHdhd2FzYW4gYWt1cmF0IGRhbiBoYW5kYWwgc2VrYWxpZ3VzIG1lbWluaW1hbGthbiBrZXNhbGFoYW4gYXRhdSBiaWFzLiBIYWwgaW5pIG1lbWFzdGlrYW4gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIHlhbmcgbGViaWggYmFpaywgcGVuZ2hlbWF0YW4gYmlheWEsIGRhbiBwZW5pbmdrYXRhbiBlZmlzaWVuc2kgb3BlcmFzaW9uYWwu