Teknik Sampling dan Survei

Prinsip Pengambilan Sampel

Logo

1 Apa itu Pengambilan Sampel?

Pengambilan sampel adalah proses pemilihan sebagian individu, item, atau pengamatan dari populasi yang lebih besar untuk memperkirakan karakteristik seluruh populasi. Pengambilan sampel banyak digunakan dalam penelitian, bisnis, dan kebijakan publik untuk membuat keputusan berdasarkan data secara efisien.


2 Populasi vs Sampel

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

2.1 Populasi

Populasi (N) adalah keseluruhan kelompok individu, objek, atau peristiwa yang ingin diteliti oleh seorang peneliti. Populasi mencakup semua kemungkinan pengamatan yang relevan dengan penelitian.

Contoh:

  • ✅ Semua penduduk suatu kota saat mempelajari perilaku pemilih.

  • ✅ Setiap telepon pintar yang diproduksi dari pabrik saat menganalisis tingkat kerusakan.

  • ✅ Setiap mahasiswa di universitas saat mengukur nilai ujian rata-rata.

Jenis Populasi:

  • 1 Populasi Terbatas: Populasi dengan jumlah elemen yang tetap (misalnya, karyawan di suatu perusahaan).

  • 2 Populasi Tak Terbatas: Populasi dengan jumlah elemen yang tidak dapat dihitung (misalnya, bakteri dalam cawan petri).

  • 3 Populasi Target: Populasi spesifik yang ingin dipelajari oleh peneliti.

  • 4 Populasi yang Dapat Diakses: Bagian dari populasi sasaran yang tersedia untuk penelitian.

2.2 Sampel

Sampel (n) adalah bagian dari populasi yang dipilih untuk analisis. Karena mempelajari keseluruhan populasi sering kali tidak praktis dikarenakan biaya, waktu, atau aksesibilitas, dan sampel juga digunakan untuk membuat kesimpulan tentang populasi.

Contoh:

  • ✅ Survei terhadap 1.000 penduduk kota untuk memperkirakan opini publik.

  • ✅ Memeriksa 500 telepon pintar yang dipilih secara acak untuk menilai tingkat kerusakan.

  • ✅ Menganalisis nilai ujian dari 200 siswa yang dipilih secara acak.

Ciri-ciri Sampel yang Baik:

  • 1 Representatif: Secara akurat mencerminkan populasi.

  • 2 Acak: Dipilih tanpa bias.

  • 3 Cukup Besar: Memastikan estimasi yang dapat diandalkan.

  • 4 Bias Minimal: Menghindari kesalahan sistematis.

2.3 Perbedaan Utama

Saat melakukan penelitian atau analisis statistik, penting untuk membedakan antara populasi dan sampel. Populasi mengacu pada seluruh kelompok yang menjadi perhatian dalam sebuah penelitian, sedangkan sampel adalah bagian yang lebih kecil yang dipilih dari populasi tersebut untuk dianalisis. Memahami perbedaannya sangat penting untuk membuat kesimpulan yang akurat dan memastikan validitas kesimpulan.

Berikut adalah perbedaan utama antara populasi dan sampel:

Fitur Populasi (N) Sampel (n)
Definisi Seluruh kelompok yang diminati Subset yang dipilih untuk penelitian
Ukuran Besar atau tak terbatas Lebih kecil, bagian yang dapat dikelola
Notasi Menggunakan huruf kapital (misalnya, N, μ, σ) Menggunakan huruf kecil (misalnya, n, , s)
Parameter Nilai sebenarnya (misalnya, rata-rata populasi μ, standar deviasi σ) Estimasi (misalnya, rata-rata sampel , standar deviasi s)
Biaya & Waktu Tinggi Lebih rendah
Akurasi Memberikan informasi yang akurat Memberikan estimasi dengan margin kesalahan

3 Mengapa Menggunakan Sampel?

Dalam penelitian dan pengumpulan data, mempelajari seluruh populasi sering kali tidak praktis atau bahkan mustahil. Oleh karena itu, peneliti menggunakan sampel, yaitu bagian kecil yang dapat dikelola dari populasi. Berikut adalah alasan utama mengapa sampel digunakan:

  • Efektivitas Biaya
    Mengumpulkan data dari seluruh populasi membutuhkan sumber daya keuangan yang besar. Sampel membantu mengurangi biaya yang terkait dengan pengumpulan, pemrosesan, dan analisis data.

  • Efisiensi Waktu
    Mempelajari seluruh populasi memakan banyak waktu. Sampel yang dipilih dengan baik memungkinkan pengumpulan dan analisis data yang lebih cepat.

  • Kelayakan
    Beberapa populasi terlalu besar atau sulit diakses untuk dipelajari sepenuhnya. Sampel memungkinkan penelitian tetap dapat dilakukan ketika pengumpulan data skala populasi tidak memungkinkan.

  • Akurasi dan Keandalan
    Jika dipilih dengan benar, sampel dapat memberikan wawasan yang sangat akurat dan dapat diandalkan. Teknik statistik memastikan bahwa sampel dapat mewakili seluruh populasi secara efektif.

  • Mengurangi Kompleksitas Manajemen Data
    Mengelola jumlah data yang sangat besar bisa menjadi tantangan. Sampel menyederhanakan pengelolaan data sambil tetap memberikan kesimpulan yang bermakna.

  • Pertimbangan Etika
    Beberapa penelitian (misalnya, uji coba medis) dapat melibatkan risiko, sehingga tidak etis untuk melakukan pengujian pada seluruh populasi. Sampel memungkinkan eksperimen yang lebih terkontrol dan etis.


4 Menghindari Bias Sampel

Bias pengambilan sampel terjadi ketika anggota populasi tertentu secara sistematis dikecualikan atau terwakili secara berlebihan dalam sampel.

Ini mengarah pada hasil yang tidak akurat dan tidak representatif, yang berpotensi membelokkan kesimpulan dan mengurangi validitas sebuah studi. Berikut beberapa penyebab bias dalam pengambilan sampel:

Aspek Deskripsi Cara Mengatasi
Undercoverage Beberapa kelompok dalam populasi tidak termasuk dalam kerangka sampel. Gunakan kerangka sampel yang representatif untuk memastikan semua kelompok tercakup.
Overrepresentation Kelompok tertentu memiliki kemungkinan yang secara tidak proporsional lebih tinggi untuk dipilih. Gunakan sampling berstrata untuk menjaga proporsi yang seimbang.
Bias Pemilihan Diri Peserta secara sukarela memilih untuk ikut serta, yang mengarah pada sampel yang tidak acak. Gunakan undangan acak dan pertimbangkan insentif untuk menarik kelompok responden yang lebih beragam.

Meminimalkan bias dalam pengambilan sampel sangat penting untuk menghasilkan temuan penelitian yang valid, andal, dan dapat digeneralisasikan. Dengan memastikan kerangka sampel yang dibangun dengan baik, menerapkan metode pemilihan acak, dan mengurangi efek pemilihan diri, peneliti dapat meningkatkan kualitas dan akurasi studi mereka.


5 Random dalam Pengambilan Sampel

Random adalah proses yang memastikan setiap anggota populasi memiliki peluang yang sama untuk dipilih. Hal ini mengurangi bias pengambilan sampel dan meningkatkan generalisasi temuan penelitian.

5.1 Pengambilan Sampel Acak Sederhana (Simple Random Sampling)

Metode ini memastikan bahwa setiap anggota populasi memiliki peluang yang sama untuk dipilih, sehingga sampel benar-benar acak. Berikut cara kerjanya:

  • ✅ Berikan nomor unik kepada setiap anggota populasi.
  • ✅ Gunakan generator angka acak atau sistem undian untuk memilih peserta.

Contoh:
Sebuah perusahaan ingin mensurvei 500 karyawan dari total 5.000 karyawan. Setiap karyawan diberi nomor, lalu 500 orang dipilih secara acak menggunakan sistem undian.

5.2 Pengambilan Sampel Sistematis (Systematic Sampling)

Metode ini memilih elemen dari daftar yang telah diurutkan dengan selang waktu tertentu. Berikut cara kerjanya:

  • ✅ Tentukan ukuran sampel (misalnya, memilih 100 orang dari daftar 1.000 orang).
  • ✅ Hitung interval pemilihan: Ukuran Populasi ÷ Ukuran Sampel (misalnya, 1.000 ÷ 100 = 10).
  • ✅ Pilih titik awal secara acak, lalu pilih setiap orang ke-10 dari daftar.

Contoh:
Seorang peneliti ingin mensurvei setiap pelanggan ke-5 dari daftar 1.000 pembeli. Jika titik awalnya adalah angka 3, maka orang yang dipilih adalah pembeli ke-3, ke-8, ke-13, dan seterusnya.

5.3 Pengambilan Sampel Berstrata (Stratified Sampling)

Metode ini membagi populasi ke dalam kelompok-kelompok kecil (strata) berdasarkan karakteristik tertentu, lalu memilih peserta secara acak dalam jumlah yang sebanding dari setiap kelompok. Berikut cara kerjanya:

  • ✅ Identifikasi strata yang relevan (misalnya, kelompok usia, tingkat pendapatan, pendidikan).
  • ✅ Tentukan proporsi masing-masing kelompok dalam populasi.
  • ✅ Lakukan pengambilan sampel acak dalam setiap kelompok.

Contoh:
Sebuah universitas ingin mensurvei mahasiswa dari berbagai tingkat akademik. Jika 40% mahasiswa adalah tahun pertama, 30% tahun kedua, 20% tahun ketiga, dan 10% tahun keempat, maka jumlah sampel akan mencerminkan proporsi ini.

Menggunakan metode pengambilan sampel acak seperti SRS (Simple Random Sampling), pengambilan sampel sistematis, dan pengambilan sampel berstrata membantu memastikan bahwa sampel yang dipilih adil, tidak bias, dan representatif terhadap populasi. Ini meningkatkan keandalan dan validitas hasil penelitian, sehingga lebih bisa digeneralisasi ke seluruh populasi.


6 Tantangan dalam Pengambilan Sampel

Pengambilan sampel adalah proses penting dalam penelitian, tetapi memiliki beberapa tantangan yang dapat memengaruhi akurasi dan keandalan hasil. Berikut adalah ringkasan tantangan utama dalam pengambilan sampel, beserta penyebab dan solusinya.

Tantangan Penyebab Solisi
Bias Non-Respons Peserta enggan atau tidak dapat merespons. Survei terlalu panjang atau rumit. Kelompok tertentu kurang mungkin berpartisipasi. Kirim pengingat tindak lanjut. Tawarkan insentif. Permudah format survei.
Kesalahan dalam Kerangka Sampel Daftar peserta usang atau tidak lengkap. Klasifikasi salah. Adanya duplikasi atau peserta yang tidak memenuhi syarat. Perbarui kerangka sampel secara berkala. Periksa ulang sumber data. Gunakan metode stratified sampling.
Ukuran Sampel Tidak Memadai Sumber daya terbatas untuk sampel besar. Salah perhitungan ukuran sampel. Tingkat putus sekolah tinggi dalam studi jangka panjang. Gunakan metode statistik untuk menentukan ukuran sampel yang tepat. Pertimbangkan kemungkinan peserta keluar dari studi.
Keterbatasan Biaya dan Waktu Biaya pengumpulan data tinggi. Keterlambatan dalam menjangkau peserta. Membutuhkan alat atau tenaga ahli khusus. Gunakan metode hemat biaya seperti survei online. Otomatiskan pengumpulan data. Optimalkan sumber daya.

Dengan mengatasi tantangan ini, proses pengambilan sampel akan menjadi lebih andal, efisien, dan representatif terhadap populasi sasaran. Dengan menerapkan solusi yang tepat, peneliti dapat mengurangi kesalahan dan meningkatkan kualitas keseluruhan studi mereka.


7 Penerapan dalam Industri

Pengambilan sampel memainkan peran penting di berbagai industri, memungkinkan organisasi untuk mendapatkan wawasan, membuat keputusan yang lebih baik, dan mengoptimalkan proses. Berikut adalah beberapa bidang utama di mana teknik sampling sering digunakan:

Industri Aplikasi Tujuan
Riset Pasar Melakukan survei dan diskusi kelompok. Memahami preferensi pelanggan, tren, dan perilaku mereka.
Kesehatan Menganalisis data pasien dan uji klinis. Memperkirakan prevalensi penyakit, efektivitas pengobatan, dan tren kesehatan masyarakat.
Kontrol Kualitas Memeriksa sebagian produk dalam proses manufaktur. Memastikan kualitas produk dan kepatuhan terhadap standar industri.
Keuangan Menganalisis transaksi keuangan dan tren pasar. Menilai risiko, mendeteksi penipuan, dan membuat keputusan investasi.

Dengan menerapkan teknik pengambilan sampel yang tepat, industri dapat memperoleh wawasan yang akurat dan andal sambil meminimalkan kesalahan dan bias. Hal ini memastikan pengambilan keputusan yang lebih baik, penghematan biaya, serta peningkatan efisiensi operasional.

LS0tDQp0aXRsZTogIlRla25payBTYW1wbGluZyBkYW4gU3VydmVpIg0Kc3VidGl0bGU6ICJQcmluc2lwIFBlbmdhbWJpbGFuIFNhbXBlbCINCmF1dGhvcjogDQogIC0gIk5vdmEgU2l0b3J1cyA1MjI0MDAyMyINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUuY3NzIg0KLS0tDQo8c3R5bGU+DQogIGJvZHkgew0KICAgIHRleHQtYWxpZ246IGp1c3RpZnk7DQogIH0NCjwvc3R5bGU+DQoNCjxpbWcgc3JjPSJOT1ZBLmpwZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6NTAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ii8+DQoNCiMgKipBcGEgaXR1IFBlbmdhbWJpbGFuIFNhbXBlbD8qKg0KDQpQZW5nYW1iaWxhbiBzYW1wZWwgYWRhbGFoIHByb3NlcyBwZW1pbGloYW4gc2ViYWdpYW4gaW5kaXZpZHUsIGl0ZW0sIGF0YXUgcGVuZ2FtYXRhbiBkYXJpIHBvcHVsYXNpIHlhbmcgbGViaWggYmVzYXIgdW50dWsgbWVtcGVya2lyYWthbiBrYXJha3RlcmlzdGlrIHNlbHVydWggcG9wdWxhc2kuIFBlbmdhbWJpbGFuIHNhbXBlbCBiYW55YWsgZGlndW5ha2FuIGRhbGFtIHBlbmVsaXRpYW4sIGJpc25pcywgZGFuIGtlYmlqYWthbiBwdWJsaWsgdW50dWsgbWVtYnVhdCBrZXB1dHVzYW4gYmVyZGFzYXJrYW4gZGF0YSBzZWNhcmEgZWZpc2llbi4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoaHRtbHRvb2xzKQ0KDQojIEJ1YXQgZWxlbWVuIEhUTUwgdW50dWsgbWVuYW1waWxrYW4gdmlkZW8NCnZpZGVvX2VtYmVkIDwtIHRhZ3MkaWZyYW1lKA0KICBzcmMgPSAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvcWh6a0NlYmtTV0UiLA0KICB3aWR0aCA9ICI1NjAiLA0KICBoZWlnaHQgPSAiMzE1IiwNCiAgZnJhbWVib3JkZXIgPSAiMCIsDQogIGFsbG93ID0gImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUiLA0KICBhbGxvd2Z1bGxzY3JlZW4gPSBOQQ0KKQ0KDQojIFNpbXBhbiBrZSBmaWxlIEhUTUwgYXRhdSB0YW1waWxrYW4gZGkgdmlld2VyIFJTdHVkaW8NCmJyb3dzYWJsZSh0YWdMaXN0KHZpZGVvX2VtYmVkKSkNCg0KYGBgDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojICoqUG9wdWxhc2kgdnMgU2FtcGVsKioNCg0KRGFsYW0gc3RhdGlzdGlrLCBtZW1haGFtaSBwZXJiZWRhYW4gYW50YXJhIHBvcHVsYXNpIGRhbiBzYW1wZWwgc2FuZ2F0IHBlbnRpbmcgdW50dWsgYW5hbGlzaXMgZGF0YSwgaW5mZXJlbnNpLCBkYW4gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuLg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShodG1sdG9vbHMpDQoNCiMgQnVhdCBlbGVtZW4gSFRNTCB1bnR1ayBtZW5hbXBpbGthbiB2aWRlbw0KdmlkZW9fZW1iZWQgPC0gdGFncyRpZnJhbWUoDQogIHNyYyA9ICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9iSm0ycHQtbXEyYyIsDQogIHdpZHRoID0gIjU2MCIsDQogIGhlaWdodCA9ICIzMTUiLA0KICBmcmFtZWJvcmRlciA9ICIwIiwNCiAgYWxsb3cgPSAiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIsDQogIGFsbG93ZnVsbHNjcmVlbiA9IE5BDQopDQoNCiMgU2ltcGFuIGtlIGZpbGUgSFRNTCBhdGF1IHRhbXBpbGthbiBkaSB2aWV3ZXIgUlN0dWRpbw0KYnJvd3NhYmxlKHRhZ0xpc3QodmlkZW9fZW1iZWQpKQ0KDQoNCg0KYGBgDQoNCiMjIFBvcHVsYXNpDQoNClBvcHVsYXNpIChOKSBhZGFsYWgga2VzZWx1cnVoYW4ga2Vsb21wb2sgaW5kaXZpZHUsIG9iamVrLCBhdGF1IHBlcmlzdGl3YSB5YW5nIGluZ2luIGRpdGVsaXRpIG9sZWggc2VvcmFuZyBwZW5lbGl0aS4gUG9wdWxhc2kgbWVuY2FrdXAgc2VtdWEga2VtdW5na2luYW4gcGVuZ2FtYXRhbiB5YW5nIHJlbGV2YW4gZGVuZ2FuIHBlbmVsaXRpYW4uDQoNCioqQ29udG9oOioqDQoNCi0gICDinIUgU2VtdWEgcGVuZHVkdWsgc3VhdHUga290YSBzYWF0IG1lbXBlbGFqYXJpIHBlcmlsYWt1IHBlbWlsaWguDQoNCi0gICDinIUgU2V0aWFwIHRlbGVwb24gcGludGFyIHlhbmcgZGlwcm9kdWtzaSBkYXJpIHBhYnJpayBzYWF0IG1lbmdhbmFsaXNpcyB0aW5na2F0IGtlcnVzYWthbi4NCg0KLSAgIOKchSBTZXRpYXAgbWFoYXNpc3dhIGRpIHVuaXZlcnNpdGFzIHNhYXQgbWVuZ3VrdXIgbmlsYWkgdWppYW4gcmF0YS1yYXRhLg0KDQoqKkplbmlzIFBvcHVsYXNpOioqDQoNCi0gICBbMV17c3R5bGU9ImNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOyBwYWRkaW5nOjRweCA4cHg7IGJvcmRlci1yYWRpdXM6NHB4OyJ9ICoqUG9wdWxhc2kgVGVyYmF0YXM6KiogUG9wdWxhc2kgZGVuZ2FuIGp1bWxhaCBlbGVtZW4geWFuZyB0ZXRhcCAobWlzYWxueWEsIGthcnlhd2FuIGRpIHN1YXR1IHBlcnVzYWhhYW4pLg0KDQotICAgWzJde3N0eWxlPSJjb2xvcjp3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjpncmVlbjsgcGFkZGluZzo0cHggOHB4OyBib3JkZXItcmFkaXVzOjRweDsifSAqKlBvcHVsYXNpIFRhayBUZXJiYXRhczoqKiBQb3B1bGFzaSBkZW5nYW4ganVtbGFoIGVsZW1lbiB5YW5nIHRpZGFrIGRhcGF0IGRpaGl0dW5nIChtaXNhbG55YSwgYmFrdGVyaSBkYWxhbSBjYXdhbiBwZXRyaSkuDQoNCi0gICBbM117c3R5bGU9ImNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOyBwYWRkaW5nOjRweCA4cHg7IGJvcmRlci1yYWRpdXM6NHB4OyJ9ICoqUG9wdWxhc2kgVGFyZ2V0OioqIFBvcHVsYXNpIHNwZXNpZmlrIHlhbmcgaW5naW4gZGlwZWxhamFyaSBvbGVoIHBlbmVsaXRpLg0KDQotICAgWzRde3N0eWxlPSJjb2xvcjp3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjpncmVlbjsgcGFkZGluZzo0cHggOHB4OyBib3JkZXItcmFkaXVzOjRweDsifSAqKlBvcHVsYXNpIHlhbmcgRGFwYXQgRGlha3NlczoqKiBCYWdpYW4gZGFyaSBwb3B1bGFzaSBzYXNhcmFuIHlhbmcgdGVyc2VkaWEgdW50dWsgcGVuZWxpdGlhbi4NCg0KIyMgU2FtcGVsDQoNClNhbXBlbCAobikgYWRhbGFoIGJhZ2lhbiBkYXJpIHBvcHVsYXNpIHlhbmcgZGlwaWxpaCB1bnR1ayBhbmFsaXNpcy4gS2FyZW5hIG1lbXBlbGFqYXJpIGtlc2VsdXJ1aGFuIHBvcHVsYXNpIHNlcmluZyBrYWxpIHRpZGFrIHByYWt0aXMgZGlrYXJlbmFrYW4gYmlheWEsIHdha3R1LCBhdGF1IGFrc2VzaWJpbGl0YXMsIGRhbiBzYW1wZWwganVnYSBkaWd1bmFrYW4gdW50dWsgbWVtYnVhdCBrZXNpbXB1bGFuIHRlbnRhbmcgcG9wdWxhc2kuDQoNCioqQ29udG9oOioqDQoNCi0gICDinIUgU3VydmVpIHRlcmhhZGFwIDEuMDAwIHBlbmR1ZHVrIGtvdGEgdW50dWsgbWVtcGVya2lyYWthbiBvcGluaSBwdWJsaWsuDQoNCi0gICDinIUgTWVtZXJpa3NhIDUwMCB0ZWxlcG9uIHBpbnRhciB5YW5nIGRpcGlsaWggc2VjYXJhIGFjYWsgdW50dWsgbWVuaWxhaSB0aW5na2F0IGtlcnVzYWthbi4NCg0KLSAgIOKchSBNZW5nYW5hbGlzaXMgbmlsYWkgdWppYW4gZGFyaSAyMDAgc2lzd2EgeWFuZyBkaXBpbGloIHNlY2FyYSBhY2FrLg0KDQoqKkNpcmktY2lyaSBTYW1wZWwgeWFuZyBCYWlrOioqDQoNCi0gICBbMV17c3R5bGU9ImNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOyBwYWRkaW5nOjRweCA4cHg7IGJvcmRlci1yYWRpdXM6NHB4OyJ9ICoqUmVwcmVzZW50YXRpZjoqKiBTZWNhcmEgYWt1cmF0IG1lbmNlcm1pbmthbiBwb3B1bGFzaS4NCg0KLSAgIFsyXXtzdHlsZT0iY29sb3I6d2hpdGU7IGJhY2tncm91bmQtY29sb3I6Z3JlZW47IHBhZGRpbmc6NHB4IDhweDsgYm9yZGVyLXJhZGl1czo0cHg7In0gKipBY2FrOioqIERpcGlsaWggdGFucGEgYmlhcy4NCg0KLSAgIFszXXtzdHlsZT0iY29sb3I6d2hpdGU7IGJhY2tncm91bmQtY29sb3I6Z3JlZW47IHBhZGRpbmc6NHB4IDhweDsgYm9yZGVyLXJhZGl1czo0cHg7In0gKipDdWt1cCBCZXNhcjoqKiBNZW1hc3Rpa2FuIGVzdGltYXNpIHlhbmcgZGFwYXQgZGlhbmRhbGthbi4NCg0KLSAgIFs0XXtzdHlsZT0iY29sb3I6d2hpdGU7IGJhY2tncm91bmQtY29sb3I6Z3JlZW47IHBhZGRpbmc6NHB4IDhweDsgYm9yZGVyLXJhZGl1czo0cHg7In0gKipCaWFzIE1pbmltYWw6KiogTWVuZ2hpbmRhcmkga2VzYWxhaGFuIHNpc3RlbWF0aXMuDQoNCiMjIFBlcmJlZGFhbiBVdGFtYQ0KDQpTYWF0IG1lbGFrdWthbiBwZW5lbGl0aWFuIGF0YXUgYW5hbGlzaXMgc3RhdGlzdGlrLCBwZW50aW5nIHVudHVrIG1lbWJlZGFrYW4gYW50YXJhIHBvcHVsYXNpIGRhbiBzYW1wZWwuIFBvcHVsYXNpIG1lbmdhY3UgcGFkYSBzZWx1cnVoIGtlbG9tcG9rIHlhbmcgbWVuamFkaSBwZXJoYXRpYW4gZGFsYW0gc2VidWFoIHBlbmVsaXRpYW4sIHNlZGFuZ2thbiBzYW1wZWwgYWRhbGFoIGJhZ2lhbiB5YW5nIGxlYmloIGtlY2lsIHlhbmcgZGlwaWxpaCBkYXJpIHBvcHVsYXNpIHRlcnNlYnV0IHVudHVrIGRpYW5hbGlzaXMuIE1lbWFoYW1pIHBlcmJlZGFhbm55YSBzYW5nYXQgcGVudGluZyB1bnR1ayBtZW1idWF0IGtlc2ltcHVsYW4geWFuZyBha3VyYXQgZGFuIG1lbWFzdGlrYW4gdmFsaWRpdGFzIGtlc2ltcHVsYW4uDQoNCkJlcmlrdXQgYWRhbGFoIHBlcmJlZGFhbiB1dGFtYSBhbnRhcmEgcG9wdWxhc2kgZGFuIHNhbXBlbDoNCg0KfCBGaXR1ciB8IFBvcHVsYXNpICgqTiopIHwgU2FtcGVsICgqbiopIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgKipEZWZpbmlzaSoqIHwgU2VsdXJ1aCBrZWxvbXBvayB5YW5nIGRpbWluYXRpIHwgU3Vic2V0IHlhbmcgZGlwaWxpaCB1bnR1ayBwZW5lbGl0aWFuIHwNCnwgKipVa3VyYW4qKiB8IEJlc2FyIGF0YXUgdGFrIHRlcmJhdGFzIHwgTGViaWgga2VjaWwsIGJhZ2lhbiB5YW5nIGRhcGF0IGRpa2Vsb2xhIHwNCnwgKipOb3Rhc2kqKiB8IE1lbmdndW5ha2FuIGh1cnVmIGthcGl0YWwgKG1pc2FsbnlhLCAqTiosICrOvCosICrPgyopIHwgTWVuZ2d1bmFrYW4gaHVydWYga2VjaWwgKG1pc2FsbnlhLCAqbiosICp4zIQqLCAqcyopIHwNCnwgKipQYXJhbWV0ZXIqKiB8IE5pbGFpIHNlYmVuYXJueWEgKG1pc2FsbnlhLCByYXRhLXJhdGEgcG9wdWxhc2kgKs68Kiwgc3RhbmRhciBkZXZpYXNpICrPgyopIHwgRXN0aW1hc2kgKG1pc2FsbnlhLCByYXRhLXJhdGEgc2FtcGVsICp4zIQqLCBzdGFuZGFyIGRldmlhc2kgKnMqKSB8DQp8ICoqQmlheWEgJiBXYWt0dSoqIHwgVGluZ2dpIHwgTGViaWggcmVuZGFoIHwNCnwgKipBa3VyYXNpKiogfCBNZW1iZXJpa2FuIGluZm9ybWFzaSB5YW5nIGFrdXJhdCB8IE1lbWJlcmlrYW4gZXN0aW1hc2kgZGVuZ2FuIG1hcmdpbiBrZXNhbGFoYW4gfA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyAqKk1lbmdhcGEgTWVuZ2d1bmFrYW4gU2FtcGVsPyoqDQoNCkRhbGFtIHBlbmVsaXRpYW4gZGFuIHBlbmd1bXB1bGFuIGRhdGEsIG1lbXBlbGFqYXJpIHNlbHVydWggcG9wdWxhc2kgc2VyaW5nIGthbGkgdGlkYWsgcHJha3RpcyBhdGF1IGJhaGthbiBtdXN0YWhpbC4gT2xlaCBrYXJlbmEgaXR1LCBwZW5lbGl0aSBtZW5nZ3VuYWthbiAqKnNhbXBlbCoqLCB5YWl0dSBiYWdpYW4ga2VjaWwgeWFuZyBkYXBhdCBkaWtlbG9sYSBkYXJpIHBvcHVsYXNpLiBCZXJpa3V0IGFkYWxhaCBhbGFzYW4gdXRhbWEgbWVuZ2FwYSBzYW1wZWwgZGlndW5ha2FuOg0KDQotICAgKipFZmVrdGl2aXRhcyBCaWF5YSoqXA0KICAgIE1lbmd1bXB1bGthbiBkYXRhIGRhcmkgc2VsdXJ1aCBwb3B1bGFzaSBtZW1idXR1aGthbiBzdW1iZXIgZGF5YSBrZXVhbmdhbiB5YW5nIGJlc2FyLiBTYW1wZWwgbWVtYmFudHUgbWVuZ3VyYW5naSBiaWF5YSB5YW5nIHRlcmthaXQgZGVuZ2FuIHBlbmd1bXB1bGFuLCBwZW1yb3Nlc2FuLCBkYW4gYW5hbGlzaXMgZGF0YS4NCg0KLSAgICoqRWZpc2llbnNpIFdha3R1KipcDQogICAgTWVtcGVsYWphcmkgc2VsdXJ1aCBwb3B1bGFzaSBtZW1ha2FuIGJhbnlhayB3YWt0dS4gU2FtcGVsIHlhbmcgZGlwaWxpaCBkZW5nYW4gYmFpayBtZW11bmdraW5rYW4gcGVuZ3VtcHVsYW4gZGFuIGFuYWxpc2lzIGRhdGEgeWFuZyBsZWJpaCBjZXBhdC4NCg0KLSAgICoqS2VsYXlha2FuKipcDQogICAgQmViZXJhcGEgcG9wdWxhc2kgdGVybGFsdSBiZXNhciBhdGF1IHN1bGl0IGRpYWtzZXMgdW50dWsgZGlwZWxhamFyaSBzZXBlbnVobnlhLiBTYW1wZWwgbWVtdW5na2lua2FuIHBlbmVsaXRpYW4gdGV0YXAgZGFwYXQgZGlsYWt1a2FuIGtldGlrYSBwZW5ndW1wdWxhbiBkYXRhIHNrYWxhIHBvcHVsYXNpIHRpZGFrIG1lbXVuZ2tpbmthbi4NCg0KLSAgICoqQWt1cmFzaSBkYW4gS2VhbmRhbGFuKipcDQogICAgSmlrYSBkaXBpbGloIGRlbmdhbiBiZW5hciwgc2FtcGVsIGRhcGF0IG1lbWJlcmlrYW4gd2F3YXNhbiB5YW5nIHNhbmdhdCBha3VyYXQgZGFuIGRhcGF0IGRpYW5kYWxrYW4uIFRla25payBzdGF0aXN0aWsgbWVtYXN0aWthbiBiYWh3YSBzYW1wZWwgZGFwYXQgbWV3YWtpbGkgc2VsdXJ1aCBwb3B1bGFzaSBzZWNhcmEgZWZla3RpZi4NCg0KLSAgICoqTWVuZ3VyYW5naSBLb21wbGVrc2l0YXMgTWFuYWplbWVuIERhdGEqKlwNCiAgICBNZW5nZWxvbGEganVtbGFoIGRhdGEgeWFuZyBzYW5nYXQgYmVzYXIgYmlzYSBtZW5qYWRpIHRhbnRhbmdhbi4gU2FtcGVsIG1lbnllZGVyaGFuYWthbiBwZW5nZWxvbGFhbiBkYXRhIHNhbWJpbCB0ZXRhcCBtZW1iZXJpa2FuIGtlc2ltcHVsYW4geWFuZyBiZXJtYWtuYS4NCg0KLSAgICoqUGVydGltYmFuZ2FuIEV0aWthKipcDQogICAgQmViZXJhcGEgcGVuZWxpdGlhbiAobWlzYWxueWEsIHVqaSBjb2JhIG1lZGlzKSBkYXBhdCBtZWxpYmF0a2FuIHJpc2lrbywgc2VoaW5nZ2EgdGlkYWsgZXRpcyB1bnR1ayBtZWxha3VrYW4gcGVuZ3VqaWFuIHBhZGEgc2VsdXJ1aCBwb3B1bGFzaS4gU2FtcGVsIG1lbXVuZ2tpbmthbiBla3NwZXJpbWVuIHlhbmcgbGViaWggdGVya29udHJvbCBkYW4gZXRpcy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMgKipNZW5naGluZGFyaSBCaWFzIFNhbXBlbCoqDQoNCkJpYXMgcGVuZ2FtYmlsYW4gc2FtcGVsIHRlcmphZGkga2V0aWthIGFuZ2dvdGEgcG9wdWxhc2kgdGVydGVudHUgc2VjYXJhIHNpc3RlbWF0aXMgZGlrZWN1YWxpa2FuIGF0YXUgdGVyd2FraWxpIHNlY2FyYSBiZXJsZWJpaGFuIGRhbGFtIHNhbXBlbC4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoaHRtbHRvb2xzKQ0KDQojIEJ1YXQgZWxlbWVuIEhUTUwgdW50dWsgbWVuYW1waWxrYW4gdmlkZW8NCnZpZGVvX2VtYmVkIDwtIHRhZ3MkaWZyYW1lKA0KICBzcmMgPSAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvQk5JQ01yWXRQSlkiLA0KICB3aWR0aCA9ICI1NjAiLA0KICBoZWlnaHQgPSAiMzE1IiwNCiAgZnJhbWVib3JkZXIgPSAiMCIsDQogIGFsbG93ID0gImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUiLA0KICBhbGxvd2Z1bGxzY3JlZW4gPSBOQQ0KKQ0KDQojIFNpbXBhbiBrZSBmaWxlIEhUTUwgYXRhdSB0YW1waWxrYW4gZGkgdmlld2VyIFJTdHVkaW8NCmJyb3dzYWJsZSh0YWdMaXN0KHZpZGVvX2VtYmVkKSkNCg0KYGBgDQoNCkluaSBtZW5nYXJhaCBwYWRhIGhhc2lsIHlhbmcgdGlkYWsgYWt1cmF0IGRhbiB0aWRhayByZXByZXNlbnRhdGlmLCB5YW5nIGJlcnBvdGVuc2kgbWVtYmVsb2trYW4ga2VzaW1wdWxhbiBkYW4gbWVuZ3VyYW5naSB2YWxpZGl0YXMgc2VidWFoIHN0dWRpLiBCZXJpa3V0IGJlYmVyYXBhIHBlbnllYmFiIGJpYXMgZGFsYW0gcGVuZ2FtYmlsYW4gc2FtcGVsOg0KDQp8IEFzcGVrIHwgRGVza3JpcHNpIHwgQ2FyYSBNZW5nYXRhc2kgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKlVuZGVyY292ZXJhZ2UqKiB8IEJlYmVyYXBhIGtlbG9tcG9rIGRhbGFtIHBvcHVsYXNpIHRpZGFrIHRlcm1hc3VrIGRhbGFtIGtlcmFuZ2thIHNhbXBlbC4gfCBHdW5ha2FuICoqa2VyYW5na2Egc2FtcGVsIHlhbmcgcmVwcmVzZW50YXRpZioqIHVudHVrIG1lbWFzdGlrYW4gc2VtdWEga2Vsb21wb2sgdGVyY2FrdXAuIHwNCnwgKipPdmVycmVwcmVzZW50YXRpb24qKiB8IEtlbG9tcG9rIHRlcnRlbnR1IG1lbWlsaWtpIGtlbXVuZ2tpbmFuIHlhbmcgc2VjYXJhIHRpZGFrIHByb3BvcnNpb25hbCBsZWJpaCB0aW5nZ2kgdW50dWsgZGlwaWxpaC4gfCBHdW5ha2FuICoqc2FtcGxpbmcgYmVyc3RyYXRhKiogdW50dWsgbWVuamFnYSBwcm9wb3JzaSB5YW5nIHNlaW1iYW5nLiB8DQp8ICoqQmlhcyBQZW1pbGloYW4gRGlyaSoqIHwgUGVzZXJ0YSBzZWNhcmEgc3VrYXJlbGEgbWVtaWxpaCB1bnR1ayBpa3V0IHNlcnRhLCB5YW5nIG1lbmdhcmFoIHBhZGEgc2FtcGVsIHlhbmcgdGlkYWsgYWNhay4gfCBHdW5ha2FuICoqdW5kYW5nYW4gYWNhayoqIGRhbiBwZXJ0aW1iYW5na2FuICoqaW5zZW50aWYqKiB1bnR1ayBtZW5hcmlrIGtlbG9tcG9rIHJlc3BvbmRlbiB5YW5nIGxlYmloIGJlcmFnYW0uIHwNCg0KTWVtaW5pbWFsa2FuIGJpYXMgZGFsYW0gcGVuZ2FtYmlsYW4gc2FtcGVsIHNhbmdhdCBwZW50aW5nIHVudHVrIG1lbmdoYXNpbGthbiB0ZW11YW4gcGVuZWxpdGlhbiB5YW5nIHZhbGlkLCBhbmRhbCwgZGFuIGRhcGF0IGRpZ2VuZXJhbGlzYXNpa2FuLiBEZW5nYW4gbWVtYXN0aWthbiBrZXJhbmdrYSBzYW1wZWwgeWFuZyBkaWJhbmd1biBkZW5nYW4gYmFpaywgbWVuZXJhcGthbiBtZXRvZGUgcGVtaWxpaGFuIGFjYWssIGRhbiBtZW5ndXJhbmdpIGVmZWsgcGVtaWxpaGFuIGRpcmksIHBlbmVsaXRpIGRhcGF0IG1lbmluZ2thdGthbiBrdWFsaXRhcyBkYW4gYWt1cmFzaSBzdHVkaSBtZXJla2EuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojICoqUmFuZG9tIGRhbGFtIFBlbmdhbWJpbGFuIFNhbXBlbCoqDQoNClJhbmRvbSBhZGFsYWggcHJvc2VzIHlhbmcgbWVtYXN0aWthbiBzZXRpYXAgYW5nZ290YSBwb3B1bGFzaSBtZW1pbGlraSBwZWx1YW5nIHlhbmcgc2FtYSB1bnR1ayBkaXBpbGloLiBIYWwgaW5pIG1lbmd1cmFuZ2kgYmlhcyBwZW5nYW1iaWxhbiBzYW1wZWwgZGFuIG1lbmluZ2thdGthbiBnZW5lcmFsaXNhc2kgdGVtdWFuIHBlbmVsaXRpYW4uDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGh0bWx0b29scykNCg0KIyBCdWF0IGVsZW1lbiBIVE1MIHVudHVrIG1lbmFtcGlsa2FuIHZpZGVvDQp2aWRlb19lbWJlZCA8LSB0YWdzJGlmcmFtZSgNCiAgc3JjID0gImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1UyNzJGRnhHOExFIiwNCiAgd2lkdGggPSAiNTYwIiwNCiAgaGVpZ2h0ID0gIjMxNSIsDQogIGZyYW1lYm9yZGVyID0gIjAiLA0KICBhbGxvdyA9ICJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlIiwNCiAgYWxsb3dmdWxsc2NyZWVuID0gTkENCikNCg0KIyBTaW1wYW4ga2UgZmlsZSBIVE1MIGF0YXUgdGFtcGlsa2FuIGRpIHZpZXdlciBSU3R1ZGlvDQpicm93c2FibGUodGFnTGlzdCh2aWRlb19lbWJlZCkpDQpgYGANCg0KIyMgUGVuZ2FtYmlsYW4gU2FtcGVsIEFjYWsgU2VkZXJoYW5hIChTaW1wbGUgUmFuZG9tIFNhbXBsaW5nKQ0KDQpNZXRvZGUgaW5pIG1lbWFzdGlrYW4gYmFod2Egc2V0aWFwIGFuZ2dvdGEgcG9wdWxhc2kgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEgdW50dWsgZGlwaWxpaCwgc2VoaW5nZ2Egc2FtcGVsIGJlbmFyLWJlbmFyIGFjYWsuIEJlcmlrdXQgY2FyYSBrZXJqYW55YToNCg0KLSAgIOKchSBCZXJpa2FuIG5vbW9yIHVuaWsga2VwYWRhIHNldGlhcCBhbmdnb3RhIHBvcHVsYXNpLg0KLSAgIOKchSBHdW5ha2FuIGdlbmVyYXRvciBhbmdrYSBhY2FrIGF0YXUgc2lzdGVtIHVuZGlhbiB1bnR1ayBtZW1pbGloIHBlc2VydGEuDQoNCioqQ29udG9oOioqXA0KU2VidWFoIHBlcnVzYWhhYW4gaW5naW4gbWVuc3VydmVpIDUwMCBrYXJ5YXdhbiBkYXJpIHRvdGFsIDUuMDAwIGthcnlhd2FuLiBTZXRpYXAga2FyeWF3YW4gZGliZXJpIG5vbW9yLCBsYWx1IDUwMCBvcmFuZyBkaXBpbGloIHNlY2FyYSBhY2FrIG1lbmdndW5ha2FuIHNpc3RlbSB1bmRpYW4uDQoNCiMjIFBlbmdhbWJpbGFuIFNhbXBlbCBTaXN0ZW1hdGlzIChTeXN0ZW1hdGljIFNhbXBsaW5nKQ0KDQpNZXRvZGUgaW5pIG1lbWlsaWggZWxlbWVuIGRhcmkgZGFmdGFyIHlhbmcgdGVsYWggZGl1cnV0a2FuIGRlbmdhbiBzZWxhbmcgd2FrdHUgdGVydGVudHUuIEJlcmlrdXQgY2FyYSBrZXJqYW55YToNCg0KLSAgIOKchSBUZW50dWthbiB1a3VyYW4gc2FtcGVsIChtaXNhbG55YSwgbWVtaWxpaCAxMDAgb3JhbmcgZGFyaSBkYWZ0YXIgMS4wMDAgb3JhbmcpLg0KLSAgIOKchSBIaXR1bmcgaW50ZXJ2YWwgcGVtaWxpaGFuOiAqKlVrdXJhbiBQb3B1bGFzaSDDtyBVa3VyYW4gU2FtcGVsKiogKG1pc2FsbnlhLCAxLjAwMCDDtyAxMDAgPSAxMCkuDQotICAg4pyFIFBpbGloIHRpdGlrIGF3YWwgc2VjYXJhIGFjYWssIGxhbHUgcGlsaWggc2V0aWFwIG9yYW5nIGtlLTEwIGRhcmkgZGFmdGFyLg0KDQoqKkNvbnRvaDoqKlwNClNlb3JhbmcgcGVuZWxpdGkgaW5naW4gbWVuc3VydmVpIHNldGlhcCBwZWxhbmdnYW4ga2UtNSBkYXJpIGRhZnRhciAxLjAwMCBwZW1iZWxpLiBKaWthIHRpdGlrIGF3YWxueWEgYWRhbGFoIGFuZ2thIDMsIG1ha2Egb3JhbmcgeWFuZyBkaXBpbGloIGFkYWxhaCBwZW1iZWxpIGtlLTMsIGtlLTgsIGtlLTEzLCBkYW4gc2V0ZXJ1c255YS4NCg0KIyMgUGVuZ2FtYmlsYW4gU2FtcGVsIEJlcnN0cmF0YSAoU3RyYXRpZmllZCBTYW1wbGluZykNCg0KTWV0b2RlIGluaSBtZW1iYWdpIHBvcHVsYXNpIGtlIGRhbGFtICoqa2Vsb21wb2sta2Vsb21wb2sga2VjaWwgKHN0cmF0YSkqKiBiZXJkYXNhcmthbiBrYXJha3RlcmlzdGlrIHRlcnRlbnR1LCBsYWx1IG1lbWlsaWggcGVzZXJ0YSBzZWNhcmEgYWNhayBkYWxhbSBqdW1sYWggeWFuZyBzZWJhbmRpbmcgZGFyaSBzZXRpYXAga2Vsb21wb2suIEJlcmlrdXQgY2FyYSBrZXJqYW55YToNCg0KLSAgIOKchSBJZGVudGlmaWthc2kgKipzdHJhdGEqKiB5YW5nIHJlbGV2YW4gKG1pc2FsbnlhLCBrZWxvbXBvayB1c2lhLCB0aW5na2F0IHBlbmRhcGF0YW4sIHBlbmRpZGlrYW4pLg0KLSAgIOKchSBUZW50dWthbiAqKnByb3BvcnNpKiogbWFzaW5nLW1hc2luZyBrZWxvbXBvayBkYWxhbSBwb3B1bGFzaS4NCi0gICDinIUgTGFrdWthbiAqKnBlbmdhbWJpbGFuIHNhbXBlbCBhY2FrKiogZGFsYW0gc2V0aWFwIGtlbG9tcG9rLg0KDQoqKkNvbnRvaDoqKlwNClNlYnVhaCB1bml2ZXJzaXRhcyBpbmdpbiBtZW5zdXJ2ZWkgbWFoYXNpc3dhIGRhcmkgYmVyYmFnYWkgdGluZ2thdCBha2FkZW1pay4gSmlrYSA0MCUgbWFoYXNpc3dhIGFkYWxhaCB0YWh1biBwZXJ0YW1hLCAzMCUgdGFodW4ga2VkdWEsIDIwJSB0YWh1biBrZXRpZ2EsIGRhbiAxMCUgdGFodW4ga2VlbXBhdCwgbWFrYSBqdW1sYWggc2FtcGVsIGFrYW4gbWVuY2VybWlua2FuIHByb3BvcnNpIGluaS4NCg0KTWVuZ2d1bmFrYW4gbWV0b2RlIHBlbmdhbWJpbGFuIHNhbXBlbCBhY2FrIHNlcGVydGkgKipTUlMgKFNpbXBsZSBSYW5kb20gU2FtcGxpbmcpLCBwZW5nYW1iaWxhbiBzYW1wZWwgc2lzdGVtYXRpcywgZGFuIHBlbmdhbWJpbGFuIHNhbXBlbCBiZXJzdHJhdGEqKiBtZW1iYW50dSBtZW1hc3Rpa2FuIGJhaHdhIHNhbXBlbCB5YW5nIGRpcGlsaWggKiphZGlsLCB0aWRhayBiaWFzLCBkYW4gcmVwcmVzZW50YXRpZioqIHRlcmhhZGFwIHBvcHVsYXNpLiBJbmkgbWVuaW5na2F0a2FuIGtlYW5kYWxhbiBkYW4gdmFsaWRpdGFzIGhhc2lsIHBlbmVsaXRpYW4sIHNlaGluZ2dhIGxlYmloIGJpc2EgZGlnZW5lcmFsaXNhc2kga2Ugc2VsdXJ1aCBwb3B1bGFzaS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMgKipUYW50YW5nYW4gZGFsYW0gUGVuZ2FtYmlsYW4gU2FtcGVsKioNCg0KUGVuZ2FtYmlsYW4gc2FtcGVsIGFkYWxhaCBwcm9zZXMgcGVudGluZyBkYWxhbSBwZW5lbGl0aWFuLCB0ZXRhcGkgbWVtaWxpa2kgYmViZXJhcGEgdGFudGFuZ2FuIHlhbmcgZGFwYXQgbWVtZW5nYXJ1aGkgYWt1cmFzaSBkYW4ga2VhbmRhbGFuIGhhc2lsLiBCZXJpa3V0IGFkYWxhaCByaW5na2FzYW4gdGFudGFuZ2FuIHV0YW1hIGRhbGFtIHBlbmdhbWJpbGFuIHNhbXBlbCwgYmVzZXJ0YSBwZW55ZWJhYiBkYW4gc29sdXNpbnlhLg0KDQp8ICoqVGFudGFuZ2FuKiogfCAqKlBlbnllYmFiKiogfCAqKlNvbGlzaSoqIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgKipCaWFzIE5vbi1SZXNwb25zKiogfCBQZXNlcnRhIGVuZ2dhbiBhdGF1IHRpZGFrIGRhcGF0IG1lcmVzcG9ucy4gU3VydmVpIHRlcmxhbHUgcGFuamFuZyBhdGF1IHJ1bWl0LiBLZWxvbXBvayB0ZXJ0ZW50dSBrdXJhbmcgbXVuZ2tpbiBiZXJwYXJ0aXNpcGFzaS4gfCBLaXJpbSBwZW5naW5nYXQgdGluZGFrIGxhbmp1dC4gVGF3YXJrYW4gaW5zZW50aWYuIFBlcm11ZGFoIGZvcm1hdCBzdXJ2ZWkuIHwNCnwgKipLZXNhbGFoYW4gZGFsYW0gS2VyYW5na2EgU2FtcGVsKiogfCBEYWZ0YXIgcGVzZXJ0YSB1c2FuZyBhdGF1IHRpZGFrIGxlbmdrYXAuIEtsYXNpZmlrYXNpIHNhbGFoLiBBZGFueWEgZHVwbGlrYXNpIGF0YXUgcGVzZXJ0YSB5YW5nIHRpZGFrIG1lbWVudWhpIHN5YXJhdC4gfCBQZXJiYXJ1aSBrZXJhbmdrYSBzYW1wZWwgc2VjYXJhIGJlcmthbGEuIFBlcmlrc2EgdWxhbmcgc3VtYmVyIGRhdGEuIEd1bmFrYW4gbWV0b2RlICoqc3RyYXRpZmllZCBzYW1wbGluZyoqLiB8DQp8ICoqVWt1cmFuIFNhbXBlbCBUaWRhayBNZW1hZGFpKiogfCBTdW1iZXIgZGF5YSB0ZXJiYXRhcyB1bnR1ayBzYW1wZWwgYmVzYXIuIFNhbGFoIHBlcmhpdHVuZ2FuIHVrdXJhbiBzYW1wZWwuIFRpbmdrYXQgcHV0dXMgc2Vrb2xhaCB0aW5nZ2kgZGFsYW0gc3R1ZGkgamFuZ2thIHBhbmphbmcuIHwgR3VuYWthbiBtZXRvZGUgc3RhdGlzdGlrIHVudHVrIG1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbCB5YW5nIHRlcGF0LiBQZXJ0aW1iYW5na2FuIGtlbXVuZ2tpbmFuIHBlc2VydGEga2VsdWFyIGRhcmkgc3R1ZGkuIHwNCnwgKipLZXRlcmJhdGFzYW4gQmlheWEgZGFuIFdha3R1KiogfCBCaWF5YSBwZW5ndW1wdWxhbiBkYXRhIHRpbmdnaS4gS2V0ZXJsYW1iYXRhbiBkYWxhbSBtZW5qYW5na2F1IHBlc2VydGEuIE1lbWJ1dHVoa2FuIGFsYXQgYXRhdSB0ZW5hZ2EgYWhsaSBraHVzdXMuIHwgR3VuYWthbiBtZXRvZGUgaGVtYXQgYmlheWEgc2VwZXJ0aSBzdXJ2ZWkgb25saW5lLiBPdG9tYXRpc2thbiBwZW5ndW1wdWxhbiBkYXRhLiBPcHRpbWFsa2FuIHN1bWJlciBkYXlhLiB8DQoNCkRlbmdhbiBtZW5nYXRhc2kgdGFudGFuZ2FuIGluaSwgcHJvc2VzIHBlbmdhbWJpbGFuIHNhbXBlbCBha2FuIG1lbmphZGkgbGViaWggKiphbmRhbCwgZWZpc2llbiwgZGFuIHJlcHJlc2VudGF0aWYqKiB0ZXJoYWRhcCBwb3B1bGFzaSBzYXNhcmFuLiBEZW5nYW4gbWVuZXJhcGthbiBzb2x1c2kgeWFuZyB0ZXBhdCwgcGVuZWxpdGkgZGFwYXQgbWVuZ3VyYW5naSBrZXNhbGFoYW4gZGFuIG1lbmluZ2thdGthbiBrdWFsaXRhcyBrZXNlbHVydWhhbiBzdHVkaSBtZXJla2EuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojICoqUGVuZXJhcGFuIGRhbGFtIEluZHVzdHJpKioNCg0KUGVuZ2FtYmlsYW4gc2FtcGVsIG1lbWFpbmthbiBwZXJhbiBwZW50aW5nIGRpIGJlcmJhZ2FpIGluZHVzdHJpLCBtZW11bmdraW5rYW4gb3JnYW5pc2FzaSB1bnR1ayBtZW5kYXBhdGthbiB3YXdhc2FuLCBtZW1idWF0IGtlcHV0dXNhbiB5YW5nIGxlYmloIGJhaWssIGRhbiBtZW5nb3B0aW1hbGthbiBwcm9zZXMuIEJlcmlrdXQgYWRhbGFoIGJlYmVyYXBhIGJpZGFuZyB1dGFtYSBkaSBtYW5hIHRla25payBzYW1wbGluZyBzZXJpbmcgZGlndW5ha2FuOg0KDQp8ICoqSW5kdXN0cmkqKiB8ICoqQXBsaWthc2kqKiB8ICoqVHVqdWFuKiogfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKlJpc2V0IFBhc2FyKiogfCBNZWxha3VrYW4gc3VydmVpIGRhbiBkaXNrdXNpIGtlbG9tcG9rLiB8IE1lbWFoYW1pIHByZWZlcmVuc2kgcGVsYW5nZ2FuLCB0cmVuLCBkYW4gcGVyaWxha3UgbWVyZWthLiB8DQp8ICoqS2VzZWhhdGFuKiogfCBNZW5nYW5hbGlzaXMgZGF0YSBwYXNpZW4gZGFuIHVqaSBrbGluaXMuIHwgTWVtcGVya2lyYWthbiBwcmV2YWxlbnNpIHBlbnlha2l0LCBlZmVrdGl2aXRhcyBwZW5nb2JhdGFuLCBkYW4gdHJlbiBrZXNlaGF0YW4gbWFzeWFyYWthdC4gfA0KfCAqKktvbnRyb2wgS3VhbGl0YXMqKiB8IE1lbWVyaWtzYSBzZWJhZ2lhbiBwcm9kdWsgZGFsYW0gcHJvc2VzIG1hbnVmYWt0dXIuIHwgTWVtYXN0aWthbiBrdWFsaXRhcyBwcm9kdWsgZGFuIGtlcGF0dWhhbiB0ZXJoYWRhcCBzdGFuZGFyIGluZHVzdHJpLiB8DQp8ICoqS2V1YW5nYW4qKiB8IE1lbmdhbmFsaXNpcyB0cmFuc2Frc2kga2V1YW5nYW4gZGFuIHRyZW4gcGFzYXIuIHwgTWVuaWxhaSByaXNpa28sIG1lbmRldGVrc2kgcGVuaXB1YW4sIGRhbiBtZW1idWF0IGtlcHV0dXNhbiBpbnZlc3Rhc2kuIHwNCg0KRGVuZ2FuIG1lbmVyYXBrYW4gdGVrbmlrIHBlbmdhbWJpbGFuIHNhbXBlbCB5YW5nIHRlcGF0LCBpbmR1c3RyaSBkYXBhdCBtZW1wZXJvbGVoICoqd2F3YXNhbiB5YW5nIGFrdXJhdCBkYW4gYW5kYWwqKiBzYW1iaWwgbWVtaW5pbWFsa2FuIGtlc2FsYWhhbiBkYW4gYmlhcy4gSGFsIGluaSBtZW1hc3Rpa2FuIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiB5YW5nIGxlYmloIGJhaWssIHBlbmdoZW1hdGFuIGJpYXlhLCBzZXJ0YSBwZW5pbmdrYXRhbiBlZmlzaWVuc2kgb3BlcmFzaW9uYWwuDQo=