Tugas Individu

LAPORAN PRAKTIKUM: ANALISIS SAMPLING DAN MARGIN OF ERROR - Teknik Sampling and Survey

Foto Diri

1. Pendahuluan

1.1 Latar Belakang

Dalam penelitian statistik, sering kali tidak memungkinkan untuk mengumpulkan data dari seluruh populasi karena keterbatasan waktu, biaya, dan sumber daya. Oleh karena itu, metode sampling digunakan untuk mengambil sebagian data yang dapat mewakili populasi secara keseluruhan.

Namun, hasil dari sampel tidak selalu mencerminkan populasi secara akurat karena adanya Margin of Error (MoE). MoE adalah ukuran statistik yang menunjukkan sejauh mana estimasi dari sampel dapat menyimpang dari nilai sebenarnya di populasi. Semakin kecil MoE, semakin akurat hasil estimasi terhadap populasi.

Dalam penelitian ini, akan menganalisis rata-rata waktu tidur mahasiswa di sebuah universitas dengan populasi 300 mahasiswa dan mengevaluasi bagaimana metode sampling serta ukuran sampel mempengaruhi Margin of Error.

1.2 Tujuan Praktikum

1.2.1 Mempelajari berbagai metode pengambilan sampel

Menjelajahi Probability Sampling (Simple Random, Stratified, Systematic, Cluster) dan Non-Probability Sampling (Convenience, Purposive, Snowball, Quota) untuk memahami cara kerja dan kapan digunakan.

1.2.2 Menghitung Margin of Error (MoE) pada Probability Sampling

Menghitung MoE untuk menilai seberapa akurat sampel dalam mewakili populasi.

1.2.3 Menganalisis bias pada Non-Probability Sampling

Meneliti potensi bias dalam metode non-probability karena tidak semua individu memiliki peluang yang sama untuk terpilih, yang dapat menyebabkan hasil kurang representatif.

1.2.4 Membandingkan hasil dari berbagai metode sampling

Menganalisis perbedaan hasil rata-rata, MoE, dan bias dari metode sampling untuk menentukan yang paling akurat dan representatif.

1.2.5 Menentukan ukuran sampel untuk MoE ≤ 5%

Menganalisis seberapa besar pengaruh ukuran sampel terhadap keakuratan hasil penelitian.

Pada intinya praktikum ini bertujuan memahami metode sampling, menghitung MoE, dan menentukan metode terbaik untuk mendapatkan hasil yang paling representatif.


2. Metode Sampling yang Digunakan

Data-set yang disajikan:

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS001 Laki-laki Teknik 8 3
MHS002 Perempuan Teknik 8 3
MHS003 Laki-laki Ekonomi 3 5
MHS004 Laki-laki Ilmu Komputer 4 1
MHS005 Laki-laki Kedokteran 8 2
MHS006 Perempuan Psikologi 4 6

Pada bagian ini, kita akan melakukan pengambilan sampel dari data populasi yang berisi 300 mahasiswa menggunakan berbagai metode Probability Sampling dan Non-Probability Sampling, yaitu:

  1. Probability Sampling (Setiap individu memiliki peluang yang sama untuk dipilih)

  2. Non-Probability Sampling (Pemilihan sampel tidak acak dan bisa memiliki bias)

Pengambilan sampel dilakukan(dibantu) dengan menggunakan bahasa pemrograman R, yang memungkinkan kita untuk melakukan seleksi data secara sistematis dan acak.

2.1 Probability Sampling (Sampling Acak)

2.1.1. Simple Random Sampling (SRS)

Simple Random Sampling (SRS) adalah metode di mana setiap individu dalam populasi memiliki peluang yang sama untuk dipilih tanpa memperhatikan karakteristik tertentu.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS179 Laki-laki Hukum 1 4
MHS014 Laki-laki Ilmu Komputer 3 6
MHS195 Laki-laki Teknik 7 1
MHS118 Perempuan Ilmu Komputer 5 7
MHS229 Laki-laki Ekonomi 8 6
MHS244 Laki-laki Kedokteran 1 7

Metode: Semua mahasiswa memiliki kesempatan yang sama untuk dipilih.

Keunggulan: Tidak ada bias dalam pemilihan.

Kelemahan: Tidak mempertimbangkan kelompok dalam populasi.

2.1.2. Stratified Random Sampling

Stratified Sampling membagi populasi menjadi beberapa kelompok berdasarkan karakteristik tertentu (misalnya fakultas) sebelum pengambilan sampel dilakukan.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS152 Laki-laki Ekonomi 1 1
MHS066 Perempuan Ekonomi 3 3
MHS065 Laki-laki Ekonomi 8 6
MHS012 Laki-laki Ekonomi 5 6
MHS194 Laki-laki Ekonomi 3 1
MHS257 Laki-laki Ekonomi 8 2

Metode: Populasi dibagi berdasarkan Fakultas, lalu dipilih proporsi yang sama dari setiap fakultas.

Keunggulan: Representasi lebih baik untuk semua kelompok.

Kelemahan: Butuh informasi tambahan tentang kelompok dalam populasi.

2.1.3. Systematic Sampling

Systematic Sampling memilih sampel dengan pola sistematis, misalnya setiap mahasiswa ke-3 dalam daftar.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
1 MHS001 Laki-laki Teknik 8 3
4 MHS004 Laki-laki Ilmu Komputer 4 1
7 MHS007 Laki-laki Hukum 2 3
10 MHS010 Perempuan Hukum 1 2
13 MHS013 Laki-laki Teknik 3 7
16 MHS016 Laki-laki Hukum 4 5

Metode: Memilih setiap mahasiswa ke-3 dalam daftar.

Keunggulan: Distribusi sampel lebih merata.

Kelemahan: Bisa bias jika ada pola dalam data.

2.1.4. Cluster Sampling

Cluster Sampling membagi populasi menjadi kelompok-kelompok kecil (cluster), lalu beberapa cluster dipilih untuk dijadikan sampel.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS152 Laki-laki Ekonomi 1 1
MHS066 Perempuan Ekonomi 3 3
MHS065 Laki-laki Ekonomi 8 6
MHS012 Laki-laki Ekonomi 5 6
MHS194 Laki-laki Ekonomi 3 1
MHS257 Laki-laki Ekonomi 8 2

Metode: Memilih jumlah mahasiswa yang sama dari setiap fakultas, hingga totalnya 100 mahasiswa.

Keunggulan: Representasi yang seimbang antar kelompok.

Kelemahan: Tidak acak, dapat menyebabkan bias dalam pemilihan.

2.2 Non-Probability Sampling (Sampling Tidak Acak)

2.2.1. Convenience Sampling

Convenience Sampling memilih sampel berdasarkan kemudahan akses, misalnya mahasiswa yang tersedia lebih dulu.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS001 Laki-laki Teknik 8 3
MHS002 Perempuan Teknik 8 3
MHS003 Laki-laki Ekonomi 3 5
MHS004 Laki-laki Ilmu Komputer 4 1
MHS005 Laki-laki Kedokteran 8 2
MHS006 Perempuan Psikologi 4 6

Metode: Mengambil 100 mahasiswa pertama dalam dataset.

Keunggulan: Cepat dan mudah dilakukan.

Kelemahan: Rentan terhadap bias, tidak representatif.

2.2.2. Purposive Sampling

Purposive Sampling memilih sampel berdasarkan kriteria khusus, misalnya mahasiswa dengan waktu tidur kurang dari 4 jam.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS001 Laki-laki Teknik 8 3
MHS002 Perempuan Teknik 8 3
MHS004 Laki-laki Ilmu Komputer 4 1
MHS005 Laki-laki Kedokteran 8 2
MHS007 Laki-laki Hukum 2 3
MHS009 Laki-laki Ilmu Komputer 4 3

Metode: Memilih 100 mahasiswa dengan waktu tidur kurang dari 4 jam.

Keunggulan: Fokus pada kelompok tertentu yang menarik untuk penelitian.

Kelemahan: Tidak mewakili populasi secara keseluruhan.

2.2.3. Snowball Sampling

Snowball Sampling digunakan ketika populasi sulit dijangkau. Sampel pertama dipilih, lalu mereka membantu merekrut sampel berikutnya.

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS001 Laki-laki Teknik 8 3
MHS002 Perempuan Teknik 8 3
MHS003 Laki-laki Ekonomi 3 5
MHS004 Laki-laki Ilmu Komputer 4 1
MHS005 Laki-laki Kedokteran 8 2
MHS006 Perempuan Psikologi 4 6

Metode: Memilih 1 mahasiswa secara acak, lalu mencari mahasiswa lain dengan waktu tidur yang sama hingga jumlah sampel mencapai 100.

Keunggulan: Berguna jika sulit menemukan populasi target.

Kelemahan: Bias tinggi, tidak dapat digeneralisasi.

2.2.4. Quota Sampling

Sampel dipilih hingga kuota tertentu terpenuhi berdasarkan kategori tertentu (misalnya jumlah mahasiswa per fakultas).

ID.Mahasiswa Jenis.Kelamin Fakultas Semester Waktu.Tidur..Jam.
MHS152 Laki-laki Ekonomi 1 1
MHS066 Perempuan Ekonomi 3 3
MHS065 Laki-laki Ekonomi 8 6
MHS012 Laki-laki Ekonomi 5 6
MHS194 Laki-laki Ekonomi 3 1
MHS257 Laki-laki Ekonomi 8 2

Metode: Memilih jumlah mahasiswa yang sama dari setiap fakultas, hingga totalnya 100 mahasiswa.

Keunggulan: Representasi yang seimbang antar kelompok.

Kelemahan: Tidak acak, dapat menyebabkan bias dalam pemilihan.


3. Perhitungan Margin of Error (MoE) dalam Probability Sampling

Secara umum, MoE dihitung dengan rumus:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Dimana:
- \(Z = 1.96\) (untuk tingkat kepercayaan 95%)
- \(n = 100\) (jumlah sampel)
- \(\sigma\) = Simpangan baku sampel

Simpangan baku (\(\sigma\)) dihitung dengan rumus:

\[ \sigma = \sqrt{\frac{\sum (X_i - \bar{X})^2}{n-1}} \]

Dimana:
- \(X_i\) = Waktu tidur mahasiswa ke-i
- \(\bar{X}\) = Rata-rata waktu tidur mahasiswa
- \(n\) = Ukuran sampel

3.1 Simple Random Sampling (SRS)

Diketahui:

## [1] "Simpangan Baku (SRS): 1.88 jam"

\[ MoE = 1.96 \times \frac{1.88}{\sqrt{100}} \]

\[ MoE = 1.96 \times \frac{1.88}{10} \]

\[ MoE = 1.96 \times 0.188 \]

\[ MoE = 0.369 \]

Jadi, MoE = 0.369 jam.

Pada metode Simple Random Sampling (SRS), setiap mahasiswa memiliki peluang yang sama untuk terpilih dalam sampel. Dengan MoE sebesar 0.369 jam, metode ini cukup akurat dalam menggambarkan populasi, tetapi tidak mempertimbangkan variasi yang mungkin ada di antara kelompok mahasiswa, seperti perbedaan pola tidur antar fakultas.

3.2 Stratified Random Sampling

Diketahui:

## [1] "Simpangan Baku (Stratified): 1.76 jam"
  • \(\sigma = 1.76\) jam

Maka:

\[ MoE = 1.96 \times \frac{1.76}{\sqrt{100}} \]

\[ MoE = 1.96 \times \frac{1.76}{10} \]

\[ MoE = 1.96 \times 0.176 \]

\[ MoE = 0.345 \]

Jadi, MoE = 0.345 jam.

Sementara itu, Stratified Random Sampling membagi mahasiswa ke dalam kelompok-kelompok berdasarkan fakultas sebelum sampel diambil. Dengan cara ini, setiap fakultas mendapatkan representasi yang proporsional dalam sampel. MoE yang dihasilkan adalah 0.345 jam, yang merupakan nilai terkecil dibandingkan metode lainnya. Ini menunjukkan bahwa metode ini mampu memberikan estimasi yang paling akurat karena memperhitungkan variasi dalam populasi.

3.3 Systematic Sampling

Diketahui:

## [1] "Simpangan Baku (Systematic): 1.78 jam"
  • \(\sigma = 1.78\) jam

Maka:

\[ MoE = 1.96 \times \frac{1.78}{\sqrt{100}} \]

\[ MoE = 1.96 \times \frac{1.78}{10} \]

\[ MoE = 1.96 \times 0.178 \]

\[ MoE = 0.349 \]

Jadi, MoE = 0.349 jam.

Pada metode Systematic Sampling, mahasiswa dipilih dengan interval tertentu dari daftar populasi. MoE yang dihasilkan adalah 0.349 jam, yang hampir setara dengan metode stratifikasi. Namun, metode ini memiliki potensi bias jika terdapat pola berulang dalam daftar mahasiswa yang digunakan untuk pemilihan sampel.

3.4 Cluster Sampling

Diketahui:

## [1] "Simpangan Baku (Cluster): 1.91 jam"
  • \(\sigma = 1.91\) jam

Maka:

\[ MoE = 1.96 \times \frac{1.91}{\sqrt{100}} \]

\[ MoE = 1.96 \times \frac{1.91}{10} \]

\[ MoE = 1.96 \times 0.191 \]

\[ MoE = 0.374 \]

Jadi, MoE = 0.374 jam.

Terakhir, metode Cluster Sampling mengambil sampel berdasarkan fakultas yang dipilih secara acak, lalu seluruh mahasiswa dalam fakultas tersebut dijadikan sampel. MoE untuk metode ini adalah 0.374 jam, yang merupakan nilai tertinggi dibandingkan metode lainnya. Hal ini menunjukkan bahwa Cluster Sampling cenderung menghasilkan estimasi yang kurang akurat dibandingkan metode lain, terutama jika fakultas yang terpilih memiliki pola tidur yang berbeda dari fakultas lainnya.


4. Analisis Bias dalam Non-Probability Sampling

Non-Probability Sampling adalah metode pemilihan sampel yang tidak memberikan peluang yang sama kepada setiap anggota populasi untuk terpilih. Hal ini dapat menyebabkan bias, yaitu penyimpangan antara hasil sampel dan populasi sebenarnya. Berikut adalah analisis mendalam dari empat jenis Non-Probability Sampling:

4.1 Convenience Sampling

Metode:

Convenience Sampling mengambil sampel berdasarkan kemudahan akses dan ketersediaan subjek. Misalnya, dalam penelitian ini, kita memilih 100 mahasiswa pertama dari dataset tanpa mempertimbangkan karakteristik lainnya.

Keunggulan:

  • Mudah dan cepat: Tidak membutuhkan proses seleksi yang kompleks.
  • Biaya rendah: Tidak memerlukan sumber daya tambahan untuk menjangkau responden.
  • Dapat digunakan untuk eksplorasi awal: Berguna dalam penelitian awal untuk memahami tren kasar sebelum pengambilan sampel yang lebih representatif.

Kelemahan:

  • Bias tinggi: Hasil penelitian tidak dapat digeneralisasikan ke seluruh populasi karena hanya mewakili kelompok tertentu yang mudah diakses.
  • Tidak representatif: Mahasiswa yang lebih aktif atau lebih mudah dijangkau bisa memiliki kebiasaan tidur berbeda dari mahasiswa lainnya.
  • Tidak dapat digunakan untuk inferensi statistik yang valid: Karena tidak ada jaminan bahwa sampel mencerminkan populasi, analisis statistik berbasis inferensi bisa menyesatkan.

Contoh Bias:

Jika kita mengambil 100 mahasiswa pertama yang kita temui di kampus, kemungkinan besar mereka adalah mahasiswa yang lebih rajin dan lebih aktif secara akademik. Mereka mungkin memiliki kebiasaan tidur lebih teratur dibandingkan mahasiswa lain yang sering belajar hingga larut malam atau yang lebih suka begadang.


4.2 Purposive Sampling

Metode:

Purposive Sampling memilih individu berdasarkan karakteristik tertentu yang dianggap relevan dengan penelitian. Dalam penelitian ini, sampel diambil berdasarkan mahasiswa yang tidur kurang dari 4 jam per malam.

Keunggulan:

  • Fokus pada kelompok spesifik: Berguna jika penelitian ingin mempelajari fenomena tertentu, seperti mahasiswa dengan kebiasaan tidur sangat sedikit.
  • Efektif dalam penelitian eksploratif: Dapat memberikan wawasan mendalam tentang subkelompok dalam populasi.
  • Dapat digunakan jika populasi target sulit dijangkau: Misalnya, jika kita ingin meneliti mahasiswa dengan insomnia atau gangguan tidur.

Kelemahan:

  • Tidak representatif terhadap populasi umum: Hanya mencerminkan karakteristik kelompok tertentu, bukan keseluruhan populasi mahasiswa.
  • Subjektif: Pemilihan sampel bergantung pada peneliti, yang dapat menyebabkan bias seleksi.
  • Tidak dapat digunakan untuk generalisasi: Hasil hanya berlaku untuk kelompok spesifik yang dipilih.

Contoh Bias:

Jika kita hanya memilih mahasiswa yang tidur kurang dari 4 jam per malam, kita mungkin mendapatkan data yang menunjukkan rata-rata waktu tidur mahasiswa lebih rendah dari kenyataan. Ini bisa menyesatkan jika penelitian bertujuan mengetahui rata-rata waktu tidur seluruh mahasiswa, bukan hanya kelompok yang mengalami kurang tidur.


4.3 Snowball Sampling

Metode:

Snowball Sampling dimulai dengan memilih beberapa individu sebagai sampel awal, kemudian mereka membantu merekrut responden lain yang memiliki karakteristik serupa.

Keunggulan:

  • Berguna untuk populasi yang sulit dijangkau: Cocok untuk meneliti kelompok tertentu, seperti mahasiswa yang bekerja sambil kuliah atau mereka yang memiliki pola tidur ekstrem.
  • Efektif dalam penelitian kualitatif: Dapat digunakan untuk memahami pengalaman individu dalam kelompok tertentu.
  • Menghemat waktu dan sumber daya: Responden membantu dalam pencarian sampel tambahan.

Kelemahan:

  • Bias sosial: Responden cenderung merekomendasikan orang dengan karakteristik yang mirip, menyebabkan hasil tidak bervariasi.
  • Kurang representatif: Sampel hanya terdiri dari jaringan sosial tertentu, bukan seluruh populasi.
  • Sulit dikendalikan: Peneliti kehilangan kendali atas bagaimana sampel berkembang karena bergantung pada rekomendasi responden.

Contoh Bias:

Jika kita mulai dengan seorang mahasiswa yang sering begadang, kemungkinan besar dia akan merekomendasikan teman-temannya yang juga memiliki kebiasaan tidur yang sama. Ini akan menciptakan kesimpulan yang bias bahwa sebagian besar mahasiswa tidur sangat larut malam, padahal populasi mahasiswa secara keseluruhan mungkin memiliki pola tidur yang lebih bervariasi.


4.4 Quota Sampling

Metode:

Quota Sampling membagi populasi ke dalam kategori tertentu (misalnya berdasarkan fakultas), kemudian memilih sampel dari masing-masing kategori hingga kuota terpenuhi.

Keunggulan:

  • Lebih representatif dibandingkan metode non-acak lainnya: Memastikan bahwa setiap kelompok memiliki perwakilan dalam sampel.
  • Lebih cepat daripada stratified sampling: Tidak memerlukan pemilihan acak dalam setiap kelompok.
  • Dapat digunakan ketika data populasi terbatas: Jika tidak memungkinkan untuk menggunakan Probability Sampling, metode ini bisa menjadi alternatif.

Kelemahan:

  • Tidak sepenuhnya acak: Pemilihan individu dalam setiap kuota bisa subjektif, menyebabkan bias seleksi.
  • Rentan terhadap undercoverage bias: Jika beberapa kelompok lebih sulit dijangkau, mereka bisa kurang terwakili dalam sampel.
  • Kurang akurat dibandingkan Stratified Sampling: Karena tidak menggunakan pemilihan acak di dalam setiap kategori.

Contoh Bias:

Jika kuota ditetapkan untuk setiap fakultas, tetapi kita memilih mahasiswa dalam kuota tersebut berdasarkan kemudahan akses, kita mungkin mendapatkan perwakilan yang kurang akurat. Misalnya, jika sebagian besar mahasiswa yang diwawancarai berasal dari kelas pagi, hasilnya bisa mencerminkan pola tidur yang lebih sehat dibandingkan populasi secara keseluruhan.


5. Perbandingan Hasil dari Berbagai Metode Sampling

Dalam penelitian ini, digunakan berbagai metode sampling, baik Probability Sampling maupun Non-Probability Sampling. Masing-masing metode memiliki karakteristik, keunggulan, kelemahan, serta tingkat bias dan margin of error yang berbeda. Untuk memahami efektivitas masing-masing metode, dilakukan analisis mendalam berdasarkan margin of error, bias, dan tingkat representativitas terhadap populasi.

5.1 Perbandingan Probability Sampling vs Non-Probability Sampling

Sampel yang diambil menggunakan Probability Sampling memiliki peluang lebih tinggi untuk menghasilkan data yang representatif dibandingkan dengan Non-Probability Sampling. Hal ini karena Probability Sampling memungkinkan setiap individu dalam populasi memiliki peluang yang sama untuk dipilih, sedangkan Non-Probability Sampling cenderung bergantung pada faktor kemudahan dan subjektivitas dalam pemilihan sampel.

Aspek Probability Sampling Non-Probability Sampling
Definisi Metode sampling yang memastikan setiap elemen dalam populasi memiliki peluang yang sama untuk dipilih. Metode sampling yang tidak memberikan setiap elemen peluang yang sama untuk dipilih.
Contoh Metode Simple Random, Stratified, Systematic, Cluster Convenience, Purposive, Snowball, Quota
Keacakan Pemilihan sampel dilakukan secara acak Pemilihan sampel sering berdasarkan aksesibilitas atau karakteristik tertentu
Margin of Error (MoE) Dapat dihitung dengan presisi dan cenderung lebih kecil Sulit dihitung karena tidak ada aturan pengambilan sampel yang sistematis
Bias Relatif rendah Tinggi, karena pemilihan tidak dilakukan secara acak
Kemudahan Pelaksanaan Memerlukan perencanaan lebih matang dan sumber daya lebih besar Lebih mudah, cepat, dan murah dilakukan
Representasi Populasi Hasil lebih representatif dan dapat digeneralisasi Kurang representatif karena tidak semua individu memiliki kesempatan yang sama untuk dipilih

Dari tabel ini, dapat disimpulkan bahwa Probability Sampling lebih unggul dalam hal akurasi dan representativitas. Namun, Non-Probability Sampling lebih mudah dan cepat digunakan, terutama dalam kondisi di mana sumber daya terbatas.

5.2 Perbandingan Hasil dari Berbagai Metode Probability Sampling

Untuk mengetahui metode Probability Sampling mana yang paling akurat, dilakukan perhitungan margin of error (MoE) untuk setiap metode.

Metode Sampling Cara Kerja Margin of Error (MoE) Keunggulan Kelemahan
Simple Random Sampling (SRS) Memilih sampel secara acak dari seluruh populasi 0.369 jam Tidak ada bias dalam pemilihan Tidak mempertimbangkan perbedaan kelompok dalam populasi
Stratified Sampling Populasi dibagi dalam kelompok, lalu diambil sampel secara proporsional 0.345 jam Representasi lebih baik untuk semua kelompok Memerlukan informasi tambahan tentang populasi
Systematic Sampling Memilih sampel berdasarkan pola sistematis (misal setiap mahasiswa ke-3) 0.349 jam Distribusi sampel lebih merata Bisa bias jika ada pola dalam data populasi
Cluster Sampling Memilih beberapa kelompok (misal fakultas), lalu mengambil semua anggota dalam kelompok tersebut 0.374 jam Lebih efisien jika populasi luas dan tersebar Bisa menyebabkan bias jika kelompok yang dipilih tidak mewakili populasi secara keseluruhan

Analisis

  1. Stratified Sampling memiliki margin of error terkecil (0.345 jam), sehingga menjadi metode yang paling akurat.
  2. Cluster Sampling memiliki margin of error terbesar (0.374 jam), yang menunjukkan metode ini lebih rentan terhadap bias jika kelompok yang dipilih tidak representatif.
  3. Systematic Sampling memiliki margin of error yang sedikit lebih besar dibandingkan Stratified Sampling, tetapi tetap lebih kecil dibandingkan Simple Random dan Cluster Sampling.

5.3 Perbandingan Hasil dari Berbagai Metode Non-Probability Sampling

Non-Probability Sampling lebih banyak digunakan dalam penelitian eksploratif atau ketika probability sampling tidak dapat diterapkan karena keterbatasan waktu, biaya, atau akses ke populasi target. Namun, metode ini cenderung memiliki tingkat bias yang lebih tinggi.

Metode Sampling Cara Kerja Bias Keunggulan Kelemahan
Convenience Sampling Memilih sampel yang paling mudah diakses Tinggi Cepat dan mudah dilakukan Tidak representatif, hanya mewakili kelompok tertentu
Purposive Sampling Memilih sampel berdasarkan karakteristik tertentu Tinggi Bisa fokus pada kelompok spesifik Tidak bisa digeneralisasi ke populasi luas
Snowball Sampling Responden pertama merekrut responden lain Sangat Tinggi Berguna untuk populasi yang sulit ditemukan Bias tinggi karena responden saling merekomendasikan teman dengan karakteristik yang sama
Quota Sampling Memilih sampel hingga kuota tertentu terpenuhi Tinggi Memastikan representasi proporsional Tidak acak, bisa menyebabkan bias dalam seleksi

Analisis

  1. Snowball Sampling memiliki tingkat bias tertinggi karena responden cenderung merekrut individu yang memiliki karakteristik serupa dengan mereka.
  2. Convenience Sampling juga sangat bias karena hanya mengandalkan individu yang mudah diakses, sehingga tidak mencerminkan populasi secara keseluruhan.
  3. Quota Sampling memiliki bias yang lebih rendah dibandingkan Convenience dan Snowball Sampling, tetapi tetap tidak seakurat Probability Sampling.

5.4 Kesimpulan dari Perbandingan Metode Sampling

Berdasarkan hasil perbandingan di atas, dapat disimpulkan bahwa:

  1. Probability Sampling lebih akurat dibandingkan Non-Probability Sampling karena memiliki margin of error yang lebih kecil dan bias yang lebih rendah.
  2. Stratified Sampling adalah metode terbaik dalam Probability Sampling, karena mempertimbangkan karakteristik populasi dan memiliki margin of error terkecil (0.345 jam).
  3. Cluster Sampling memiliki margin of error terbesar (0.374 jam) dalam Probability Sampling, yang menunjukkan kurang akurat jika hanya satu kelompok yang dipilih.
  4. Non-Probability Sampling memiliki bias yang tinggi, terutama pada Snowball dan Convenience Sampling, yang paling rentan terhadap bias.
  5. Jika memungkinkan, penelitian sebaiknya menggunakan Probability Sampling agar hasilnya lebih akurat dan dapat digeneralisasi ke populasi yang lebih luas.
  6. Jika Probability Sampling tidak bisa diterapkan, maka Quota Sampling adalah pilihan terbaik dalam Non-Probability Sampling, karena memberikan tingkat representasi yang lebih baik dibandingkan metode lain dalam kategori yang sama.

Dari hasil perbandingan ini, Stratified Sampling adalah metode yang paling direkomendasikan untuk penelitian ini karena memberikan keseimbangan terbaik antara akurasi, margin of error yang rendah, dan representativitas populasi.


6. Ukuran Sampel yang Diperlukan untuk MoE = 5%

Kita ingin tahu berapa banyak mahasiswa yang harus kita survei supaya hasil penelitian tentang waktu tidur mereka tidak meleset lebih dari 5%.

Dari data yang kita punya:
- Total mahasiswa: 300 orang
- Rata-rata waktu tidur: 4.51 jam
- Simpangan baku (seberapa bervariasi waktu tidur mereka): 1.84 jam
- Batas kesalahan maksimal (Margin of Error / MoE): 0.23 jam (karena 5% dari 4.51 jam)

6.1 Langkah Perhitungan

6.1.1. Kita pakai rumus untuk menghitung jumlah sampel supaya MoE tidak lebih dari 0.23 jam:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

  • Z = 1.96 (angka standar untuk penelitian dengan kepercayaan 95%)
  • \(\sigma\) = 1.84 (simpangan baku)
  • \(\sqrt{n}\) adalah akar dari jumlah sampel yang kita cari

6.1.2. Setelah dihitung, hasilnya menunjukkan bahwa kita butuh minimal 246 mahasiswa dalam survei ini supaya hasilnya cukup akurat dan tidak meleset lebih dari 5%.

6.2 Kenapa Harus 246?

  • Kalau kita ambil kurang dari 246 orang, hasilnya bisa lebih meleset dan kurang akurat.
  • Kalau kita ambil lebih dari 246 orang, hasilnya makin akurat, tapi lebih lama dan lebih mahal untuk dilakukan.

Jadi,agar hasil penelitian ini cukup akurat dan tidak meleset lebih dari 5%, kita harus survei minimal 246 mahasiswa.


7. Kesimpulan dan Rekomendasi

Dalam laporan praktikum ini, kami telah melakukan analisis mendalam mengenai metode sampling dan margin of error (MoE) dalam penelitian statistik, khususnya dalam konteks waktu tidur mahasiswa di sebuah universitas dengan populasi 300 mahasiswa. Berikut adalah kesimpulan dan rekomendasi berdasarkan hasil analisis yang telah dilakukan:

7.1 Kesimpulan

  1. Latar Belakang dan Tujuan: Penelitian ini dilatarbelakangi oleh keterbatasan dalam mengumpulkan data dari seluruh populasi, sehingga metode sampling menjadi penting untuk mendapatkan data yang representatif. Tujuan praktikum ini adalah untuk mempelajari berbagai metode pengambilan sampel, menghitung MoE, menganalisis bias, dan menentukan ukuran sampel yang diperlukan.

  2. Metode Sampling: Kami telah mengeksplorasi dua kategori utama metode sampling:

    • Probability Sampling (Simple Random, Stratified, Systematic, Cluster) yang memberikan peluang yang sama bagi setiap individu untuk terpilih, dan
    • Non-Probability Sampling (Convenience, Purposive, Snowball, Quota) yang tidak memberikan peluang yang sama, sehingga berpotensi menghasilkan bias.
  3. Margin of Error (MoE): Perhitungan MoE menunjukkan bahwa metode Stratified Sampling memiliki MoE terkecil (0.345 jam), menjadikannya metode yang paling akurat dalam menggambarkan populasi. Sebaliknya, Cluster Sampling memiliki MoE terbesar (0.374 jam), menunjukkan potensi bias yang lebih tinggi.

  4. Analisis Bias: Non-Probability Sampling cenderung memiliki bias yang lebih tinggi dibandingkan Probability Sampling. Metode seperti Convenience Sampling dan Snowball Sampling sangat rentan terhadap bias, yang dapat mengakibatkan hasil yang tidak representatif.

  5. Ukuran Sampel untuk MoE ≤ 5%: Untuk mencapai MoE tidak lebih dari 5%, diperlukan minimal 246 mahasiswa dalam survei ini. Ini menunjukkan pentingnya ukuran sampel yang memadai untuk memastikan akurasi hasil penelitian.

7.2 Rekomendasi

  1. Penggunaan Probability Sampling: Disarankan untuk menggunakan metode Probability Sampling, khususnya Stratified Sampling, dalam penelitian yang memerlukan representativitas tinggi. Metode ini mampu memberikan estimasi yang lebih akurat dengan MoE yang lebih kecil.

  2. Hindari Non-Probability Sampling: Jika memungkinkan, hindari penggunaan Non-Probability Sampling, terutama dalam penelitian yang memerlukan generalisasi hasil. Jika harus digunakan, pilihlah metode seperti Quota Sampling yang lebih baik dalam hal representativitas dibandingkan metode non-acak lainnya.

  3. Perencanaan Ukuran Sampel: Dalam perencanaan penelitian, penting untuk menghitung ukuran sampel yang diperlukan untuk mencapai MoE yang diinginkan. Pastikan untuk mempertimbangkan variabilitas dalam populasi saat menentukan ukuran sampel.

  4. Evaluasi dan Validasi: Lakukan evaluasi dan validasi terhadap hasil penelitian untuk memastikan bahwa data yang diperoleh dapat digeneralisasi ke populasi yang lebih luas. Ini dapat dilakukan dengan membandingkan hasil dari berbagai metode sampling.

Dengan mengikuti rekomendasi ini, diharapkan penelitian di masa mendatang dapat menghasilkan data yang lebih akurat dan representatif, serta memberikan wawasan yang lebih baik mengenai fenomena yang diteliti.

8.Referensi

  1. Siregar, B. (n.d.). Margin of Error. dari https://bookdown.org/dsciencelabs/sampling_and_survey_techniques/docs/04-Margin-of-Error.html#real-world-examples

  2. Accurate.ID. (n.d.). Margin of Error: Pengertian, Fungsi, dan Cara Menghitungnya. dari https://accurate.id/marketing-manajemen/margin-of-error/

  3. SurveyMonkey. (n.d.). Margin of Error Calculator. dari https://www.surveymonkey.com/mp/margin-of-error-calculator/

  4. Lembaga Penelitian dan Pengabdian kepada Masyarakat (LP2M) UMA. (2022, January 27). Apa Itu Margin Error? Pengertian, Perhitungan, dengan Contoh. dari https://lp2m.uma.ac.id/2022/01/27/apa-itu-margin-error-pengertian-perhitungan-dengan-contoh/

LS0tCnRpdGxlOiAiVHVnYXMgSW5kaXZpZHUgIgpzdWJ0aXRsZTogIkxBUE9SQU4gUFJBS1RJS1VNOiBBTkFMSVNJUyBTQU1QTElORyBEQU4gTUFSR0lOIE9GIEVSUk9SCiAtIFRla25payBTYW1wbGluZyBhbmQgU3VydmV5IgphdXRob3I6ICJPbGl2aWEgTWVpbGluZGEgRGF2dGluIFBlc2lyZXJvbiIKZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIgpvdXRwdXQ6CiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAgdGh1bWJuYWlsczogdHJ1ZQogICAgbGlnaHRib3g6IHRydWUKICAgIGdhbGxlcnk6IHRydWUKICAgIGxpYl9kaXI6IGxpYnMKICAgIGRmX3ByaW50OiAicGFnZWQiCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IgogICAgY29kZV9kb3dubG9hZDogeWVzIAogICAgY3NzOiAic3R5bGUuY3NzIgotLS0KCjxpbWcgc3JjPSJJTUctMjAyNTAyMTItV0EwMDA2LmpwZyIgd2lkdGg9IjMwMCIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IiBhbHQ9IkZvdG8gRGlyaSI+Ci0tLQoKCiMgMS4gUGVuZGFodWx1YW4KCiMjIDEuMSBMYXRhciBCZWxha2FuZwoKRGFsYW0gcGVuZWxpdGlhbiBzdGF0aXN0aWssIHNlcmluZyBrYWxpIHRpZGFrIG1lbXVuZ2tpbmthbiB1bnR1ayBtZW5ndW1wdWxrYW4gZGF0YSBkYXJpIHNlbHVydWggcG9wdWxhc2kga2FyZW5hIGtldGVyYmF0YXNhbiB3YWt0dSwgYmlheWEsIGRhbiBzdW1iZXIgZGF5YS4gT2xlaCBrYXJlbmEgaXR1LCBtZXRvZGUgc2FtcGxpbmcgZGlndW5ha2FuIHVudHVrIG1lbmdhbWJpbCBzZWJhZ2lhbiBkYXRhIHlhbmcgZGFwYXQgbWV3YWtpbGkgcG9wdWxhc2kgc2VjYXJhIGtlc2VsdXJ1aGFuLgoKTmFtdW4sIGhhc2lsIGRhcmkgc2FtcGVsIHRpZGFrIHNlbGFsdSBtZW5jZXJtaW5rYW4gcG9wdWxhc2kgc2VjYXJhIGFrdXJhdCBrYXJlbmEgYWRhbnlhIE1hcmdpbiBvZiBFcnJvciAoTW9FKS4gTW9FIGFkYWxhaCB1a3VyYW4gc3RhdGlzdGlrIHlhbmcgbWVudW5qdWtrYW4gc2VqYXVoIG1hbmEgZXN0aW1hc2kgZGFyaSBzYW1wZWwgZGFwYXQgbWVueWltcGFuZyBkYXJpIG5pbGFpIHNlYmVuYXJueWEgZGkgcG9wdWxhc2kuIFNlbWFraW4ga2VjaWwgTW9FLCBzZW1ha2luIGFrdXJhdCBoYXNpbCBlc3RpbWFzaSB0ZXJoYWRhcCBwb3B1bGFzaS4KCkRhbGFtIHBlbmVsaXRpYW4gaW5pLCBha2FuIG1lbmdhbmFsaXNpcyByYXRhLXJhdGEgd2FrdHUgdGlkdXIgbWFoYXNpc3dhIGRpIHNlYnVhaCB1bml2ZXJzaXRhcyBkZW5nYW4gcG9wdWxhc2kgMzAwIG1haGFzaXN3YSBkYW4gbWVuZ2V2YWx1YXNpIGJhZ2FpbWFuYSBtZXRvZGUgc2FtcGxpbmcgc2VydGEgdWt1cmFuIHNhbXBlbCBtZW1wZW5nYXJ1aGkgTWFyZ2luIG9mIEVycm9yLgoKIyMgMS4yIFR1anVhbiBQcmFrdGlrdW0gCgojIyMgMS4yLjEgTWVtcGVsYWphcmkgYmVyYmFnYWkgbWV0b2RlIHBlbmdhbWJpbGFuIHNhbXBlbAoKTWVuamVsYWphaGkgUHJvYmFiaWxpdHkgU2FtcGxpbmcgKFNpbXBsZSBSYW5kb20sIFN0cmF0aWZpZWQsIFN5c3RlbWF0aWMsIENsdXN0ZXIpIGRhbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgKENvbnZlbmllbmNlLCBQdXJwb3NpdmUsIFNub3diYWxsLCBRdW90YSkgdW50dWsgbWVtYWhhbWkgY2FyYSBrZXJqYSBkYW4ga2FwYW4gZGlndW5ha2FuLgoKIyMjIDEuMi4yIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNb0UpIHBhZGEgUHJvYmFiaWxpdHkgU2FtcGxpbmcKCk1lbmdoaXR1bmcgTW9FIHVudHVrIG1lbmlsYWkgc2ViZXJhcGEgYWt1cmF0IHNhbXBlbCBkYWxhbSBtZXdha2lsaSBwb3B1bGFzaS4KCiMjIyAxLjIuMyBNZW5nYW5hbGlzaXMgYmlhcyBwYWRhIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZwoKTWVuZWxpdGkgcG90ZW5zaSBiaWFzIGRhbGFtIG1ldG9kZSBub24tcHJvYmFiaWxpdHkga2FyZW5hIHRpZGFrIHNlbXVhIGluZGl2aWR1IG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIHRlcnBpbGloLCB5YW5nIGRhcGF0IG1lbnllYmFia2FuIGhhc2lsIGt1cmFuZyByZXByZXNlbnRhdGlmLgoKIyMjIDEuMi40IE1lbWJhbmRpbmdrYW4gaGFzaWwgZGFyaSBiZXJiYWdhaSBtZXRvZGUgc2FtcGxpbmcKCk1lbmdhbmFsaXNpcyBwZXJiZWRhYW4gaGFzaWwgcmF0YS1yYXRhLCBNb0UsIGRhbiBiaWFzIGRhcmkgbWV0b2RlIHNhbXBsaW5nIHVudHVrIG1lbmVudHVrYW4geWFuZyBwYWxpbmcgYWt1cmF0IGRhbiByZXByZXNlbnRhdGlmLgoKIyMjIDEuMi41IE1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbCB1bnR1ayBNb0Ug4omkIDUlCgpNZW5nYW5hbGlzaXMgc2ViZXJhcGEgYmVzYXIgcGVuZ2FydWggdWt1cmFuIHNhbXBlbCB0ZXJoYWRhcCBrZWFrdXJhdGFuIGhhc2lsIHBlbmVsaXRpYW4uCgoKUGFkYSBpbnRpbnlhIHByYWt0aWt1bSBpbmkgYmVydHVqdWFuIG1lbWFoYW1pIG1ldG9kZSBzYW1wbGluZywgbWVuZ2hpdHVuZyBNb0UsIGRhbiBtZW5lbnR1a2FuIG1ldG9kZSB0ZXJiYWlrIHVudHVrIG1lbmRhcGF0a2FuIGhhc2lsIHlhbmcgcGFsaW5nIHJlcHJlc2VudGF0aWYuCgotLS0KCiMgMi4gTWV0b2RlIFNhbXBsaW5nIHlhbmcgRGlndW5ha2FuCgpEYXRhLXNldCB5YW5nIGRpc2FqaWthbjoKCmBgYHtyIGVjaG89RkFMU0UsIG1hc3NlZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmRhdGFfdGlkdXIgPC0gcmVhZC5jc3YoImRhdGFfdGlkdXJfbWFoYXNpc3dhX21peGVkICgxKS5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCgojIENlayBkYXRhCmxpYnJhcnkoa25pdHIpCmthYmxlKGhlYWQoZGF0YV90aWR1cikpCmBgYAoKUGFkYSBiYWdpYW4gaW5pLCBraXRhIGFrYW4gbWVsYWt1a2FuIHBlbmdhbWJpbGFuIHNhbXBlbCBkYXJpIGRhdGEgcG9wdWxhc2kgeWFuZyBiZXJpc2kgMzAwIG1haGFzaXN3YSBtZW5nZ3VuYWthbiBiZXJiYWdhaSBtZXRvZGUgUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFuIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZywgeWFpdHU6CgphLiBQcm9iYWJpbGl0eSBTYW1wbGluZyAoU2V0aWFwIGluZGl2aWR1IG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIGRpcGlsaWgpCgoKYi4gTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nIChQZW1pbGloYW4gc2FtcGVsIHRpZGFrIGFjYWsgZGFuIGJpc2EgbWVtaWxpa2kgYmlhcykKClBlbmdhbWJpbGFuIHNhbXBlbCBkaWxha3VrYW4oZGliYW50dSkgZGVuZ2FuIG1lbmdndW5ha2FuIGJhaGFzYSBwZW1yb2dyYW1hbiBSLCB5YW5nIG1lbXVuZ2tpbmthbiBraXRhIHVudHVrIG1lbGFrdWthbiBzZWxla3NpIGRhdGEgc2VjYXJhIHNpc3RlbWF0aXMgZGFuIGFjYWsuCgojIyAyLjEgUHJvYmFiaWxpdHkgU2FtcGxpbmcgKFNhbXBsaW5nIEFjYWspCgojIyMgMi4xLjEuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykKClNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykgYWRhbGFoIG1ldG9kZSBkaSBtYW5hIHNldGlhcCBpbmRpdmlkdSBkYWxhbSBwb3B1bGFzaSBtZW1pbGlraSBwZWx1YW5nIHlhbmcgc2FtYSB1bnR1ayBkaXBpbGloIHRhbnBhIG1lbXBlcmhhdGlrYW4ga2FyYWt0ZXJpc3RpayB0ZXJ0ZW50dS4KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CgpsaWJyYXJ5KGRwbHlyKQoKZGF0YSA8LSByZWFkLmNzdigiZGF0YV90aWR1cl9tYWhhc2lzd2FfbWl4ZWQgKDEpLmNzdiIpCgpzZXQuc2VlZCgxMjMpCnNyc19zYW1wbGUgPC0gZGF0YSAlPiUgc2FtcGxlX24oMTAwKQoKa2FibGUoaGVhZChzcnNfc2FtcGxlKSkKYGBgCgpNZXRvZGU6IFNlbXVhIG1haGFzaXN3YSBtZW1pbGlraSBrZXNlbXBhdGFuIHlhbmcgc2FtYSB1bnR1ayBkaXBpbGloLgoKS2V1bmdndWxhbjogVGlkYWsgYWRhIGJpYXMgZGFsYW0gcGVtaWxpaGFuLgoKS2VsZW1haGFuOiBUaWRhayBtZW1wZXJ0aW1iYW5na2FuIGtlbG9tcG9rIGRhbGFtIHBvcHVsYXNpLgoKCgojIyMgMi4xLjIuIFN0cmF0aWZpZWQgUmFuZG9tIFNhbXBsaW5nCgpTdHJhdGlmaWVkIFNhbXBsaW5nIG1lbWJhZ2kgcG9wdWxhc2kgbWVuamFkaSBiZWJlcmFwYSBrZWxvbXBvayBiZXJkYXNhcmthbiBrYXJha3RlcmlzdGlrIHRlcnRlbnR1IChtaXNhbG55YSBmYWt1bHRhcykgc2ViZWx1bSBwZW5nYW1iaWxhbiBzYW1wZWwgZGlsYWt1a2FuLgoKCmBgYHtyIGVjaG89RkFMU0UsIG1hc3NlZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkoZHBseXIpCgpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhX3RpZHVyX21haGFzaXN3YV9taXhlZCAoMSkuY3N2IikKCnNldC5zZWVkKDEyMykKc3RyYXRpZmllZF9zYW1wbGUgPC0gZGF0YSAlPiUKICBncm91cF9ieShGYWt1bHRhcykgJT4lCiAgc2FtcGxlX24oMTAwIC8gbGVuZ3RoKHVuaXF1ZShkYXRhJEZha3VsdGFzKSksIHJlcGxhY2UgPSBGQUxTRSkKCmthYmxlKGhlYWQoc3RyYXRpZmllZF9zYW1wbGUpKQpgYGAKCk1ldG9kZTogUG9wdWxhc2kgZGliYWdpIGJlcmRhc2Fya2FuIEZha3VsdGFzLCBsYWx1IGRpcGlsaWggcHJvcG9yc2kgeWFuZyBzYW1hIGRhcmkgc2V0aWFwIGZha3VsdGFzLgoKS2V1bmdndWxhbjogUmVwcmVzZW50YXNpIGxlYmloIGJhaWsgdW50dWsgc2VtdWEga2Vsb21wb2suCgpLZWxlbWFoYW46IEJ1dHVoIGluZm9ybWFzaSB0YW1iYWhhbiB0ZW50YW5nIGtlbG9tcG9rIGRhbGFtIHBvcHVsYXNpLgoKCiMjIyAyLjEuMy4gU3lzdGVtYXRpYyBTYW1wbGluZwoKU3lzdGVtYXRpYyBTYW1wbGluZyBtZW1pbGloIHNhbXBlbCBkZW5nYW4gcG9sYSBzaXN0ZW1hdGlzLCBtaXNhbG55YSBzZXRpYXAgbWFoYXNpc3dhIGtlLTMgZGFsYW0gZGFmdGFyLgoKYGBge3IgZWNobz1GQUxTRSwgbWFzc2VnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBMb2FkIGxpYnJhcnkKbGlicmFyeShkcGx5cikKCiMgTWVtYmFjYSBkYXRhc2V0CmRhdGEgPC0gcmVhZC5jc3YoImRhdGFfdGlkdXJfbWFoYXNpc3dhX21peGVkICgxKS5jc3YiKQoKIyBNZW5nYW1iaWwgc2FtcGVsIHNlY2FyYSBTaXN0ZW1hdGlzCnNldC5zZWVkKDEyMykKTiA8LSBucm93KGRhdGEpCm4gPC0gMTAwCmsgPC0gZmxvb3IoTiAvIG4pCnN5c3RlbWF0aWNfc2FtcGxlIDwtIGRhdGFbc2VxKDEsIE4sIGJ5ID0gayksIF0KCiMgTWVuYW1waWxrYW4gaGFzaWwKa2FibGUoaGVhZChzeXN0ZW1hdGljX3NhbXBsZSkpCmBgYAoKCk1ldG9kZTogTWVtaWxpaCBzZXRpYXAgbWFoYXNpc3dhIGtlLTMgZGFsYW0gZGFmdGFyLgoKS2V1bmdndWxhbjogRGlzdHJpYnVzaSBzYW1wZWwgbGViaWggbWVyYXRhLgoKS2VsZW1haGFuOiBCaXNhIGJpYXMgamlrYSBhZGEgcG9sYSBkYWxhbSBkYXRhLgoKCgojIyMgMi4xLjQuIENsdXN0ZXIgU2FtcGxpbmcKCkNsdXN0ZXIgU2FtcGxpbmcgbWVtYmFnaSBwb3B1bGFzaSBtZW5qYWRpIGtlbG9tcG9rLWtlbG9tcG9rIGtlY2lsIChjbHVzdGVyKSwgbGFsdSBiZWJlcmFwYSBjbHVzdGVyIGRpcGlsaWggdW50dWsgZGlqYWRpa2FuIHNhbXBlbC4KCgpgYGB7ciBlY2hvPUZBTFNFLCBtYXNzZWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIExvYWQgbGlicmFyeQpsaWJyYXJ5KGRwbHlyKQoKIyBNZW1iYWNhIGRhdGFzZXQKZGF0YSA8LSByZWFkLmNzdigiZGF0YV90aWR1cl9tYWhhc2lzd2FfbWl4ZWQgKDEpLmNzdiIpCgojIE1lbmdhbWJpbCBzYW1wZWwgc2VjYXJhIFN0cmF0aWZpZWQgYmVyZGFzYXJrYW4gRmFrdWx0YXMKc2V0LnNlZWQoMTIzKQpzdHJhdGlmaWVkX3NhbXBsZSA8LSBkYXRhICU+JQogIGdyb3VwX2J5KEZha3VsdGFzKSAlPiUKICBzYW1wbGVfbigxMDAgLyBsZW5ndGgodW5pcXVlKGRhdGEkRmFrdWx0YXMpKSwgcmVwbGFjZSA9IEZBTFNFKQoKIyBNZW5hbXBpbGthbiBoYXNpbAprYWJsZShoZWFkKHN0cmF0aWZpZWRfc2FtcGxlKSkKYGBgCgpNZXRvZGU6IE1lbWlsaWgganVtbGFoIG1haGFzaXN3YSB5YW5nIHNhbWEgZGFyaSBzZXRpYXAgZmFrdWx0YXMsIGhpbmdnYSB0b3RhbG55YSAxMDAgbWFoYXNpc3dhLgoKS2V1bmdndWxhbjogUmVwcmVzZW50YXNpIHlhbmcgc2VpbWJhbmcgYW50YXIga2Vsb21wb2suCgpLZWxlbWFoYW46IFRpZGFrIGFjYWssIGRhcGF0IG1lbnllYmFia2FuIGJpYXMgZGFsYW0gcGVtaWxpaGFuLgoKCgojIyAyLjIgTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nIChTYW1wbGluZyBUaWRhayBBY2FrKQoKIyMjIDIuMi4xLiBDb252ZW5pZW5jZSBTYW1wbGluZwoKQ29udmVuaWVuY2UgU2FtcGxpbmcgbWVtaWxpaCBzYW1wZWwgYmVyZGFzYXJrYW4ga2VtdWRhaGFuIGFrc2VzLCBtaXNhbG55YSBtYWhhc2lzd2EgeWFuZyB0ZXJzZWRpYSBsZWJpaCBkdWx1LgoKYGBge3IgZWNobz1GQUxTRSwgbWFzc2VnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBMb2FkIGxpYnJhcnkKbGlicmFyeShkcGx5cikKCiMgTWVtYmFjYSBkYXRhc2V0CmRhdGEgPC0gcmVhZC5jc3YoImRhdGFfdGlkdXJfbWFoYXNpc3dhX21peGVkICgxKS5jc3YiKQoKIyBNZW5nYW1iaWwgMTAwIG1haGFzaXN3YSBwZXJ0YW1hCmNvbnZlbmllbmNlX3NhbXBsZSA8LSBoZWFkKGRhdGEsIDEwMCkKCiMgTWVuYW1waWxrYW4gaGFzaWwKa2FibGUgKGhlYWQoY29udmVuaWVuY2Vfc2FtcGxlKSkKYGBgCgoKTWV0b2RlOiBNZW5nYW1iaWwgMTAwIG1haGFzaXN3YSBwZXJ0YW1hIGRhbGFtIGRhdGFzZXQuCgpLZXVuZ2d1bGFuOiBDZXBhdCBkYW4gbXVkYWggZGlsYWt1a2FuLgoKS2VsZW1haGFuOiBSZW50YW4gdGVyaGFkYXAgYmlhcywgdGlkYWsgcmVwcmVzZW50YXRpZi4KCiMjIyAyLjIuMi4gUHVycG9zaXZlIFNhbXBsaW5nCgpQdXJwb3NpdmUgU2FtcGxpbmcgbWVtaWxpaCBzYW1wZWwgYmVyZGFzYXJrYW4ga3JpdGVyaWEga2h1c3VzLCBtaXNhbG55YSBtYWhhc2lzd2EgZGVuZ2FuIHdha3R1IHRpZHVyIGt1cmFuZyBkYXJpIDQgamFtLgoKYGBge3IgZWNobz1GQUxTRSwgbWFzc2VnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBNZW1iYWNhIGRhdGFzZXQKZGF0YSA8LSByZWFkLmNzdigiZGF0YV90aWR1cl9tYWhhc2lzd2FfbWl4ZWQgKDEpLmNzdiIpCgoKIyBGaWx0ZXIgbWFoYXNpc3dhIGRlbmdhbiBqYW0gdGlkdXIgPj0gNApwdXJwb3NpdmVfc2FtcGxlIDwtIGRhdGEgJT4lCiAgZmlsdGVyKFdha3R1LlRpZHVyLi5KYW0uIDwgNCkKCiMgTWVuYW1waWxrYW4gaGFzaWwKa2FibGUoaGVhZChwdXJwb3NpdmVfc2FtcGxlKSkKYGBgCgpNZXRvZGU6IE1lbWlsaWggMTAwIG1haGFzaXN3YSBkZW5nYW4gd2FrdHUgdGlkdXIga3VyYW5nIGRhcmkgNCBqYW0uCgpLZXVuZ2d1bGFuOiBGb2t1cyBwYWRhIGtlbG9tcG9rIHRlcnRlbnR1IHlhbmcgbWVuYXJpayB1bnR1ayBwZW5lbGl0aWFuLgoKS2VsZW1haGFuOiBUaWRhayBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uCgojIyMgMi4yLjMuIFNub3diYWxsIFNhbXBsaW5nCgpTbm93YmFsbCBTYW1wbGluZyBkaWd1bmFrYW4ga2V0aWthIHBvcHVsYXNpIHN1bGl0IGRpamFuZ2thdS4gU2FtcGVsIHBlcnRhbWEgZGlwaWxpaCwgbGFsdSBtZXJla2EgbWVtYmFudHUgbWVyZWtydXQgc2FtcGVsIGJlcmlrdXRueWEuCgpgYGB7ciBlY2hvPUZBTFNFLCBtYXNzZWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIExvYWQgbGlicmFyeQpsaWJyYXJ5KGRwbHlyKQoKIyBNZW1iYWNhIGRhdGFzZXQKZGF0YSA8LSByZWFkLmNzdigiZGF0YV90aWR1cl9tYWhhc2lzd2FfbWl4ZWQgKDEpLmNzdiIpCgojIE1lbmdhbWJpbCAxMDAgbWFoYXNpc3dhIHBlcnRhbWEKY29udmVuaWVuY2Vfc2FtcGxlIDwtIGhlYWQoZGF0YSwgMTAwKQoKIyBNZW5hbXBpbGthbiBoYXNpbAprYWJsZShoZWFkKGNvbnZlbmllbmNlX3NhbXBsZSkpCmBgYAoKTWV0b2RlOiBNZW1pbGloIDEgbWFoYXNpc3dhIHNlY2FyYSBhY2FrLCBsYWx1IG1lbmNhcmkgbWFoYXNpc3dhIGxhaW4gZGVuZ2FuIHdha3R1IHRpZHVyIHlhbmcgc2FtYSBoaW5nZ2EganVtbGFoIHNhbXBlbCBtZW5jYXBhaSAxMDAuCgpLZXVuZ2d1bGFuOiBCZXJndW5hIGppa2Egc3VsaXQgbWVuZW11a2FuIHBvcHVsYXNpIHRhcmdldC4KCktlbGVtYWhhbjogQmlhcyB0aW5nZ2ksIHRpZGFrIGRhcGF0IGRpZ2VuZXJhbGlzYXNpLgoKIyMjIDIuMi40LiBRdW90YSBTYW1wbGluZwoKU2FtcGVsIGRpcGlsaWggaGluZ2dhIGt1b3RhIHRlcnRlbnR1IHRlcnBlbnVoaSBiZXJkYXNhcmthbiBrYXRlZ29yaSB0ZXJ0ZW50dSAobWlzYWxueWEganVtbGFoIG1haGFzaXN3YSBwZXIgZmFrdWx0YXMpLgoKYGBge3IgZWNobz1GQUxTRSwgbWFzc2VnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBMb2FkIGxpYnJhcnkKbGlicmFyeShkcGx5cikKCiMgTWVtYmFjYSBkYXRhc2V0CmRhdGEgPC0gcmVhZC5jc3YoImRhdGFfdGlkdXJfbWFoYXNpc3dhX21peGVkICgxKS5jc3YiKQoKIyBNZW5nYW1iaWwgc2FtcGVsIGJlcmRhc2Fya2FuIGt1b3RhIHBlciBmYWt1bHRhcwpzZXQuc2VlZCgxMjMpCnF1b3RhX3NhbXBsZSA8LSBkYXRhICU+JQogIGdyb3VwX2J5KEZha3VsdGFzKSAlPiUKICBzYW1wbGVfbigxMDAgLyBsZW5ndGgodW5pcXVlKGRhdGEkRmFrdWx0YXMpKSkKCiMgTWVuYW1waWxrYW4gaGFzaWwKa2FibGUoaGVhZChxdW90YV9zYW1wbGUpKQpgYGAKCgpNZXRvZGU6IE1lbWlsaWgganVtbGFoIG1haGFzaXN3YSB5YW5nIHNhbWEgZGFyaSBzZXRpYXAgZmFrdWx0YXMsIGhpbmdnYSB0b3RhbG55YSAxMDAgbWFoYXNpc3dhLgoKS2V1bmdndWxhbjogUmVwcmVzZW50YXNpIHlhbmcgc2VpbWJhbmcgYW50YXIga2Vsb21wb2suCgpLZWxlbWFoYW46IFRpZGFrIGFjYWssIGRhcGF0IG1lbnllYmFia2FuIGJpYXMgZGFsYW0gcGVtaWxpaGFuLgoKCgotLS0KCiMgMy4gUGVyaGl0dW5nYW4gTWFyZ2luIG9mIEVycm9yIChNb0UpIGRhbGFtIFByb2JhYmlsaXR5IFNhbXBsaW5nClNlY2FyYSB1bXVtLCBNb0UgZGloaXR1bmcgZGVuZ2FuIHJ1bXVzOiAgCgpcWwpNb0UgPSBaIFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fQpcXQoKRGltYW5hOiAgCi0gXCggWiA9IDEuOTYgXCkgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKSAgCi0gXCggbiA9IDEwMCBcKSAoanVtbGFoIHNhbXBlbCkgIAotIFwoIFxzaWdtYSBcKSA9IFNpbXBhbmdhbiBiYWt1IHNhbXBlbCAgCgpTaW1wYW5nYW4gYmFrdSAoXChcc2lnbWFcKSkgZGloaXR1bmcgZGVuZ2FuIHJ1bXVzOiAgCgpcWwpcc2lnbWEgPSBcc3FydHtcZnJhY3tcc3VtIChYX2kgLSBcYmFye1h9KV4yfXtuLTF9fQpcXQoKRGltYW5hOiAgCi0gXCggWF9pIFwpID0gV2FrdHUgdGlkdXIgbWFoYXNpc3dhIGtlLWkgIAotIFwoIFxiYXJ7WH0gXCkgPSBSYXRhLXJhdGEgd2FrdHUgdGlkdXIgbWFoYXNpc3dhICAKLSBcKCBuIFwpID0gVWt1cmFuIHNhbXBlbCAgCgojIyAzLjEgU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSAgCkRpa2V0YWh1aTogIAoKYGBge3IgZWNobz1GQUxTRSwgbWFzc2VnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBMb2FkIGRhdGFzZXQKZGF0YSA8LSByZWFkLmNzdigiZGF0YV90aWR1cl9tYWhhc2lzd2FfbWl4ZWQgKDEpLmNzdiIpCiMgTWVuZW50dWthbiBqdW1sYWggc2FtcGVsCm4gPC0gMTAwCgojIE1lbmdhbWJpbCBzYW1wZWwgc2VjYXJhIGFjYWsKc2V0LnNlZWQoMzApCnNyc19zYW1wbGUgPC0gZGF0YVtzYW1wbGUobnJvdyhkYXRhKSwgbiwgcmVwbGFjZSA9IEZBTFNFKSwgXQoKIyBNZW5naGl0dW5nIHNpbXBhbmdhbiBiYWt1CnNpZ21hX3NycyA8LSBzZChzcnNfc2FtcGxlJFdha3R1LlRpZHVyLi5KYW0uLCBuYS5ybSA9IFRSVUUpICAjIEdhbnRpIGRlbmdhbiBuYW1hIGtvbG9tIHlhbmcgc2VzdWFpCgojIE1lbmFtcGlsa2FuIGhhc2lsCnByaW50KHBhc3RlKCJTaW1wYW5nYW4gQmFrdSAoU1JTKToiLCByb3VuZChzaWdtYV9zcnMsIDIpLCAiamFtIikpCmBgYAoKXFsKTW9FID0gMS45NiBcdGltZXMgXGZyYWN7MS44OH17XHNxcnR7MTAwfX0KXF0KClxbCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezEuODh9ezEwfQpcXQoKXFsKTW9FID0gMS45NiBcdGltZXMgMC4xODgKXF0KClxbCk1vRSA9IDAuMzY5ClxdCgpKYWRpLCAqKk1vRSA9IDAuMzY5IGphbSoqLiAgICAKClBhZGEgbWV0b2RlICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqLCBzZXRpYXAgbWFoYXNpc3dhIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIHRlcnBpbGloIGRhbGFtIHNhbXBlbC4gRGVuZ2FuIE1vRSBzZWJlc2FyICoqMC4zNjkgamFtKiosIG1ldG9kZSBpbmkgY3VrdXAgYWt1cmF0IGRhbGFtIG1lbmdnYW1iYXJrYW4gcG9wdWxhc2ksIHRldGFwaSB0aWRhayBtZW1wZXJ0aW1iYW5na2FuIHZhcmlhc2kgeWFuZyBtdW5na2luIGFkYSBkaSBhbnRhcmEga2Vsb21wb2sgbWFoYXNpc3dhLCBzZXBlcnRpIHBlcmJlZGFhbiBwb2xhIHRpZHVyIGFudGFyIGZha3VsdGFzLiAgCgojIyAzLjIgU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcgIApEaWtldGFodWk6ICAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgTG9hZCBsaWJyYXJ5CmxpYnJhcnkoZHBseXIpCgojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbApuIDwtIDEwMAoKIyBNZW5nYW1iaWwgc2FtcGVsIGJlcmRhc2Fya2FuIGZha3VsdGFzCnNldC5zZWVkKDM1KQpzdHJhdGlmaWVkX3NhbXBsZSA8LSBkYXRhICU+JQogIGdyb3VwX2J5KEZha3VsdGFzKSAlPiUKICBzYW1wbGVfbihuIC8gbGVuZ3RoKHVuaXF1ZShkYXRhJEZha3VsdGFzKSksIHJlcGxhY2UgPSBGQUxTRSkKCiMgTWVuZ2hpdHVuZyBzaW1wYW5nYW4gYmFrdQpzaWdtYV9zdHJhdGlmaWVkIDwtIHNkKHN0cmF0aWZpZWRfc2FtcGxlJFdha3R1LlRpZHVyLi5KYW0uLCBuYS5ybSA9IFRSVUUpCgojIE1lbmFtcGlsa2FuIGhhc2lsCnByaW50KHBhc3RlKCJTaW1wYW5nYW4gQmFrdSAoU3RyYXRpZmllZCk6Iiwgcm91bmQoc2lnbWFfc3RyYXRpZmllZCwgMiksICJqYW0iKSkKCmBgYAoKLSBcKCBcc2lnbWEgPSAxLjc2IFwpIGphbSAgCgpNYWthOiAgCgpcWwpNb0UgPSAxLjk2IFx0aW1lcyBcZnJhY3sxLjc2fXtcc3FydHsxMDB9fQpcXQoKXFsKTW9FID0gMS45NiBcdGltZXMgXGZyYWN7MS43Nn17MTB9ClxdCgpcWwpNb0UgPSAxLjk2IFx0aW1lcyAwLjE3NgpcXQoKXFsKTW9FID0gMC4zNDUKXF0KCkphZGksICoqTW9FID0gMC4zNDUgamFtKiouCgpTZW1lbnRhcmEgaXR1LCAqKlN0cmF0aWZpZWQgUmFuZG9tIFNhbXBsaW5nKiogbWVtYmFnaSBtYWhhc2lzd2Ega2UgZGFsYW0ga2Vsb21wb2sta2Vsb21wb2sgYmVyZGFzYXJrYW4gZmFrdWx0YXMgc2ViZWx1bSBzYW1wZWwgZGlhbWJpbC4gRGVuZ2FuIGNhcmEgaW5pLCBzZXRpYXAgZmFrdWx0YXMgbWVuZGFwYXRrYW4gcmVwcmVzZW50YXNpIHlhbmcgcHJvcG9yc2lvbmFsIGRhbGFtIHNhbXBlbC4gTW9FIHlhbmcgZGloYXNpbGthbiBhZGFsYWggKiowLjM0NSBqYW0qKiwgeWFuZyBtZXJ1cGFrYW4gbmlsYWkgdGVya2VjaWwgZGliYW5kaW5na2FuIG1ldG9kZSBsYWlubnlhLiBJbmkgbWVudW5qdWtrYW4gYmFod2EgbWV0b2RlIGluaSBtYW1wdSBtZW1iZXJpa2FuIGVzdGltYXNpIHlhbmcgcGFsaW5nIGFrdXJhdCBrYXJlbmEgbWVtcGVyaGl0dW5na2FuIHZhcmlhc2kgZGFsYW0gcG9wdWxhc2kuICAKCiMjIDMuMyBTeXN0ZW1hdGljIFNhbXBsaW5nICAKRGlrZXRhaHVpOiAgCgpgYGB7ciBlY2hvPUZBTFNFLCBtYXNzZWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbApuIDwtIDEwMApOIDwtIG5yb3coZGF0YSkKayA8LSBmbG9vcihOIC8gbikKCiMgTWVuZ2FtYmlsIHNhbXBlbCBzZWNhcmEgc2lzdGVtYXRpcwpzZXQuc2VlZCgzMCkKc3lzdGVtYXRpY19zYW1wbGUgPC0gZGF0YVtzZXEoMSwgTiwgYnkgPSBrKSwgXQoKIyBNZW5naGl0dW5nIHNpbXBhbmdhbiBiYWt1CnNpZ21hX3N5c3RlbWF0aWMgPC0gc2Qoc3lzdGVtYXRpY19zYW1wbGUkV2FrdHUuVGlkdXIuLkphbS4sIG5hLnJtID0gVFJVRSkKCiMgTWVuYW1waWxrYW4gaGFzaWwKcHJpbnQocGFzdGUoIlNpbXBhbmdhbiBCYWt1IChTeXN0ZW1hdGljKToiLCByb3VuZChzaWdtYV9zeXN0ZW1hdGljLCAyKSwgImphbSIpKQoKYGBgCgotIFwoIFxzaWdtYSA9IDEuNzggXCkgamFtICAKCk1ha2E6ICAKClxbCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezEuNzh9e1xzcXJ0ezEwMH19ClxdCgpcWwpNb0UgPSAxLjk2IFx0aW1lcyBcZnJhY3sxLjc4fXsxMH0KXF0KClxbCk1vRSA9IDEuOTYgXHRpbWVzIDAuMTc4ClxdCgpcWwpNb0UgPSAwLjM0OQpcXQoKSmFkaSwgKipNb0UgPSAwLjM0OSBqYW0qKi4KClBhZGEgbWV0b2RlICoqU3lzdGVtYXRpYyBTYW1wbGluZyoqLCBtYWhhc2lzd2EgZGlwaWxpaCBkZW5nYW4gaW50ZXJ2YWwgdGVydGVudHUgZGFyaSBkYWZ0YXIgcG9wdWxhc2kuIE1vRSB5YW5nIGRpaGFzaWxrYW4gYWRhbGFoICoqMC4zNDkgamFtKiosIHlhbmcgaGFtcGlyIHNldGFyYSBkZW5nYW4gbWV0b2RlIHN0cmF0aWZpa2FzaS4gTmFtdW4sIG1ldG9kZSBpbmkgbWVtaWxpa2kgcG90ZW5zaSBiaWFzIGppa2EgdGVyZGFwYXQgcG9sYSBiZXJ1bGFuZyBkYWxhbSBkYWZ0YXIgbWFoYXNpc3dhIHlhbmcgZGlndW5ha2FuIHVudHVrIHBlbWlsaWhhbiBzYW1wZWwuICAKCiMjIDMuNCBDbHVzdGVyIFNhbXBsaW5nICAKRGlrZXRhaHVpOiAgCgpgYGB7ciBlY2hvPUZBTFNFLCBtYXNzZWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIE1lbmdhbWJpbCBzYW1wZWwgYmVyZGFzYXJrYW4gY2x1c3RlciAoZmFrdWx0YXMpCnNldC5zZWVkKDMwKQpzZWxlY3RlZF9jbHVzdGVyIDwtIHNhbXBsZSh1bmlxdWUoZGF0YSRGYWt1bHRhcyksIDEpICMgUGlsaWggc2F0dSBjbHVzdGVyCmNsdXN0ZXJfc2FtcGxlIDwtIGRhdGFbZGF0YSRGYWt1bHRhcyA9PSBzZWxlY3RlZF9jbHVzdGVyLCBdCgojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3UKc2lnbWFfY2x1c3RlciA8LSBzZChjbHVzdGVyX3NhbXBsZSRXYWt0dS5UaWR1ci4uSmFtLiwgbmEucm0gPSBUUlVFKQoKIyBNZW5hbXBpbGthbiBoYXNpbApwcmludChwYXN0ZSgiU2ltcGFuZ2FuIEJha3UgKENsdXN0ZXIpOiIsIHJvdW5kKHNpZ21hX2NsdXN0ZXIsIDIpLCAiamFtIikpCgpgYGAKCi0gXCggXHNpZ21hID0gMS45MSBcKSBqYW0gIAoKTWFrYTogIAoKXFsKTW9FID0gMS45NiBcdGltZXMgXGZyYWN7MS45MX17XHNxcnR7MTAwfX0KXF0KClxbCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezEuOTF9ezEwfQpcXQoKXFsKTW9FID0gMS45NiBcdGltZXMgMC4xOTEKXF0KClxbCk1vRSA9IDAuMzc0ClxdCgpKYWRpLCAqKk1vRSA9IDAuMzc0IGphbSoqLgoKClRlcmFraGlyLCBtZXRvZGUgKipDbHVzdGVyIFNhbXBsaW5nKiogbWVuZ2FtYmlsIHNhbXBlbCBiZXJkYXNhcmthbiBmYWt1bHRhcyB5YW5nIGRpcGlsaWggc2VjYXJhIGFjYWssIGxhbHUgc2VsdXJ1aCBtYWhhc2lzd2EgZGFsYW0gZmFrdWx0YXMgdGVyc2VidXQgZGlqYWRpa2FuIHNhbXBlbC4gTW9FIHVudHVrIG1ldG9kZSBpbmkgYWRhbGFoICoqMC4zNzQgamFtKiosIHlhbmcgbWVydXBha2FuIG5pbGFpIHRlcnRpbmdnaSBkaWJhbmRpbmdrYW4gbWV0b2RlIGxhaW5ueWEuIEhhbCBpbmkgbWVudW5qdWtrYW4gYmFod2EgQ2x1c3RlciBTYW1wbGluZyBjZW5kZXJ1bmcgbWVuZ2hhc2lsa2FuIGVzdGltYXNpIHlhbmcga3VyYW5nIGFrdXJhdCBkaWJhbmRpbmdrYW4gbWV0b2RlIGxhaW4sIHRlcnV0YW1hIGppa2EgZmFrdWx0YXMgeWFuZyB0ZXJwaWxpaCBtZW1pbGlraSBwb2xhIHRpZHVyIHlhbmcgYmVyYmVkYSBkYXJpIGZha3VsdGFzIGxhaW5ueWEuCgoKLS0tCgojIDQuIEFuYWxpc2lzIEJpYXMgZGFsYW0gTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nCgpOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW1pbGloYW4gc2FtcGVsIHlhbmcgdGlkYWsgbWVtYmVyaWthbiBwZWx1YW5nIHlhbmcgc2FtYSBrZXBhZGEgc2V0aWFwIGFuZ2dvdGEgcG9wdWxhc2kgdW50dWsgdGVycGlsaWguIEhhbCBpbmkgZGFwYXQgbWVueWViYWJrYW4gYmlhcywgeWFpdHUgcGVueWltcGFuZ2FuIGFudGFyYSBoYXNpbCBzYW1wZWwgZGFuIHBvcHVsYXNpIHNlYmVuYXJueWEuIEJlcmlrdXQgYWRhbGFoIGFuYWxpc2lzIG1lbmRhbGFtIGRhcmkgZW1wYXQgamVuaXMgTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nOiAgCgojIyA0LjEgKipDb252ZW5pZW5jZSBTYW1wbGluZyoqICAKIyMjICoqTWV0b2RlOioqICAKQ29udmVuaWVuY2UgU2FtcGxpbmcgbWVuZ2FtYmlsIHNhbXBlbCBiZXJkYXNhcmthbiBrZW11ZGFoYW4gYWtzZXMgZGFuIGtldGVyc2VkaWFhbiBzdWJqZWsuIE1pc2FsbnlhLCBkYWxhbSBwZW5lbGl0aWFuIGluaSwga2l0YSBtZW1pbGloIDEwMCBtYWhhc2lzd2EgcGVydGFtYSBkYXJpIGRhdGFzZXQgdGFucGEgbWVtcGVydGltYmFuZ2thbiBrYXJha3RlcmlzdGlrIGxhaW5ueWEuICAKCiMjIyAqKktldW5nZ3VsYW46KiogIAotICoqTXVkYWggZGFuIGNlcGF0OioqIFRpZGFrIG1lbWJ1dHVoa2FuIHByb3NlcyBzZWxla3NpIHlhbmcga29tcGxla3MuICAKLSAqKkJpYXlhIHJlbmRhaDoqKiBUaWRhayBtZW1lcmx1a2FuIHN1bWJlciBkYXlhIHRhbWJhaGFuIHVudHVrIG1lbmphbmdrYXUgcmVzcG9uZGVuLiAgCi0gKipEYXBhdCBkaWd1bmFrYW4gdW50dWsgZWtzcGxvcmFzaSBhd2FsOioqIEJlcmd1bmEgZGFsYW0gcGVuZWxpdGlhbiBhd2FsIHVudHVrIG1lbWFoYW1pIHRyZW4ga2FzYXIgc2ViZWx1bSBwZW5nYW1iaWxhbiBzYW1wZWwgeWFuZyBsZWJpaCByZXByZXNlbnRhdGlmLiAgCgojIyMgKipLZWxlbWFoYW46KiogIAotICoqQmlhcyB0aW5nZ2k6KiogSGFzaWwgcGVuZWxpdGlhbiB0aWRhayBkYXBhdCBkaWdlbmVyYWxpc2FzaWthbiBrZSBzZWx1cnVoIHBvcHVsYXNpIGthcmVuYSBoYW55YSBtZXdha2lsaSBrZWxvbXBvayB0ZXJ0ZW50dSB5YW5nIG11ZGFoIGRpYWtzZXMuICAKLSAqKlRpZGFrIHJlcHJlc2VudGF0aWY6KiogTWFoYXNpc3dhIHlhbmcgbGViaWggYWt0aWYgYXRhdSBsZWJpaCBtdWRhaCBkaWphbmdrYXUgYmlzYSBtZW1pbGlraSBrZWJpYXNhYW4gdGlkdXIgYmVyYmVkYSBkYXJpIG1haGFzaXN3YSBsYWlubnlhLiAgCi0gKipUaWRhayBkYXBhdCBkaWd1bmFrYW4gdW50dWsgaW5mZXJlbnNpIHN0YXRpc3RpayB5YW5nIHZhbGlkOioqIEthcmVuYSB0aWRhayBhZGEgamFtaW5hbiBiYWh3YSBzYW1wZWwgbWVuY2VybWlua2FuIHBvcHVsYXNpLCBhbmFsaXNpcyBzdGF0aXN0aWsgYmVyYmFzaXMgaW5mZXJlbnNpIGJpc2EgbWVueWVzYXRrYW4uICAKCiMjIyAqKkNvbnRvaCBCaWFzOioqICAKSmlrYSBraXRhIG1lbmdhbWJpbCAxMDAgbWFoYXNpc3dhIHBlcnRhbWEgeWFuZyBraXRhIHRlbXVpIGRpIGthbXB1cywga2VtdW5na2luYW4gYmVzYXIgbWVyZWthIGFkYWxhaCBtYWhhc2lzd2EgeWFuZyBsZWJpaCByYWppbiBkYW4gbGViaWggYWt0aWYgc2VjYXJhIGFrYWRlbWlrLiBNZXJla2EgbXVuZ2tpbiBtZW1pbGlraSBrZWJpYXNhYW4gdGlkdXIgbGViaWggdGVyYXR1ciBkaWJhbmRpbmdrYW4gbWFoYXNpc3dhIGxhaW4geWFuZyBzZXJpbmcgYmVsYWphciBoaW5nZ2EgbGFydXQgbWFsYW0gYXRhdSB5YW5nIGxlYmloIHN1a2EgYmVnYWRhbmcuICAKCi0tLQoKIyMgNC4yICoqUHVycG9zaXZlIFNhbXBsaW5nKiogIAojIyMgKipNZXRvZGU6KiogIApQdXJwb3NpdmUgU2FtcGxpbmcgbWVtaWxpaCBpbmRpdmlkdSBiZXJkYXNhcmthbiBrYXJha3RlcmlzdGlrIHRlcnRlbnR1IHlhbmcgZGlhbmdnYXAgcmVsZXZhbiBkZW5nYW4gcGVuZWxpdGlhbi4gRGFsYW0gcGVuZWxpdGlhbiBpbmksIHNhbXBlbCBkaWFtYmlsIGJlcmRhc2Fya2FuIG1haGFzaXN3YSB5YW5nIHRpZHVyIGt1cmFuZyBkYXJpIDQgamFtIHBlciBtYWxhbS4gIAoKIyMjICoqS2V1bmdndWxhbjoqKiAgCi0gKipGb2t1cyBwYWRhIGtlbG9tcG9rIHNwZXNpZmlrOioqIEJlcmd1bmEgamlrYSBwZW5lbGl0aWFuIGluZ2luIG1lbXBlbGFqYXJpIGZlbm9tZW5hIHRlcnRlbnR1LCBzZXBlcnRpIG1haGFzaXN3YSBkZW5nYW4ga2ViaWFzYWFuIHRpZHVyIHNhbmdhdCBzZWRpa2l0LiAgCi0gKipFZmVrdGlmIGRhbGFtIHBlbmVsaXRpYW4gZWtzcGxvcmF0aWY6KiogRGFwYXQgbWVtYmVyaWthbiB3YXdhc2FuIG1lbmRhbGFtIHRlbnRhbmcgc3Via2Vsb21wb2sgZGFsYW0gcG9wdWxhc2kuICAKLSAqKkRhcGF0IGRpZ3VuYWthbiBqaWthIHBvcHVsYXNpIHRhcmdldCBzdWxpdCBkaWphbmdrYXU6KiogTWlzYWxueWEsIGppa2Ega2l0YSBpbmdpbiBtZW5lbGl0aSBtYWhhc2lzd2EgZGVuZ2FuIGluc29tbmlhIGF0YXUgZ2FuZ2d1YW4gdGlkdXIuICAKCiMjIyAqKktlbGVtYWhhbjoqKiAgCi0gKipUaWRhayByZXByZXNlbnRhdGlmIHRlcmhhZGFwIHBvcHVsYXNpIHVtdW06KiogSGFueWEgbWVuY2VybWlua2FuIGthcmFrdGVyaXN0aWsga2Vsb21wb2sgdGVydGVudHUsIGJ1a2FuIGtlc2VsdXJ1aGFuIHBvcHVsYXNpIG1haGFzaXN3YS4gIAotICoqU3ViamVrdGlmOioqIFBlbWlsaWhhbiBzYW1wZWwgYmVyZ2FudHVuZyBwYWRhIHBlbmVsaXRpLCB5YW5nIGRhcGF0IG1lbnllYmFia2FuIGJpYXMgc2VsZWtzaS4gIAotICoqVGlkYWsgZGFwYXQgZGlndW5ha2FuIHVudHVrIGdlbmVyYWxpc2FzaToqKiBIYXNpbCBoYW55YSBiZXJsYWt1IHVudHVrIGtlbG9tcG9rIHNwZXNpZmlrIHlhbmcgZGlwaWxpaC4gIAoKIyMjICoqQ29udG9oIEJpYXM6KiogIApKaWthIGtpdGEgaGFueWEgbWVtaWxpaCBtYWhhc2lzd2EgeWFuZyB0aWR1ciBrdXJhbmcgZGFyaSA0IGphbSBwZXIgbWFsYW0sIGtpdGEgbXVuZ2tpbiBtZW5kYXBhdGthbiBkYXRhIHlhbmcgbWVudW5qdWtrYW4gcmF0YS1yYXRhIHdha3R1IHRpZHVyIG1haGFzaXN3YSBsZWJpaCByZW5kYWggZGFyaSBrZW55YXRhYW4uIEluaSBiaXNhIG1lbnllc2F0a2FuIGppa2EgcGVuZWxpdGlhbiBiZXJ0dWp1YW4gbWVuZ2V0YWh1aSByYXRhLXJhdGEgd2FrdHUgdGlkdXIgc2VsdXJ1aCBtYWhhc2lzd2EsIGJ1a2FuIGhhbnlhIGtlbG9tcG9rIHlhbmcgbWVuZ2FsYW1pIGt1cmFuZyB0aWR1ci4gIAoKLS0tCgojIyA0LjMgKipTbm93YmFsbCBTYW1wbGluZyoqICAKIyMjICoqTWV0b2RlOioqICAKU25vd2JhbGwgU2FtcGxpbmcgZGltdWxhaSBkZW5nYW4gbWVtaWxpaCBiZWJlcmFwYSBpbmRpdmlkdSBzZWJhZ2FpIHNhbXBlbCBhd2FsLCBrZW11ZGlhbiBtZXJla2EgbWVtYmFudHUgbWVyZWtydXQgcmVzcG9uZGVuIGxhaW4geWFuZyBtZW1pbGlraSBrYXJha3RlcmlzdGlrIHNlcnVwYS4gIAoKIyMjICoqS2V1bmdndWxhbjoqKiAgCi0gKipCZXJndW5hIHVudHVrIHBvcHVsYXNpIHlhbmcgc3VsaXQgZGlqYW5na2F1OioqIENvY29rIHVudHVrIG1lbmVsaXRpIGtlbG9tcG9rIHRlcnRlbnR1LCBzZXBlcnRpIG1haGFzaXN3YSB5YW5nIGJla2VyamEgc2FtYmlsIGt1bGlhaCBhdGF1IG1lcmVrYSB5YW5nIG1lbWlsaWtpIHBvbGEgdGlkdXIgZWtzdHJlbS4gIAotICoqRWZla3RpZiBkYWxhbSBwZW5lbGl0aWFuIGt1YWxpdGF0aWY6KiogRGFwYXQgZGlndW5ha2FuIHVudHVrIG1lbWFoYW1pIHBlbmdhbGFtYW4gaW5kaXZpZHUgZGFsYW0ga2Vsb21wb2sgdGVydGVudHUuICAKLSAqKk1lbmdoZW1hdCB3YWt0dSBkYW4gc3VtYmVyIGRheWE6KiogUmVzcG9uZGVuIG1lbWJhbnR1IGRhbGFtIHBlbmNhcmlhbiBzYW1wZWwgdGFtYmFoYW4uICAKCiMjIyAqKktlbGVtYWhhbjoqKiAgCi0gKipCaWFzIHNvc2lhbDoqKiBSZXNwb25kZW4gY2VuZGVydW5nIG1lcmVrb21lbmRhc2lrYW4gb3JhbmcgZGVuZ2FuIGthcmFrdGVyaXN0aWsgeWFuZyBtaXJpcCwgbWVueWViYWJrYW4gaGFzaWwgdGlkYWsgYmVydmFyaWFzaS4gIAotICoqS3VyYW5nIHJlcHJlc2VudGF0aWY6KiogU2FtcGVsIGhhbnlhIHRlcmRpcmkgZGFyaSBqYXJpbmdhbiBzb3NpYWwgdGVydGVudHUsIGJ1a2FuIHNlbHVydWggcG9wdWxhc2kuICAKLSAqKlN1bGl0IGRpa2VuZGFsaWthbjoqKiBQZW5lbGl0aSBrZWhpbGFuZ2FuIGtlbmRhbGkgYXRhcyBiYWdhaW1hbmEgc2FtcGVsIGJlcmtlbWJhbmcga2FyZW5hIGJlcmdhbnR1bmcgcGFkYSByZWtvbWVuZGFzaSByZXNwb25kZW4uICAKCiMjIyAqKkNvbnRvaCBCaWFzOioqICAKSmlrYSBraXRhIG11bGFpIGRlbmdhbiBzZW9yYW5nIG1haGFzaXN3YSB5YW5nIHNlcmluZyBiZWdhZGFuZywga2VtdW5na2luYW4gYmVzYXIgZGlhIGFrYW4gbWVyZWtvbWVuZGFzaWthbiB0ZW1hbi10ZW1hbm55YSB5YW5nIGp1Z2EgbWVtaWxpa2kga2ViaWFzYWFuIHRpZHVyIHlhbmcgc2FtYS4gSW5pIGFrYW4gbWVuY2lwdGFrYW4ga2VzaW1wdWxhbiB5YW5nIGJpYXMgYmFod2Egc2ViYWdpYW4gYmVzYXIgbWFoYXNpc3dhIHRpZHVyIHNhbmdhdCBsYXJ1dCBtYWxhbSwgcGFkYWhhbCBwb3B1bGFzaSBtYWhhc2lzd2Egc2VjYXJhIGtlc2VsdXJ1aGFuIG11bmdraW4gbWVtaWxpa2kgcG9sYSB0aWR1ciB5YW5nIGxlYmloIGJlcnZhcmlhc2kuICAKCi0tLQoKIyMgNC40ICoqUXVvdGEgU2FtcGxpbmcqKiAgCiMjIyAqKk1ldG9kZToqKiAgClF1b3RhIFNhbXBsaW5nIG1lbWJhZ2kgcG9wdWxhc2kga2UgZGFsYW0ga2F0ZWdvcmkgdGVydGVudHUgKG1pc2FsbnlhIGJlcmRhc2Fya2FuIGZha3VsdGFzKSwga2VtdWRpYW4gbWVtaWxpaCBzYW1wZWwgZGFyaSBtYXNpbmctbWFzaW5nIGthdGVnb3JpIGhpbmdnYSBrdW90YSB0ZXJwZW51aGkuICAKCiMjIyAqKktldW5nZ3VsYW46KiogIAotICoqTGViaWggcmVwcmVzZW50YXRpZiBkaWJhbmRpbmdrYW4gbWV0b2RlIG5vbi1hY2FrIGxhaW5ueWE6KiogTWVtYXN0aWthbiBiYWh3YSBzZXRpYXAga2Vsb21wb2sgbWVtaWxpa2kgcGVyd2FraWxhbiBkYWxhbSBzYW1wZWwuICAKLSAqKkxlYmloIGNlcGF0IGRhcmlwYWRhIHN0cmF0aWZpZWQgc2FtcGxpbmc6KiogVGlkYWsgbWVtZXJsdWthbiBwZW1pbGloYW4gYWNhayBkYWxhbSBzZXRpYXAga2Vsb21wb2suICAKLSAqKkRhcGF0IGRpZ3VuYWthbiBrZXRpa2EgZGF0YSBwb3B1bGFzaSB0ZXJiYXRhczoqKiBKaWthIHRpZGFrIG1lbXVuZ2tpbmthbiB1bnR1ayBtZW5nZ3VuYWthbiBQcm9iYWJpbGl0eSBTYW1wbGluZywgbWV0b2RlIGluaSBiaXNhIG1lbmphZGkgYWx0ZXJuYXRpZi4gIAoKIyMjICoqS2VsZW1haGFuOioqICAKLSAqKlRpZGFrIHNlcGVudWhueWEgYWNhazoqKiBQZW1pbGloYW4gaW5kaXZpZHUgZGFsYW0gc2V0aWFwIGt1b3RhIGJpc2Egc3ViamVrdGlmLCBtZW55ZWJhYmthbiBiaWFzIHNlbGVrc2kuICAKLSAqKlJlbnRhbiB0ZXJoYWRhcCB1bmRlcmNvdmVyYWdlIGJpYXM6KiogSmlrYSBiZWJlcmFwYSBrZWxvbXBvayBsZWJpaCBzdWxpdCBkaWphbmdrYXUsIG1lcmVrYSBiaXNhIGt1cmFuZyB0ZXJ3YWtpbGkgZGFsYW0gc2FtcGVsLiAgCi0gKipLdXJhbmcgYWt1cmF0IGRpYmFuZGluZ2thbiBTdHJhdGlmaWVkIFNhbXBsaW5nOioqIEthcmVuYSB0aWRhayBtZW5nZ3VuYWthbiBwZW1pbGloYW4gYWNhayBkaSBkYWxhbSBzZXRpYXAga2F0ZWdvcmkuICAKCiMjIyAqKkNvbnRvaCBCaWFzOioqICAKSmlrYSBrdW90YSBkaXRldGFwa2FuIHVudHVrIHNldGlhcCBmYWt1bHRhcywgdGV0YXBpIGtpdGEgbWVtaWxpaCBtYWhhc2lzd2EgZGFsYW0ga3VvdGEgdGVyc2VidXQgYmVyZGFzYXJrYW4ga2VtdWRhaGFuIGFrc2VzLCBraXRhIG11bmdraW4gbWVuZGFwYXRrYW4gcGVyd2FraWxhbiB5YW5nIGt1cmFuZyBha3VyYXQuIE1pc2FsbnlhLCBqaWthIHNlYmFnaWFuIGJlc2FyIG1haGFzaXN3YSB5YW5nIGRpd2F3YW5jYXJhaSBiZXJhc2FsIGRhcmkga2VsYXMgcGFnaSwgaGFzaWxueWEgYmlzYSBtZW5jZXJtaW5rYW4gcG9sYSB0aWR1ciB5YW5nIGxlYmloIHNlaGF0IGRpYmFuZGluZ2thbiBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uICAKCi0tLQoKIyA1LiBQZXJiYW5kaW5nYW4gSGFzaWwgZGFyaSBCZXJiYWdhaSBNZXRvZGUgU2FtcGxpbmcKCkRhbGFtIHBlbmVsaXRpYW4gaW5pLCBkaWd1bmFrYW4gYmVyYmFnYWkgbWV0b2RlIHNhbXBsaW5nLCBiYWlrICoqUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiBtYXVwdW4gKipOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKi4gTWFzaW5nLW1hc2luZyBtZXRvZGUgbWVtaWxpa2kga2FyYWt0ZXJpc3Rpaywga2V1bmdndWxhbiwga2VsZW1haGFuLCBzZXJ0YSB0aW5na2F0IGJpYXMgZGFuIG1hcmdpbiBvZiBlcnJvciB5YW5nIGJlcmJlZGEuIFVudHVrIG1lbWFoYW1pIGVmZWt0aXZpdGFzIG1hc2luZy1tYXNpbmcgbWV0b2RlLCBkaWxha3VrYW4gYW5hbGlzaXMgbWVuZGFsYW0gYmVyZGFzYXJrYW4gKiptYXJnaW4gb2YgZXJyb3IsIGJpYXMsIGRhbiB0aW5na2F0IHJlcHJlc2VudGF0aXZpdGFzIHRlcmhhZGFwIHBvcHVsYXNpKiouICAKCiMjICoqNS4xIFBlcmJhbmRpbmdhbiBQcm9iYWJpbGl0eSBTYW1wbGluZyB2cyBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiAgCgpTYW1wZWwgeWFuZyBkaWFtYmlsIG1lbmdndW5ha2FuICoqUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiBtZW1pbGlraSBwZWx1YW5nIGxlYmloIHRpbmdnaSB1bnR1ayBtZW5naGFzaWxrYW4gZGF0YSB5YW5nIHJlcHJlc2VudGF0aWYgZGliYW5kaW5na2FuIGRlbmdhbiAqKk5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZyoqLiBIYWwgaW5pIGthcmVuYSBQcm9iYWJpbGl0eSBTYW1wbGluZyBtZW11bmdraW5rYW4gc2V0aWFwIGluZGl2aWR1IGRhbGFtIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIGRpcGlsaWgsIHNlZGFuZ2thbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgY2VuZGVydW5nIGJlcmdhbnR1bmcgcGFkYSBmYWt0b3Iga2VtdWRhaGFuIGRhbiBzdWJqZWt0aXZpdGFzIGRhbGFtIHBlbWlsaWhhbiBzYW1wZWwuICAKCnwgKipBc3BlayoqICAgICAgICAgICAgICAgICAgfCAqKlByb2JhYmlsaXR5IFNhbXBsaW5nKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCAqKkRlZmluaXNpKiogICAgICAgICAgICAgICB8IE1ldG9kZSBzYW1wbGluZyB5YW5nIG1lbWFzdGlrYW4gc2V0aWFwIGVsZW1lbiBkYWxhbSBwb3B1bGFzaSBtZW1pbGlraSBwZWx1YW5nIHlhbmcgc2FtYSB1bnR1ayBkaXBpbGloLiB8IE1ldG9kZSBzYW1wbGluZyB5YW5nIHRpZGFrIG1lbWJlcmlrYW4gc2V0aWFwIGVsZW1lbiBwZWx1YW5nIHlhbmcgc2FtYSB1bnR1ayBkaXBpbGloLiB8CnwgKipDb250b2ggTWV0b2RlKiogICAgICAgICAgfCBTaW1wbGUgUmFuZG9tLCBTdHJhdGlmaWVkLCBTeXN0ZW1hdGljLCBDbHVzdGVyICAgICAgICAgICAgICAgfCBDb252ZW5pZW5jZSwgUHVycG9zaXZlLCBTbm93YmFsbCwgUXVvdGEgICAgICAgICAgICAgICAgICB8CnwgKipLZWFjYWthbioqICAgICAgICAgICAgICAgfCBQZW1pbGloYW4gc2FtcGVsIGRpbGFrdWthbiBzZWNhcmEgYWNhayAgICAgICAgICAgICAgICAgICAgICAgfCBQZW1pbGloYW4gc2FtcGVsIHNlcmluZyBiZXJkYXNhcmthbiBha3Nlc2liaWxpdGFzIGF0YXUga2FyYWt0ZXJpc3RpayB0ZXJ0ZW50dSB8CnwgKipNYXJnaW4gb2YgRXJyb3IgKE1vRSkqKiAgfCBEYXBhdCBkaWhpdHVuZyBkZW5nYW4gcHJlc2lzaSBkYW4gY2VuZGVydW5nIGxlYmloIGtlY2lsICAgICB8IFN1bGl0IGRpaGl0dW5nIGthcmVuYSB0aWRhayBhZGEgYXR1cmFuIHBlbmdhbWJpbGFuIHNhbXBlbCB5YW5nIHNpc3RlbWF0aXMgfAp8ICoqQmlhcyoqICAgICAgICAgICAgICAgICAgIHwgUmVsYXRpZiByZW5kYWggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaW5nZ2ksIGthcmVuYSBwZW1pbGloYW4gdGlkYWsgZGlsYWt1a2FuIHNlY2FyYSBhY2FrIHwKfCAqKktlbXVkYWhhbiBQZWxha3NhbmFhbioqICB8IE1lbWVybHVrYW4gcGVyZW5jYW5hYW4gbGViaWggbWF0YW5nIGRhbiBzdW1iZXIgZGF5YSBsZWJpaCBiZXNhciB8IExlYmloIG11ZGFoLCBjZXBhdCwgZGFuIG11cmFoIGRpbGFrdWthbiB8CnwgKipSZXByZXNlbnRhc2kgUG9wdWxhc2kqKiAgfCBIYXNpbCBsZWJpaCByZXByZXNlbnRhdGlmIGRhbiBkYXBhdCBkaWdlbmVyYWxpc2FzaSAgICAgICAgICB8IEt1cmFuZyByZXByZXNlbnRhdGlmIGthcmVuYSB0aWRhayBzZW11YSBpbmRpdmlkdSBtZW1pbGlraSBrZXNlbXBhdGFuIHlhbmcgc2FtYSB1bnR1ayBkaXBpbGloIHwKCkRhcmkgdGFiZWwgaW5pLCBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YSAqKlByb2JhYmlsaXR5IFNhbXBsaW5nIGxlYmloIHVuZ2d1bCBkYWxhbSBoYWwgYWt1cmFzaSBkYW4gcmVwcmVzZW50YXRpdml0YXMqKi4gTmFtdW4sICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nIGxlYmloIG11ZGFoIGRhbiBjZXBhdCBkaWd1bmFrYW4qKiwgdGVydXRhbWEgZGFsYW0ga29uZGlzaSBkaSBtYW5hIHN1bWJlciBkYXlhIHRlcmJhdGFzLiAgCgoKIyMgKio1LjIgUGVyYmFuZGluZ2FuIEhhc2lsIGRhcmkgQmVyYmFnYWkgTWV0b2RlIFByb2JhYmlsaXR5IFNhbXBsaW5nKiogIAoKVW50dWsgbWVuZ2V0YWh1aSBtZXRvZGUgUHJvYmFiaWxpdHkgU2FtcGxpbmcgbWFuYSB5YW5nIHBhbGluZyBha3VyYXQsIGRpbGFrdWthbiBwZXJoaXR1bmdhbiAqKm1hcmdpbiBvZiBlcnJvciAoTW9FKSoqIHVudHVrIHNldGlhcCBtZXRvZGUuICAKCnwgKipNZXRvZGUgU2FtcGxpbmcqKiAgICAgICAgICAgfCAqKkNhcmEgS2VyamEqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqTWFyZ2luIG9mIEVycm9yIChNb0UpKiogfCAqKktldW5nZ3VsYW4qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipLZWxlbWFoYW4qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8ICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqIHwgTWVtaWxpaCBzYW1wZWwgc2VjYXJhIGFjYWsgZGFyaSBzZWx1cnVoIHBvcHVsYXNpICAgICAgICAgICB8ICoqMC4zNjkgamFtKiogICAgICAgICAgICAgfCBUaWRhayBhZGEgYmlhcyBkYWxhbSBwZW1pbGloYW4gICAgICAgICAgICAgICAgICAgfCBUaWRhayBtZW1wZXJ0aW1iYW5na2FuIHBlcmJlZGFhbiBrZWxvbXBvayBkYWxhbSBwb3B1bGFzaSAgIHwKfCAqKlN0cmF0aWZpZWQgU2FtcGxpbmcqKiAgICAgICAgfCBQb3B1bGFzaSBkaWJhZ2kgZGFsYW0ga2Vsb21wb2ssIGxhbHUgZGlhbWJpbCBzYW1wZWwgc2VjYXJhIHByb3BvcnNpb25hbCB8ICoqMC4zNDUgamFtKiogICAgICAgICAgICAgfCBSZXByZXNlbnRhc2kgbGViaWggYmFpayB1bnR1ayBzZW11YSBrZWxvbXBvayAgICB8IE1lbWVybHVrYW4gaW5mb3JtYXNpIHRhbWJhaGFuIHRlbnRhbmcgcG9wdWxhc2kgICB8CnwgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogICAgICAgIHwgTWVtaWxpaCBzYW1wZWwgYmVyZGFzYXJrYW4gcG9sYSBzaXN0ZW1hdGlzIChtaXNhbCBzZXRpYXAgbWFoYXNpc3dhIGtlLTMpIHwgKiowLjM0OSBqYW0qKiAgICAgICAgICAgICB8IERpc3RyaWJ1c2kgc2FtcGVsIGxlYmloIG1lcmF0YSAgICAgICAgICAgICAgICAgICB8IEJpc2EgYmlhcyBqaWthIGFkYSBwb2xhIGRhbGFtIGRhdGEgcG9wdWxhc2kgICAgICB8CnwgKipDbHVzdGVyIFNhbXBsaW5nKiogICAgICAgICAgIHwgTWVtaWxpaCBiZWJlcmFwYSBrZWxvbXBvayAobWlzYWwgZmFrdWx0YXMpLCBsYWx1IG1lbmdhbWJpbCBzZW11YSBhbmdnb3RhIGRhbGFtIGtlbG9tcG9rIHRlcnNlYnV0IHwgKiowLjM3NCBqYW0qKiAgICAgICAgICAgICB8IExlYmloIGVmaXNpZW4gamlrYSBwb3B1bGFzaSBsdWFzIGRhbiB0ZXJzZWJhciAgIHwgQmlzYSBtZW55ZWJhYmthbiBiaWFzIGppa2Ega2Vsb21wb2sgeWFuZyBkaXBpbGloIHRpZGFrIG1ld2FraWxpIHBvcHVsYXNpIHNlY2FyYSBrZXNlbHVydWhhbiB8CgojIyMgKipBbmFsaXNpcyoqICAKMS4gKipTdHJhdGlmaWVkIFNhbXBsaW5nIG1lbWlsaWtpIG1hcmdpbiBvZiBlcnJvciB0ZXJrZWNpbCAoMC4zNDUgamFtKSoqLCBzZWhpbmdnYSBtZW5qYWRpIG1ldG9kZSB5YW5nIHBhbGluZyBha3VyYXQuICAKMi4gKipDbHVzdGVyIFNhbXBsaW5nIG1lbWlsaWtpIG1hcmdpbiBvZiBlcnJvciB0ZXJiZXNhciAoMC4zNzQgamFtKSoqLCB5YW5nIG1lbnVuanVra2FuIG1ldG9kZSBpbmkgbGViaWggcmVudGFuIHRlcmhhZGFwIGJpYXMgamlrYSBrZWxvbXBvayB5YW5nIGRpcGlsaWggdGlkYWsgcmVwcmVzZW50YXRpZi4gIAozLiAqKlN5c3RlbWF0aWMgU2FtcGxpbmcgbWVtaWxpa2kgbWFyZ2luIG9mIGVycm9yIHlhbmcgc2VkaWtpdCBsZWJpaCBiZXNhciBkaWJhbmRpbmdrYW4gU3RyYXRpZmllZCBTYW1wbGluZyoqLCB0ZXRhcGkgdGV0YXAgbGViaWgga2VjaWwgZGliYW5kaW5na2FuIFNpbXBsZSBSYW5kb20gZGFuIENsdXN0ZXIgU2FtcGxpbmcuICAKCgojIyAqKjUuMyBQZXJiYW5kaW5nYW4gSGFzaWwgZGFyaSBCZXJiYWdhaSBNZXRvZGUgTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKiogIAoKTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nIGxlYmloIGJhbnlhayBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiBla3NwbG9yYXRpZiBhdGF1IGtldGlrYSAqKnByb2JhYmlsaXR5IHNhbXBsaW5nIHRpZGFrIGRhcGF0IGRpdGVyYXBrYW4qKiBrYXJlbmEga2V0ZXJiYXRhc2FuIHdha3R1LCBiaWF5YSwgYXRhdSBha3NlcyBrZSBwb3B1bGFzaSB0YXJnZXQuIE5hbXVuLCBtZXRvZGUgaW5pIGNlbmRlcnVuZyBtZW1pbGlraSB0aW5na2F0IGJpYXMgeWFuZyBsZWJpaCB0aW5nZ2kuICAKCnwgKipNZXRvZGUgU2FtcGxpbmcqKiAgICAgICAgfCAqKkNhcmEgS2VyamEqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKkJpYXMqKiAgICAgICAgICB8ICoqS2V1bmdndWxhbioqICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipLZWxlbWFoYW4qKiAgICAgICAgICAgICAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8ICoqQ29udmVuaWVuY2UgU2FtcGxpbmcqKiAgIHwgTWVtaWxpaCBzYW1wZWwgeWFuZyBwYWxpbmcgbXVkYWggZGlha3NlcyAgICAgICAgICAgICAgIHwgKipUaW5nZ2kqKiAgICAgICAgfCBDZXBhdCBkYW4gbXVkYWggZGlsYWt1a2FuICAgICAgICAgICAgIHwgVGlkYWsgcmVwcmVzZW50YXRpZiwgaGFueWEgbWV3YWtpbGkga2Vsb21wb2sgdGVydGVudHUgfAp8ICoqUHVycG9zaXZlIFNhbXBsaW5nKiogICAgIHwgTWVtaWxpaCBzYW1wZWwgYmVyZGFzYXJrYW4ga2FyYWt0ZXJpc3RpayB0ZXJ0ZW50dSAgICAgIHwgKipUaW5nZ2kqKiAgICAgICAgfCBCaXNhIGZva3VzIHBhZGEga2Vsb21wb2sgc3Blc2lmaWsgICAgIHwgVGlkYWsgYmlzYSBkaWdlbmVyYWxpc2FzaSBrZSBwb3B1bGFzaSBsdWFzIHwKfCAqKlNub3diYWxsIFNhbXBsaW5nKiogICAgICB8IFJlc3BvbmRlbiBwZXJ0YW1hIG1lcmVrcnV0IHJlc3BvbmRlbiBsYWluICAgICAgICAgICAgIHwgKipTYW5nYXQgVGluZ2dpKiogfCBCZXJndW5hIHVudHVrIHBvcHVsYXNpIHlhbmcgc3VsaXQgZGl0ZW11a2FuIHwgQmlhcyB0aW5nZ2kga2FyZW5hIHJlc3BvbmRlbiBzYWxpbmcgbWVyZWtvbWVuZGFzaWthbiB0ZW1hbiBkZW5nYW4ga2FyYWt0ZXJpc3RpayB5YW5nIHNhbWEgfAp8ICoqUXVvdGEgU2FtcGxpbmcqKiAgICAgICAgIHwgTWVtaWxpaCBzYW1wZWwgaGluZ2dhIGt1b3RhIHRlcnRlbnR1IHRlcnBlbnVoaSAgICAgICAgfCAqKlRpbmdnaSoqICAgICAgICB8IE1lbWFzdGlrYW4gcmVwcmVzZW50YXNpIHByb3BvcnNpb25hbCB8IFRpZGFrIGFjYWssIGJpc2EgbWVueWViYWJrYW4gYmlhcyBkYWxhbSBzZWxla3NpIHwKCiMjIyAqKkFuYWxpc2lzKiogIAoxLiAqKlNub3diYWxsIFNhbXBsaW5nIG1lbWlsaWtpIHRpbmdrYXQgYmlhcyB0ZXJ0aW5nZ2kqKiBrYXJlbmEgcmVzcG9uZGVuIGNlbmRlcnVuZyBtZXJla3J1dCBpbmRpdmlkdSB5YW5nIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsgc2VydXBhIGRlbmdhbiBtZXJla2EuICAKMi4gKipDb252ZW5pZW5jZSBTYW1wbGluZyBqdWdhIHNhbmdhdCBiaWFzKioga2FyZW5hIGhhbnlhIG1lbmdhbmRhbGthbiBpbmRpdmlkdSB5YW5nIG11ZGFoIGRpYWtzZXMsIHNlaGluZ2dhIHRpZGFrIG1lbmNlcm1pbmthbiBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uICAKMy4gKipRdW90YSBTYW1wbGluZyBtZW1pbGlraSBiaWFzIHlhbmcgbGViaWggcmVuZGFoIGRpYmFuZGluZ2thbiBDb252ZW5pZW5jZSBkYW4gU25vd2JhbGwgU2FtcGxpbmcqKiwgdGV0YXBpIHRldGFwIHRpZGFrIHNlYWt1cmF0IFByb2JhYmlsaXR5IFNhbXBsaW5nLiAgCgoKIyMgKio1LjQgS2VzaW1wdWxhbiBkYXJpIFBlcmJhbmRpbmdhbiBNZXRvZGUgU2FtcGxpbmcqKiAgCgpCZXJkYXNhcmthbiBoYXNpbCBwZXJiYW5kaW5nYW4gZGkgYXRhcywgZGFwYXQgZGlzaW1wdWxrYW4gYmFod2E6ICAKCjEuICoqUHJvYmFiaWxpdHkgU2FtcGxpbmcgbGViaWggYWt1cmF0IGRpYmFuZGluZ2thbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiBrYXJlbmEgbWVtaWxpa2kgKiptYXJnaW4gb2YgZXJyb3IgeWFuZyBsZWJpaCBrZWNpbCBkYW4gYmlhcyB5YW5nIGxlYmloIHJlbmRhaCoqLiAgCjIuICoqU3RyYXRpZmllZCBTYW1wbGluZyBhZGFsYWggbWV0b2RlIHRlcmJhaWsgZGFsYW0gUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiwga2FyZW5hIG1lbXBlcnRpbWJhbmdrYW4ga2FyYWt0ZXJpc3RpayBwb3B1bGFzaSBkYW4gbWVtaWxpa2kgKiptYXJnaW4gb2YgZXJyb3IgdGVya2VjaWwgKDAuMzQ1IGphbSkqKi4gIAozLiAqKkNsdXN0ZXIgU2FtcGxpbmcgbWVtaWxpa2kgbWFyZ2luIG9mIGVycm9yIHRlcmJlc2FyICgwLjM3NCBqYW0pKiogZGFsYW0gUHJvYmFiaWxpdHkgU2FtcGxpbmcsIHlhbmcgbWVudW5qdWtrYW4gKiprdXJhbmcgYWt1cmF0IGppa2EgaGFueWEgc2F0dSBrZWxvbXBvayB5YW5nIGRpcGlsaWgqKi4gIAo0LiAqKk5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZyBtZW1pbGlraSBiaWFzIHlhbmcgdGluZ2dpKiosIHRlcnV0YW1hIHBhZGEgKipTbm93YmFsbCBkYW4gQ29udmVuaWVuY2UgU2FtcGxpbmcqKiwgeWFuZyAqKnBhbGluZyByZW50YW4gdGVyaGFkYXAgYmlhcyoqLiAgCjUuICoqSmlrYSBtZW11bmdraW5rYW4sIHBlbmVsaXRpYW4gc2ViYWlrbnlhIG1lbmdndW5ha2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nKiogYWdhciBoYXNpbG55YSBsZWJpaCBha3VyYXQgZGFuIGRhcGF0IGRpZ2VuZXJhbGlzYXNpIGtlIHBvcHVsYXNpIHlhbmcgbGViaWggbHVhcy4gIAo2LiAqKkppa2EgUHJvYmFiaWxpdHkgU2FtcGxpbmcgdGlkYWsgYmlzYSBkaXRlcmFwa2FuKiosIG1ha2EgKipRdW90YSBTYW1wbGluZyBhZGFsYWggcGlsaWhhbiB0ZXJiYWlrIGRhbGFtIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZyoqLCBrYXJlbmEgbWVtYmVyaWthbiB0aW5na2F0IHJlcHJlc2VudGFzaSB5YW5nIGxlYmloIGJhaWsgZGliYW5kaW5na2FuIG1ldG9kZSBsYWluIGRhbGFtIGthdGVnb3JpIHlhbmcgc2FtYS4gIAoKRGFyaSBoYXNpbCBwZXJiYW5kaW5nYW4gaW5pLCAqKlN0cmF0aWZpZWQgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSB5YW5nIHBhbGluZyBkaXJla29tZW5kYXNpa2FuIHVudHVrIHBlbmVsaXRpYW4gaW5pKioga2FyZW5hIG1lbWJlcmlrYW4ga2VzZWltYmFuZ2FuIHRlcmJhaWsgYW50YXJhICoqYWt1cmFzaSwgbWFyZ2luIG9mIGVycm9yIHlhbmcgcmVuZGFoLCBkYW4gcmVwcmVzZW50YXRpdml0YXMgcG9wdWxhc2kqKi4KCi0tLQoKIyA2LiBVa3VyYW4gU2FtcGVsIHlhbmcgRGlwZXJsdWthbiB1bnR1ayBNb0UgPSA1JQpLaXRhIGluZ2luIHRhaHUgKipiZXJhcGEgYmFueWFrIG1haGFzaXN3YSB5YW5nIGhhcnVzIGtpdGEgc3VydmVpKiogc3VwYXlhIGhhc2lsIHBlbmVsaXRpYW4gdGVudGFuZyB3YWt0dSB0aWR1ciBtZXJla2EgKip0aWRhayBtZWxlc2V0IGxlYmloIGRhcmkgNSUqKi4gIAoKRGFyaSBkYXRhIHlhbmcga2l0YSBwdW55YTogIAotICoqVG90YWwgbWFoYXNpc3dhKio6IDMwMCBvcmFuZyAgCi0gKipSYXRhLXJhdGEgd2FrdHUgdGlkdXIqKjogNC41MSBqYW0gIAotICoqU2ltcGFuZ2FuIGJha3UqKiAoc2ViZXJhcGEgYmVydmFyaWFzaSB3YWt0dSB0aWR1ciBtZXJla2EpOiAxLjg0IGphbSAgCi0gKipCYXRhcyBrZXNhbGFoYW4gbWFrc2ltYWwgKE1hcmdpbiBvZiBFcnJvciAvIE1vRSkqKjogMC4yMyBqYW0gKGthcmVuYSA1JSBkYXJpIDQuNTEgamFtKSAgCgojIyA2LjEgKipMYW5na2FoIFBlcmhpdHVuZ2FuKiogIAojIyMgNi4xLjEuIEtpdGEgcGFrYWkgcnVtdXMgdW50dWsgbWVuZ2hpdHVuZyBqdW1sYWggc2FtcGVsIHN1cGF5YSBNb0UgdGlkYWsgbGViaWggZGFyaSAwLjIzIGphbTogIAoKICAgXFsKICAgTW9FID0gWiBcdGltZXMgXGZyYWN7XHNpZ21hfXtcc3FydHtufX0KICAgXF0KCiAgIC0gKipaID0gMS45NioqIChhbmdrYSBzdGFuZGFyIHVudHVrIHBlbmVsaXRpYW4gZGVuZ2FuIGtlcGVyY2F5YWFuIDk1JSkgIAogICAtICoqXChcc2lnbWFcKSA9IDEuODQqKiAoc2ltcGFuZ2FuIGJha3UpICAKICAgLSAqKlwoXHNxcnR7bn1cKSBhZGFsYWggYWthciBkYXJpIGp1bWxhaCBzYW1wZWwgeWFuZyBraXRhIGNhcmkqKiAgCgojIyMgNi4xLjIuIFNldGVsYWggZGloaXR1bmcsIGhhc2lsbnlhIG1lbnVuanVra2FuIGJhaHdhICoqa2l0YSBidXR1aCBtaW5pbWFsIDI0NiBtYWhhc2lzd2EgZGFsYW0gc3VydmVpIGluaSoqIHN1cGF5YSBoYXNpbG55YSBjdWt1cCBha3VyYXQgZGFuIHRpZGFrIG1lbGVzZXQgbGViaWggZGFyaSA1JS4gIAoKIyMgNi4yICoqS2VuYXBhIEhhcnVzIDI0Nj8qKiAgCi0gS2FsYXUga2l0YSBhbWJpbCAqKmt1cmFuZyBkYXJpIDI0NiBvcmFuZyoqLCBoYXNpbG55YSBiaXNhIGxlYmloIG1lbGVzZXQgZGFuIGt1cmFuZyBha3VyYXQuICAKLSBLYWxhdSBraXRhIGFtYmlsICoqbGViaWggZGFyaSAyNDYgb3JhbmcqKiwgaGFzaWxueWEgbWFraW4gYWt1cmF0LCB0YXBpIGxlYmloIGxhbWEgZGFuIGxlYmloIG1haGFsIHVudHVrIGRpbGFrdWthbi4gIAoKSmFkaSxhZ2FyIGhhc2lsIHBlbmVsaXRpYW4gaW5pICoqY3VrdXAgYWt1cmF0IGRhbiB0aWRhayBtZWxlc2V0IGxlYmloIGRhcmkgNSUqKiwga2l0YSAqKmhhcnVzIHN1cnZlaSBtaW5pbWFsIDI0NiBtYWhhc2lzd2EqKi4KCi0tLQoKIyA3LiBLZXNpbXB1bGFuIGRhbiBSZWtvbWVuZGFzaQpEYWxhbSBsYXBvcmFuIHByYWt0aWt1bSBpbmksIGthbWkgdGVsYWggbWVsYWt1a2FuIGFuYWxpc2lzIG1lbmRhbGFtIG1lbmdlbmFpIG1ldG9kZSBzYW1wbGluZyBkYW4gbWFyZ2luIG9mIGVycm9yIChNb0UpIGRhbGFtIHBlbmVsaXRpYW4gc3RhdGlzdGlrLCBraHVzdXNueWEgZGFsYW0ga29udGVrcyB3YWt0dSB0aWR1ciBtYWhhc2lzd2EgZGkgc2VidWFoIHVuaXZlcnNpdGFzIGRlbmdhbiBwb3B1bGFzaSAzMDAgbWFoYXNpc3dhLiBCZXJpa3V0IGFkYWxhaCBrZXNpbXB1bGFuIGRhbiByZWtvbWVuZGFzaSBiZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcyB5YW5nIHRlbGFoIGRpbGFrdWthbjoKCiMjIDcuMSBLZXNpbXB1bGFuCgoxLiAqKkxhdGFyIEJlbGFrYW5nIGRhbiBUdWp1YW4qKjogUGVuZWxpdGlhbiBpbmkgZGlsYXRhcmJlbGFrYW5naSBvbGVoIGtldGVyYmF0YXNhbiBkYWxhbSBtZW5ndW1wdWxrYW4gZGF0YSBkYXJpIHNlbHVydWggcG9wdWxhc2ksIHNlaGluZ2dhIG1ldG9kZSBzYW1wbGluZyBtZW5qYWRpIHBlbnRpbmcgdW50dWsgbWVuZGFwYXRrYW4gZGF0YSB5YW5nIHJlcHJlc2VudGF0aWYuIFR1anVhbiBwcmFrdGlrdW0gaW5pIGFkYWxhaCB1bnR1ayBtZW1wZWxhamFyaSBiZXJiYWdhaSBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsLCBtZW5naGl0dW5nIE1vRSwgbWVuZ2FuYWxpc2lzIGJpYXMsIGRhbiBtZW5lbnR1a2FuIHVrdXJhbiBzYW1wZWwgeWFuZyBkaXBlcmx1a2FuLgoKMi4gKipNZXRvZGUgU2FtcGxpbmcqKjogS2FtaSB0ZWxhaCBtZW5nZWtzcGxvcmFzaSBkdWEga2F0ZWdvcmkgdXRhbWEgbWV0b2RlIHNhbXBsaW5nOiAKICAgLSAqKlByb2JhYmlsaXR5IFNhbXBsaW5nKiogKFNpbXBsZSBSYW5kb20sIFN0cmF0aWZpZWQsIFN5c3RlbWF0aWMsIENsdXN0ZXIpIHlhbmcgbWVtYmVyaWthbiBwZWx1YW5nIHlhbmcgc2FtYSBiYWdpIHNldGlhcCBpbmRpdmlkdSB1bnR1ayB0ZXJwaWxpaCwgZGFuIAogICAtICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKiogKENvbnZlbmllbmNlLCBQdXJwb3NpdmUsIFNub3diYWxsLCBRdW90YSkgeWFuZyB0aWRhayBtZW1iZXJpa2FuIHBlbHVhbmcgeWFuZyBzYW1hLCBzZWhpbmdnYSBiZXJwb3RlbnNpIG1lbmdoYXNpbGthbiBiaWFzLgoKMy4gKipNYXJnaW4gb2YgRXJyb3IgKE1vRSkqKjogUGVyaGl0dW5nYW4gTW9FIG1lbnVuanVra2FuIGJhaHdhIG1ldG9kZSAqKlN0cmF0aWZpZWQgU2FtcGxpbmcqKiBtZW1pbGlraSBNb0UgdGVya2VjaWwgKDAuMzQ1IGphbSksIG1lbmphZGlrYW5ueWEgbWV0b2RlIHlhbmcgcGFsaW5nIGFrdXJhdCBkYWxhbSBtZW5nZ2FtYmFya2FuIHBvcHVsYXNpLiBTZWJhbGlrbnlhLCAqKkNsdXN0ZXIgU2FtcGxpbmcqKiBtZW1pbGlraSBNb0UgdGVyYmVzYXIgKDAuMzc0IGphbSksIG1lbnVuanVra2FuIHBvdGVuc2kgYmlhcyB5YW5nIGxlYmloIHRpbmdnaS4KCjQuICoqQW5hbGlzaXMgQmlhcyoqOiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgY2VuZGVydW5nIG1lbWlsaWtpIGJpYXMgeWFuZyBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nLiBNZXRvZGUgc2VwZXJ0aSAqKkNvbnZlbmllbmNlIFNhbXBsaW5nKiogZGFuICoqU25vd2JhbGwgU2FtcGxpbmcqKiBzYW5nYXQgcmVudGFuIHRlcmhhZGFwIGJpYXMsIHlhbmcgZGFwYXQgbWVuZ2FraWJhdGthbiBoYXNpbCB5YW5nIHRpZGFrIHJlcHJlc2VudGF0aWYuCgo1LiAqKlVrdXJhbiBTYW1wZWwgdW50dWsgTW9FIOKJpCA1JSoqOiBVbnR1ayBtZW5jYXBhaSBNb0UgdGlkYWsgbGViaWggZGFyaSA1JSwgZGlwZXJsdWthbiBtaW5pbWFsIDI0NiBtYWhhc2lzd2EgZGFsYW0gc3VydmVpIGluaS4gSW5pIG1lbnVuanVra2FuIHBlbnRpbmdueWEgdWt1cmFuIHNhbXBlbCB5YW5nIG1lbWFkYWkgdW50dWsgbWVtYXN0aWthbiBha3VyYXNpIGhhc2lsIHBlbmVsaXRpYW4uCgojIyA3LjIgUmVrb21lbmRhc2kKCjEuICoqUGVuZ2d1bmFhbiBQcm9iYWJpbGl0eSBTYW1wbGluZyoqOiBEaXNhcmFua2FuIHVudHVrIG1lbmdndW5ha2FuIG1ldG9kZSBQcm9iYWJpbGl0eSBTYW1wbGluZywga2h1c3VzbnlhICoqU3RyYXRpZmllZCBTYW1wbGluZyoqLCBkYWxhbSBwZW5lbGl0aWFuIHlhbmcgbWVtZXJsdWthbiByZXByZXNlbnRhdGl2aXRhcyB0aW5nZ2kuIE1ldG9kZSBpbmkgbWFtcHUgbWVtYmVyaWthbiBlc3RpbWFzaSB5YW5nIGxlYmloIGFrdXJhdCBkZW5nYW4gTW9FIHlhbmcgbGViaWgga2VjaWwuCgoyLiAqKkhpbmRhcmkgTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKio6IEppa2EgbWVtdW5na2lua2FuLCBoaW5kYXJpIHBlbmdndW5hYW4gTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nLCB0ZXJ1dGFtYSBkYWxhbSBwZW5lbGl0aWFuIHlhbmcgbWVtZXJsdWthbiBnZW5lcmFsaXNhc2kgaGFzaWwuIEppa2EgaGFydXMgZGlndW5ha2FuLCBwaWxpaGxhaCBtZXRvZGUgc2VwZXJ0aSAqKlF1b3RhIFNhbXBsaW5nKiogeWFuZyBsZWJpaCBiYWlrIGRhbGFtIGhhbCByZXByZXNlbnRhdGl2aXRhcyBkaWJhbmRpbmdrYW4gbWV0b2RlIG5vbi1hY2FrIGxhaW5ueWEuCgozLiAqKlBlcmVuY2FuYWFuIFVrdXJhbiBTYW1wZWwqKjogRGFsYW0gcGVyZW5jYW5hYW4gcGVuZWxpdGlhbiwgcGVudGluZyB1bnR1ayBtZW5naGl0dW5nIHVrdXJhbiBzYW1wZWwgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNhcGFpIE1vRSB5YW5nIGRpaW5naW5rYW4uIFBhc3Rpa2FuIHVudHVrIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFiaWxpdGFzIGRhbGFtIHBvcHVsYXNpIHNhYXQgbWVuZW50dWthbiB1a3VyYW4gc2FtcGVsLgoKNC4gKipFdmFsdWFzaSBkYW4gVmFsaWRhc2kqKjogTGFrdWthbiBldmFsdWFzaSBkYW4gdmFsaWRhc2kgdGVyaGFkYXAgaGFzaWwgcGVuZWxpdGlhbiB1bnR1ayBtZW1hc3Rpa2FuIGJhaHdhIGRhdGEgeWFuZyBkaXBlcm9sZWggZGFwYXQgZGlnZW5lcmFsaXNhc2kga2UgcG9wdWxhc2kgeWFuZyBsZWJpaCBsdWFzLiBJbmkgZGFwYXQgZGlsYWt1a2FuIGRlbmdhbiBtZW1iYW5kaW5na2FuIGhhc2lsIGRhcmkgYmVyYmFnYWkgbWV0b2RlIHNhbXBsaW5nLgoKRGVuZ2FuIG1lbmdpa3V0aSByZWtvbWVuZGFzaSBpbmksIGRpaGFyYXBrYW4gcGVuZWxpdGlhbiBkaSBtYXNhIG1lbmRhdGFuZyBkYXBhdCBtZW5naGFzaWxrYW4gZGF0YSB5YW5nIGxlYmloIGFrdXJhdCBkYW4gcmVwcmVzZW50YXRpZiwgc2VydGEgbWVtYmVyaWthbiB3YXdhc2FuIHlhbmcgbGViaWggYmFpayBtZW5nZW5haSBmZW5vbWVuYSB5YW5nIGRpdGVsaXRpLgoKIyMgOC5SZWZlcmVuc2kKCjEuICoqU2lyZWdhciwgQi4gKG4uZC4pLioqICpNYXJnaW4gb2YgRXJyb3IuKiBkYXJpIFtodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc2FtcGxpbmdfYW5kX3N1cnZleV90ZWNobmlxdWVzL2RvY3MvMDQtTWFyZ2luLW9mLUVycm9yLmh0bWwjcmVhbC13b3JsZC1leGFtcGxlc10oaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3NhbXBsaW5nX2FuZF9zdXJ2ZXlfdGVjaG5pcXVlcy9kb2NzLzA0LU1hcmdpbi1vZi1FcnJvci5odG1sI3JlYWwtd29ybGQtZXhhbXBsZXMpICAKCjIuICoqQWNjdXJhdGUuSUQuIChuLmQuKS4qKiAqTWFyZ2luIG9mIEVycm9yOiBQZW5nZXJ0aWFuLCBGdW5nc2ksIGRhbiBDYXJhIE1lbmdoaXR1bmdueWEuKiBkYXJpIFtodHRwczovL2FjY3VyYXRlLmlkL21hcmtldGluZy1tYW5hamVtZW4vbWFyZ2luLW9mLWVycm9yL10oaHR0cHM6Ly9hY2N1cmF0ZS5pZC9tYXJrZXRpbmctbWFuYWplbWVuL21hcmdpbi1vZi1lcnJvci8pICAKCjMuICoqU3VydmV5TW9ua2V5LiAobi5kLikuKiogKk1hcmdpbiBvZiBFcnJvciBDYWxjdWxhdG9yLiogZGFyaSBbaHR0cHM6Ly93d3cuc3VydmV5bW9ua2V5LmNvbS9tcC9tYXJnaW4tb2YtZXJyb3ItY2FsY3VsYXRvci9dKGh0dHBzOi8vd3d3LnN1cnZleW1vbmtleS5jb20vbXAvbWFyZ2luLW9mLWVycm9yLWNhbGN1bGF0b3IvKSAgCgo0LiAqKkxlbWJhZ2EgUGVuZWxpdGlhbiBkYW4gUGVuZ2FiZGlhbiBrZXBhZGEgTWFzeWFyYWthdCAoTFAyTSkgVU1BLiAoMjAyMiwgSmFudWFyeSAyNykuKiogKkFwYSBJdHUgTWFyZ2luIEVycm9yPyBQZW5nZXJ0aWFuLCBQZXJoaXR1bmdhbiwgZGVuZ2FuIENvbnRvaC4qIGRhcmkgW2h0dHBzOi8vbHAybS51bWEuYWMuaWQvMjAyMi8wMS8yNy9hcGEtaXR1LW1hcmdpbi1lcnJvci1wZW5nZXJ0aWFuLXBlcmhpdHVuZ2FuLWRlbmdhbi1jb250b2gvXShodHRwczovL2xwMm0udW1hLmFjLmlkLzIwMjIvMDEvMjcvYXBhLWl0dS1tYXJnaW4tZXJyb3ItcGVuZ2VydGlhbi1wZXJoaXR1bmdhbi1kZW5nYW4tY29udG9oLykgIAo=