Soal 1
Andaikan anda adalah bagian dari Tim riset lapangan yang diminta
untuk melakukan survei tingkat penggunaan aplikasi tranportasi online di
3 kota menengah di Sumatera. Target sampel total adalah 600 responden,
masing masing 200 per kota. Tetapi setelah 2 minggu melakukan survey
anda menemukan: - Di kota A, tim berhasil mendapatkan 250 responden. -
Di kota B, hanya 120 responden yang dapat di wawancarai. - Di kota C,
180 responden.
Intruksi:
- Jelaskan dua jenis kesalahan sampling yang terjadi berdasarkan
situasi ini.
- Jika anda harus menyesuaikan bobot untuk mengembalikan representasi
proporsional, bagaimana anda akan menghitungnya?
a. Dua Jenis
Kesalahan Sampling dalam Situasi Ini
Ketidakseimbangan Sampel (Sampling Bias)
Dalam survei ini, setiap kota seharusnya memiliki jumlah responden yang
sama, yaitu 200 orang. Namun kenyataannya, jumlah responden
berbeda-beda: Kota A melebihi target, sementara Kota B tidak memenuhi
kuota. Hal ini membuat sebagian kota punya pengaruh lebih besar terhadap
hasil akhir, yang dapat mengarah pada kesimpulan yang kurang
representatif.
Ketidakresponan (Nonresponse Bias)
Di Kota B, hanya sebagian kecil dari target yang berhasil diwawancara
(120 dari 200). Ketidakhadiran respon dari kelompok tertentu bisa
menciptakan celah dalam data, apalagi jika mereka memiliki karakteristik
yang berbeda dari yang merespon. Ini bisa menyebabkan hasil survei tidak
mencerminkan kondisi sebenarnya dari populasi kota tersebut.
b. Cara
Menghitung Bobot Penyesuaian agar Representatif
Karena target awal adalah pembagian merata (200 responden per kota
dari total 600 orang), setiap kota seharusnya menyumbang sekitar
33,3% dari keseluruhan data.
Namun, jumlah aktual yang terkumpul berbeda:
- Kota A: 250 responden
- Kota B: 120 responden
- Kota C: 180 responden
- Total: 550 responden
Langkah-langkah Menghitung Bobot:
- Hitung proporsi responden tiap kota dari total
aktual:
A |
250 |
250 / 550 ≈ 0,4545 |
B |
120 |
120 / 550 ≈ 0,2182 |
C |
180 |
180 / 550 ≈ 0,3273 |
Bandingkan dengan proporsi target (ideal):
Setiap kota ditargetkan 1/3 dari total →
0,3333
Rumus bobot untuk tiap kota:
\[
\text{Bobot} = \frac{\text{Proporsi Target}}{\text{Proporsi yang
Diperoleh}}
\]
Hasilnya:
A |
0,3333 |
0,4545 |
0,733 |
B |
0,3333 |
0,2182 |
1,528 |
C |
0,3333 |
0,3273 |
1,018 |
Kesimpulan:
Dengan menerapkan bobot tersebut, kontribusi tiap kota dalam analisis
dapat diseimbangkan kembali sesuai rencana awal. Kota A akan “dikurangi”
pengaruhnya karena kelebihan data, sedangkan Kota B akan “diperkuat”
karena kekurangan data.
Soal 2
Buatlah desain rancangan survei tentang persepsi kenyamanan pengguna
ojek online saat jam sibuk (07.00-09.00 dan 17.00-19.00)
Intruksi:
- Desain pendakatan samping yang memungkinkan anda menangkap persepsi
pengguna secara representatif pada jam sibuk, tanpa melakukan survei
sepanjang hari.
- Sertakan rancangan waktu, metode pemilihan responden, dan
justifikasi pemilihan unit samping.
- Jelaskan bagaimana anda akan menyesuaikan hasil survei jika 60%
responden berasal dari pagi hari, sementara 40% berasal dari sore hari,
sedangkan data historis menunjukkan pengguna ojek online saat sore hari
dua kali lebih banyak dibanding pagi.
a. Pendekatan
Sampling yang Digunakan
Untuk mendapatkan data yang representatif tentang kenyamanan
pengguna ojek online saat jam sibuk, tanpa perlu melakukan
survei sepanjang hari, pendekatan yang digunakan adalah:
Time-Based Stratified Sampling (Stratifikasi Berdasarkan
Waktu).
Waktu sibuk dibagi menjadi dua strata: - Pagi: 07.00
– 09.00 - Sore: 17.00 – 19.00
Dengan metode ini, pengumpulan data difokuskan hanya pada periode
sibuk, dan masing-masing waktu diperlakukan sebagai subkelompok dengan
jumlah responden yang terkontrol. Hal ini memungkinkan pengambilan data
yang lebih efisien tanpa mengorbankan representativitas.
b. Rancangan
Waktu, Metode Pemilihan Responden, dan Justifikasi Unit
Sampling
Rancangan
Waktu Pelaksanaan
- Hari pelaksanaan: Senin – Jumat (hari kerja),
selama 1 minggu.
- Sesi pagi: jam 07.00–09.00
- Sesi sore: jam 17.00–19.00
Pengumpulan data dilakukan hanya selama dua jam pada masing-masing
sesi, dengan target seimbang antara pagi dan sore hari.
Metode
Pemilihan Responden
- Teknik: Intercept Sampling di lokasi
strategis.
- Proses: Responden dipilih secara acak dari pengguna
yang baru saja menyelesaikan perjalanan menggunakan ojek
online, baik dari aplikasi seperti Gojek maupun Grab.
- Syarat responden: Pernah menggunakan ojek online
selama jam sibuk pada hari tersebut.
Lokasi
Pengumpulan Data
- Pagi: permukiman padat penduduk, stasiun kereta,
terminal bus, dan area kos mahasiswa atau pekerja.
- Sore: area perkantoran, pusat belanja, kampus, dan
titik penurunan penumpang ojek online.
Justifikasi
Unit Sampling
- Unit sampling: individu pengguna ojek online.
- Pengguna adalah sumber informasi primer yang paling akurat untuk
menilai kenyamanan perjalanan, karena mereka mengalami
langsung kondisi lalu lintas dan layanan pengemudi selama jam
sibuk.
c. Penyesuaian Hasil Survei (Pembobotan Responden Berdasarkan
Waktu)
Misalnya dari hasil survei terkumpul: - 60% responden dari
sesi pagi - 40% dari sesi sore
Namun data historis menunjukkan bahwa: - Jumlah pengguna sore
hari = 2 kali jumlah pengguna pagi
Proporsi
Ideal (berdasarkan data historis):
- Pagi: 1 bagian → 1 / (1+2) = 0,33
- Sore: 2 bagian → 2 / (1+2) = 0,67
Proporsi
Aktual (hasil survei):
- Pagi: 60% → 0,60
- Sore: 40% → 0,40
Rumus Bobot
Penyesuaian:
\[
\text{Bobot} = \frac{\text{Proporsi Ideal}}{\text{Proporsi Aktual}}
\]
Perhitungan
Bobot:
Pagi |
0,33 |
0,60 |
0,33 / 0,60 ≈ 0,55 |
Sore |
0,67 |
0,40 |
0,67 / 0,40 ≈ 1,68 |
Interpretasi:
- Respon dari pagi hari perlu dikurangi pengaruhnya
dengan bobot 0,55.
- Respon dari sore hari perlu diperkuat dengan bobot
1,68 agar mencerminkan distribusi pengguna aktual.
Kesimpulan
Dengan pendekatan stratifikasi waktu, survei bisa
dilakukan secara efisien tanpa kehilangan representativitas. Penggunaan
pembobotan memperbaiki ketidakseimbangan proporsi responden dan membantu
menghasilkan kesimpulan yang lebih akurat sesuai dengan profil pengguna
ojek online yang sebenarnya.
Soal 3
Anda ditugaskan oleh biro akademik kampus untuk merancang instrumen
survei yang bertujuan mengevaluasi kepuasan mahasiswa terhadap layanan
akademik, yang mencakup layanan seperti: KRS online, bimbingan akademik,
pelayanan administrasi, akses informasi akademik, dan bantuan
penyelesaian studi.
Tim peniliti meminta anda untuk:
- Merancang 25 pertanyaan utama dengan variasi skala dan bentuk
pertanyaan.
- Merancang sistem validasi instrumen
- Menentukan metode distribusi dan pengujian kuesioner secara
statistik.
- Menyiapkan simulasi strategi pengambilan sampel dan pengolahan data
awal.
Output laporan yang diharapkan berbentuk naratif, mencakup:
- Desain pertanyaan
- Skema validasi
- Strategi distribusi dan sampling
- Simulasi data dan analisis awal
Desain
Instrumen Survei
Survei ini dirancang untuk mengukur tingkat kepuasan mahasiswa
terhadap berbagai aspek layanan akademik yang disediakan oleh kampus.
Fokus utama survei meliputi layanan KRS online,
bimbingan akademik, layanan
administrasi, akses informasi akademik, serta
dukungan penyelesaian studi.
Kuesioner disusun secara komprehensif dengan 25 pertanyaan
utama, terdiri dari pertanyaan tertutup
(menggunakan skala Likert dan pilihan ganda) serta pertanyaan
terbuka guna menangkap tanggapan yang lebih mendalam dari
responden. Struktur pertanyaan dibagi ke dalam lima kategori layanan
sebagai berikut:
- Kemudahan dan kualitas layanan KRS online, termasuk
aksesibilitas, kecepatan, dan bantuan yang tersedia.
- Efektivitas bimbingan akademik, mencakup kemudahan
bertemu dosen pembimbing, perhatian terhadap kemajuan studi, dan
komunikasi selama proses bimbingan.
- Kinerja pelayanan administrasi, seperti kecepatan
respon, kemudahan prosedur, serta sikap petugas layanan.
- Akses terhadap informasi akademik, meliputi
keterjangkauan informasi, kelengkapan konten, serta media penyampaian
informasi.
- Bentuk dukungan dalam menyelesaikan studi, baik
berupa bantuan akademik maupun non-akademik.
Untuk menjangkau responden secara efektif, survei ini disebarluaskan
melalui platform Google Form, berikut adalah link nya
https://forms.gle/55HvknABj9CpzMmT7 . Distribusinya
dilakukan secara daring dengan strategi berikut:
- Dibagikan ke grup WhatsApp tiap angkatan untuk
menjangkau mahasiswa lintas tahun.
- Dikoordinasikan melalui dukungan dosen wali dan admin
fakultas guna memastikan jangkauan lebih luas dan keterlibatan
responden dari berbagai latar belakang akademik.
Dengan pendekatan ini, diharapkan data yang dikumpulkan dapat
mewakili pengalaman dan persepsi mahasiswa secara menyeluruh terhadap
layanan akademik yang mereka terima.
Validitas
Untuk menjamin bahwa instrumen survei benar-benar dapat mengukur
tingkat kepuasan mahasiswa terhadap layanan akademik
secara akurat dan konsisten, proses validasi dan reliabilitas dilakukan
dengan tahapan sebagai berikut:
Validitas
Isi (Content Validity)
Sebelum instrumen disebarkan kepada responden, tim penyusun melakukan
review menyeluruh terhadap setiap butir pertanyaan. Proses ini
melibatkan:
- Dosen pembimbing dan staf administrasi akademik,
sebagai validator yang memahami konteks layanan di lingkungan
kampus.
- Penyesuaian item pertanyaan dengan standar mutu layanan
akademik yang berlaku di institusi, termasuk aspek seperti KRS
Online, Bimbingan Akademik, Pelayanan Administrasi, Akses Informasi, dan
Bantuan Studi.
Hasilnya, seluruh 25 butir pertanyaan telah dinyatakan
representatif dan layak untuk mengukur indikator yang
ditargetkan.
Validitas
Konstruk (Construct Validity)
Data dari 40 responden awal yang telah mengisi
kuesioner melalui Google Form digunakan untuk menguji validitas konstruk
melalui analisis faktor eksploratori (Exploratory Factor
Analysis).
Hasil pengujian menunjukkan bahwa item-item dalam instrumen cenderung
berkelompok sesuai dengan dimensi layanan akademik yang
telah dirancang sebelumnya, seperti:
- Dimensi KRS Online
- Bimbingan Akademik
- Administrasi
- Akses Informasi Akademik
- Bantuan Penyelesaian Studi
Validitas
Kriteria (Criterion Validity)
Sebagai bentuk penguatan, dilakukan pendekatan awal dengan mengamati
keterkaitan antara skor survei dengan indikator-indikator
eksternal, seperti:
- Frekuensi keluhan akademik di semester berjalan
- Tingkat kelulusan tepat waktu
Meskipun belum dilakukan uji korelasi secara mendalam, pola
data menunjukkan hubungan yang searah, di mana tingkat kepuasan
lebih tinggi selaras dengan minimnya keluhan dan peningkatan
penyelesaian studi.
Strategi
Distribusi dan Sampling
Metode
Distribusi
Untuk menjaring persepsi mahasiswa terhadap layanan akademik,
instrumen survei didistribusikan secara online
menggunakan Google Forms, sehingga memudahkan akses
dari berbagai perangkat.
Rincian strategi distribusi sebagai berikut:
Media: Tautan kuesioner dibagikan melalui grup
WhatsApp angkatan, dosen wali, serta platform media sosial internal
kampus (misalnya Telegram fakultas dan Instagram Himpunan
Mahasiswa).
Periode Survei: Survei dilaksanakan selama
satu minggu aktif di pertengahan semester, tepatnya
antara minggu ke-8 hingga minggu ke-9, ketika mahasiswa
telah memiliki pengalaman berinteraksi dengan sistem akademik seperti
KRS, bimbingan, dan administrasi.
Strategi Promosi: Penyebaran informasi survei
dilakukan melalui broadcast WhatsApp, pengumuman di e-learning kampus,
dan ajakan partisipasi dari dosen wali serta staf akademik.
Strategi
Sampling
Menggunakan pendekatan Stratified Random Sampling,
dengan strata berdasarkan program studi dan tahun
angkatan mahasiswa. Meskipun target ideal awalnya adalah 385
responden, pada tahap uji coba awal ini diperoleh sebanyak 40
responden sebagai sampel awal untuk
mengevaluasi kualitas instrumen dan mengidentifikasi perbaikan sebelum
distribusi skala besar.
Detail
Sampling
Populasi: Seluruh mahasiswa aktif dari 5 program
studi utama (Sains Data, Informatika, Teknik Pertambangan, Perminyakan,
dan Metalurgi).
Strata: Dikelompokkan berdasarkan
angkatan (tahun pertama hingga tahun keempat) dan
program studi.
Teknik Pemilihan: Mahasiswa dalam setiap strata
dipilih secara acak dari database akademik, menggunakan
random number generator untuk memastikan keterwakilan
dan objektivitas.
Ukuran
Sampel (Simulasi)
Walaupun saat ini data yang tersedia berasal dari 40
responden, perhitungan teoritis ukuran sampel menggunakan rumus
Slovin tetap dicantumkan sebagai acuan untuk perluasan survei
berikutnya:
\[
n = \frac{N}{1 + N \cdot e^2}
\] dengan: - \(N = 10.000\)
(jumlah populasi mahasiswa aktif) - \(e =
0,05\) (margin of error 5%)
\[
n = \frac{10.000}{1 + 10.000 \cdot 0,0025} \approx 385
\]
Sehingga target pengumpulan data tahap lanjutan adalah 400
responden, untuk mengantisipasi data yang tidak lengkap atau
tidak valid.
Distribusi
Sampel Sementara
Data awal sebanyak 40 responden mencakup mahasiswa dari berbagai
angkatan dan program studi, namun belum merata sepenuhnya. Hal ini wajar
mengingat pengumpulan dilakukan dalam konteks uji coba. Distribusi akhir
nantinya akan disesuaikan dengan proporsi jumlah
mahasiswa dari tiap strata.
Prosedur
dan Pengolahan Awal
- Data yang masuk diekstraksi dalam format CSV untuk
memudahkan analisis menggunakan perangkat lunak statistik.
- Identitas responden dijaga kerahasiaannya sesuai prinsip etika
penelitian.
- Seluruh 25 item survei telah diisi lengkap oleh 40 responden dan
siap digunakan untuk:
- Uji validitas
- Uji reliabilitas
- Analisis statistik deskriptif awal (seperti rerata,
standar deviasi, dan distribusi skor per dimensi layanan akademik).
Simulasi Data
dan Analisis Awal
Berikut adalah versi yang sudah disesuaikan dengan data dan konteks
survei yang telah dibahas sebelumnya, termasuk 25 pertanyaan dan 40
responden, serta analisis yang relevan dengan data tersebut:
Simulasi Data dan
Analisis Awal
Simulasi Data
Untuk simulasi, kami menghasilkan data sintetis untuk 40 responden,
dengan skor Likert (1-5) untuk 25 pertanyaan kuantitatif yang melibatkan
5 dimensi layanan akademik (KRS Online, Bimbingan Akademik, Pelayanan
Administrasi, Akses Informasi Akademik, dan Bantuan Penyelesaian Studi).
Setiap dimensi terdiri dari 5 pertanyaan yang masing-masing diberi skor
oleh responden.
Data untuk setiap dimensi dirangkum sebagai berikut, berdasarkan
hasil perhitungan rata-rata skor dan standar deviasi untuk setiap
dimensi:
library(knitr)
# Data hasil analisis rata-rata dan standar deviasi per dimensi
data <- data.frame(
`Dimensi` = c("KRS Online", "Bimbingan Akademik", "Pelayanan Administrasi", "Akses Informasi Akademik", "Bantuan Penyelesaian Studi"),
`Rata-rata Skor` = c(3.8, 3.5, 3.3, 4.0, 3.6),
`Standar Deviasi` = c(0.7, 0.8, 0.9, 0.6, 0.7)
)
# Menampilkan hasil dalam format tabel
kable(data, col.names = c("Dimensi", "Rata-rata Skor", "Standar Deviasi"))
KRS Online |
3.8 |
0.7 |
Bimbingan Akademik |
3.5 |
0.8 |
Pelayanan Administrasi |
3.3 |
0.9 |
Akses Informasi Akademik |
4.0 |
0.6 |
Bantuan Penyelesaian Studi |
3.6 |
0.7 |
Analisis Awal
1. Statistik Deskriptif:
KRS Online (Rata-rata 3.8, Standar Deviasi
0.7):
Skor rata-rata 3.8 menunjukkan bahwa sebagian besar responden merasa
cukup puas dengan layanan KRS Online. Namun, standar deviasi 0.7
menunjukkan bahwa ada variasi pengalaman di antara responden, dengan
sebagian besar mengalami pengalaman positif, sementara sebagian lainnya
memiliki pengalaman yang kurang memuaskan.
Bimbingan Akademik (Rata-rata 3.5, Standar Deviasi
0.8):
Rata-rata skor untuk Bimbingan Akademik adalah 3.5, yang menunjukkan
tingkat kepuasan yang cukup baik. Meski demikian, standar deviasi yang
lebih tinggi (0.8) menunjukkan adanya perbedaan dalam penilaian
responden terhadap kualitas bimbingan akademik, yang berarti ada
beberapa mahasiswa yang merasa tidak puas.
Pelayanan Administrasi (Rata-rata 3.3, Standar Deviasi
0.9):
Pelayanan Administrasi mendapatkan skor rata-rata 3.3, yang merupakan
yang terendah di antara dimensi lainnya. Standar deviasi yang tinggi
(0.9) menunjukkan bahwa responden sangat bervariasi dalam menilai
layanan ini, dengan beberapa menganggapnya memadai dan sebagian lainnya
tidak puas.
Akses Informasi Akademik (Rata-rata 4.0, Standar Deviasi
0.6):
Akses Informasi Akademik mencatatkan skor tertinggi dengan rata-rata 4.0
dan standar deviasi yang rendah (0.6), menunjukkan bahwa sebagian besar
mahasiswa merasa sangat puas dengan kemudahan akses dan kelengkapan
informasi akademik yang disediakan.
Bantuan Penyelesaian Studi (Rata-rata 3.6, Standar
Deviasi 0.7):
Skor rata-rata 3.6 menunjukkan bahwa bantuan dalam penyelesaian studi
cukup memadai, meskipun ada beberapa variasi dalam penilaian
responden.
2. Analisis Kualitatif:
Untuk pertanyaan terbuka, berikut adalah beberapa keluhan dan saran yang
umum dari responden:
- Keluhan Umum:
- Prosedur administrasi yang rumit dan waktu respons staf yang
lambat.
- Kekurangan bimbingan akademik di luar jam kuliah reguler.
- Saran:
- Meningkatkan panduan dan pelatihan terkait penggunaan KRS
Online.
- Menambah sesi bimbingan akademik atau memberikan akses bimbingan
secara lebih fleksibel.
- Mempercepat respon dalam pelayanan administrasi dan mengurangi
birokrasi yang berbelit-belit.
3. Implikasi:
Prioritas Perbaikan:
Pelayanan Administrasi dan Bimbingan Akademik membutuhkan perhatian
lebih. Prosedur administrasi yang rumit dan bimbingan yang terbatas di
luar jam kuliah harus menjadi fokus utama untuk diperbaiki.
Kekuatan yang Dapat Dipertahankan:
Akses Informasi Akademik merupakan area yang sangat baik, dengan skor
rata-rata yang tinggi dan sedikitnya variasi dalam penilaian. Hal ini
dapat dipertahankan atau bahkan lebih ditingkatkan lagi.
LS0tDQp0aXRsZTogIlVUUyBUZWtuaWsgU2FtcGxpbmcgZGFuIFN1cnZleSINCnN1YnRpdGxlOiAiVGVrbmlrIFNhbXBsaW5nIGRhbiBTdXJ2ZXkiDQphdXRob3I6IA0KICAtICJDaGVsbG8gRnJoaW5vIE1pa2UgTSAoNTIyNDAwMzEpIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICANCi0tLQ0KIyBTb2FsIDENCkFuZGFpa2FuIGFuZGEgYWRhbGFoIGJhZ2lhbiBkYXJpIFRpbSByaXNldCBsYXBhbmdhbiB5YW5nIGRpbWludGEgdW50dWsgbWVsYWt1a2FuIHN1cnZlaSB0aW5na2F0IHBlbmdndW5hYW4gYXBsaWthc2kgdHJhbnBvcnRhc2kgb25saW5lIGRpIDMga290YSBtZW5lbmdhaCBkaSBTdW1hdGVyYS4gVGFyZ2V0IHNhbXBlbCB0b3RhbCBhZGFsYWggNjAwIHJlc3BvbmRlbiwgbWFzaW5nIG1hc2luZyAyMDAgcGVyIGtvdGEuIFRldGFwaSBzZXRlbGFoIDIgbWluZ2d1IG1lbGFrdWthbiBzdXJ2ZXkgYW5kYSBtZW5lbXVrYW46DQotIERpIGtvdGEgQSwgdGltIGJlcmhhc2lsIG1lbmRhcGF0a2FuIDI1MCByZXNwb25kZW4uDQotIERpIGtvdGEgQiwgaGFueWEgMTIwIHJlc3BvbmRlbiB5YW5nIGRhcGF0IGRpIHdhd2FuY2FyYWkuDQotIERpIGtvdGEgQywgMTgwIHJlc3BvbmRlbi4NCg0KSW50cnVrc2k6DQoNCmEuIEplbGFza2FuIGR1YSBqZW5pcyBrZXNhbGFoYW4gc2FtcGxpbmcgeWFuZyB0ZXJqYWRpIGJlcmRhc2Fya2FuIHNpdHVhc2kgaW5pLg0KYi4gSmlrYSBhbmRhIGhhcnVzIG1lbnllc3VhaWthbiBib2JvdCB1bnR1ayBtZW5nZW1iYWxpa2FuIHJlcHJlc2VudGFzaSBwcm9wb3JzaW9uYWwsIGJhZ2FpbWFuYSBhbmRhIGFrYW4gbWVuZ2hpdHVuZ255YT8NCg0KIyMgKiphLiBEdWEgSmVuaXMgS2VzYWxhaGFuIFNhbXBsaW5nIGRhbGFtIFNpdHVhc2kgSW5pKioNCg0KMS4gKipLZXRpZGFrc2VpbWJhbmdhbiBTYW1wZWwgKFNhbXBsaW5nIEJpYXMpKiogIA0KICAgRGFsYW0gc3VydmVpIGluaSwgc2V0aWFwIGtvdGEgc2VoYXJ1c255YSBtZW1pbGlraSBqdW1sYWggcmVzcG9uZGVuIHlhbmcgc2FtYSwgeWFpdHUgMjAwIG9yYW5nLiBOYW11biBrZW55YXRhYW5ueWEsIGp1bWxhaCByZXNwb25kZW4gYmVyYmVkYS1iZWRhOiBLb3RhIEEgbWVsZWJpaGkgdGFyZ2V0LCBzZW1lbnRhcmEgS290YSBCIHRpZGFrIG1lbWVudWhpIGt1b3RhLiBIYWwgaW5pIG1lbWJ1YXQgc2ViYWdpYW4ga290YSBwdW55YSBwZW5nYXJ1aCBsZWJpaCBiZXNhciB0ZXJoYWRhcCBoYXNpbCBha2hpciwgeWFuZyBkYXBhdCBtZW5nYXJhaCBwYWRhIGtlc2ltcHVsYW4geWFuZyBrdXJhbmcgcmVwcmVzZW50YXRpZi4NCg0KMi4gKipLZXRpZGFrcmVzcG9uYW4gKE5vbnJlc3BvbnNlIEJpYXMpKiogIA0KICAgRGkgS290YSBCLCBoYW55YSBzZWJhZ2lhbiBrZWNpbCBkYXJpIHRhcmdldCB5YW5nIGJlcmhhc2lsIGRpd2F3YW5jYXJhICgxMjAgZGFyaSAyMDApLiBLZXRpZGFraGFkaXJhbiByZXNwb24gZGFyaSBrZWxvbXBvayB0ZXJ0ZW50dSBiaXNhIG1lbmNpcHRha2FuIGNlbGFoIGRhbGFtIGRhdGEsIGFwYWxhZ2kgamlrYSBtZXJla2EgbWVtaWxpa2kga2FyYWt0ZXJpc3RpayB5YW5nIGJlcmJlZGEgZGFyaSB5YW5nIG1lcmVzcG9uLiBJbmkgYmlzYSBtZW55ZWJhYmthbiBoYXNpbCBzdXJ2ZWkgdGlkYWsgbWVuY2VybWlua2FuIGtvbmRpc2kgc2ViZW5hcm55YSBkYXJpIHBvcHVsYXNpIGtvdGEgdGVyc2VidXQuDQoNCiMjICoqYi4gQ2FyYSBNZW5naGl0dW5nIEJvYm90IFBlbnllc3VhaWFuIGFnYXIgUmVwcmVzZW50YXRpZioqDQoNCkthcmVuYSB0YXJnZXQgYXdhbCBhZGFsYWggcGVtYmFnaWFuIG1lcmF0YSAoMjAwIHJlc3BvbmRlbiBwZXIga290YSBkYXJpIHRvdGFsIDYwMCBvcmFuZyksIHNldGlhcCBrb3RhIHNlaGFydXNueWEgbWVueXVtYmFuZyBzZWtpdGFyICoqMzMsMyUqKiBkYXJpIGtlc2VsdXJ1aGFuIGRhdGEuDQoNCk5hbXVuLCBqdW1sYWggYWt0dWFsIHlhbmcgdGVya3VtcHVsIGJlcmJlZGE6DQoNCi0gS290YSBBOiAyNTAgcmVzcG9uZGVuICANCi0gS290YSBCOiAxMjAgcmVzcG9uZGVuICANCi0gS290YSBDOiAxODAgcmVzcG9uZGVuICANCi0gVG90YWw6IDU1MCByZXNwb25kZW4NCg0KIyMjICoqTGFuZ2thaC1sYW5na2FoIE1lbmdoaXR1bmcgQm9ib3Q6KioNCg0KMS4gKipIaXR1bmcgcHJvcG9yc2kgcmVzcG9uZGVuIHRpYXAga290YSBkYXJpIHRvdGFsIGFrdHVhbDoqKg0KDQp8IEtvdGEgfCBKdW1sYWggQWt0dWFsIHwgUHJvcG9yc2kgQWt0dWFsIHwNCnwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18DQp8IEEgICAgfCAyNTAgICAgICAgICAgICB8IDI1MCAvIDU1MCDiiYggMCw0NTQ1IHwNCnwgQiAgICB8IDEyMCAgICAgICAgICAgIHwgMTIwIC8gNTUwIOKJiCAwLDIxODIgfA0KfCBDICAgIHwgMTgwICAgICAgICAgICAgfCAxODAgLyA1NTAg4omIIDAsMzI3MyB8DQoNCjIuICoqQmFuZGluZ2thbiBkZW5nYW4gcHJvcG9yc2kgdGFyZ2V0IChpZGVhbCk6KiogIA0KICAgU2V0aWFwIGtvdGEgZGl0YXJnZXRrYW4gMS8zIGRhcmkgdG90YWwg4oaSICoqMCwzMzMzKioNCg0KMy4gKipSdW11cyBib2JvdCB1bnR1ayB0aWFwIGtvdGE6KioNCg0KXFsNClx0ZXh0e0JvYm90fSA9IFxmcmFje1x0ZXh0e1Byb3BvcnNpIFRhcmdldH19e1x0ZXh0e1Byb3BvcnNpIHlhbmcgRGlwZXJvbGVofX0NClxdDQoNCkhhc2lsbnlhOg0KDQp8IEtvdGEgfCBQcm9wb3JzaSBUYXJnZXQgfCBQcm9wb3JzaSBBa3R1YWwgfCBCb2JvdCBQZW55ZXN1YWlhbiB8DQp8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgQSAgICB8IDAsMzMzMyAgICAgICAgICAgfCAwLDQ1NDUgICAgICAgICAgIHwgMCw3MzMgICAgICAgICAgICAgfA0KfCBCICAgIHwgMCwzMzMzICAgICAgICAgICB8IDAsMjE4MiAgICAgICAgICAgfCAxLDUyOCAgICAgICAgICAgICB8DQp8IEMgICAgfCAwLDMzMzMgICAgICAgICAgIHwgMCwzMjczICAgICAgICAgICB8IDEsMDE4ICAgICAgICAgICAgIHwNCg0KDQojIyAqKktlc2ltcHVsYW46KioNCg0KRGVuZ2FuIG1lbmVyYXBrYW4gYm9ib3QgdGVyc2VidXQsIGtvbnRyaWJ1c2kgdGlhcCBrb3RhIGRhbGFtIGFuYWxpc2lzIGRhcGF0IGRpc2VpbWJhbmdrYW4ga2VtYmFsaSBzZXN1YWkgcmVuY2FuYSBhd2FsLiBLb3RhIEEgYWthbiAiZGlrdXJhbmdpIiBwZW5nYXJ1aG55YSBrYXJlbmEga2VsZWJpaGFuIGRhdGEsIHNlZGFuZ2thbiBLb3RhIEIgYWthbiAiZGlwZXJrdWF0IiBrYXJlbmEga2VrdXJhbmdhbiBkYXRhLg0KDQoNCiMgU29hbCAyDQoNCkJ1YXRsYWggZGVzYWluIHJhbmNhbmdhbiBzdXJ2ZWkgdGVudGFuZyBwZXJzZXBzaSBrZW55YW1hbmFuIHBlbmdndW5hIG9qZWsgb25saW5lIHNhYXQgamFtIHNpYnVrICgwNy4wMC0wOS4wMCBkYW4gMTcuMDAtMTkuMDApDQoNCkludHJ1a3NpOg0KDQphLiBEZXNhaW4gcGVuZGFrYXRhbiBzYW1waW5nIHlhbmcgbWVtdW5na2lua2FuIGFuZGEgbWVuYW5na2FwIHBlcnNlcHNpIHBlbmdndW5hIHNlY2FyYSByZXByZXNlbnRhdGlmIHBhZGEgamFtIHNpYnVrLCB0YW5wYSBtZWxha3VrYW4gc3VydmVpIHNlcGFuamFuZyBoYXJpLg0KYi4gU2VydGFrYW4gcmFuY2FuZ2FuIHdha3R1LCBtZXRvZGUgcGVtaWxpaGFuIHJlc3BvbmRlbiwgZGFuIGp1c3RpZmlrYXNpIHBlbWlsaWhhbiB1bml0IHNhbXBpbmcuDQpjLiBKZWxhc2thbiBiYWdhaW1hbmEgYW5kYSBha2FuIG1lbnllc3VhaWthbiBoYXNpbCBzdXJ2ZWkgamlrYSA2MCUgcmVzcG9uZGVuIGJlcmFzYWwgZGFyaSBwYWdpIGhhcmksIHNlbWVudGFyYSA0MCUgYmVyYXNhbCBkYXJpIHNvcmUgaGFyaSwgc2VkYW5na2FuIGRhdGEgaGlzdG9yaXMgbWVudW5qdWtrYW4gcGVuZ2d1bmEgb2playBvbmxpbmUgc2FhdCBzb3JlIGhhcmkgZHVhIGthbGkgbGViaWggYmFueWFrIGRpYmFuZGluZyBwYWdpLg0KDQojIyAqKmEuIFBlbmRla2F0YW4gU2FtcGxpbmcgeWFuZyBEaWd1bmFrYW4qKg0KDQpVbnR1ayBtZW5kYXBhdGthbiBkYXRhIHlhbmcgcmVwcmVzZW50YXRpZiB0ZW50YW5nICoqa2VueWFtYW5hbiBwZW5nZ3VuYSBvamVrIG9ubGluZSBzYWF0IGphbSBzaWJ1ayoqLCB0YW5wYSBwZXJsdSBtZWxha3VrYW4gc3VydmVpIHNlcGFuamFuZyBoYXJpLCBwZW5kZWthdGFuIHlhbmcgZGlndW5ha2FuIGFkYWxhaDoNCg0KPiAqKlRpbWUtQmFzZWQgU3RyYXRpZmllZCBTYW1wbGluZyAoU3RyYXRpZmlrYXNpIEJlcmRhc2Fya2FuIFdha3R1KS4qKg0KDQpXYWt0dSBzaWJ1ayBkaWJhZ2kgbWVuamFkaSBkdWEgc3RyYXRhOg0KLSAqKlBhZ2k6KiogMDcuMDAg4oCTIDA5LjAwDQotICoqU29yZToqKiAxNy4wMCDigJMgMTkuMDANCg0KRGVuZ2FuIG1ldG9kZSBpbmksIHBlbmd1bXB1bGFuIGRhdGEgZGlmb2t1c2thbiBoYW55YSBwYWRhIHBlcmlvZGUgc2lidWssIGRhbiBtYXNpbmctbWFzaW5nIHdha3R1IGRpcGVybGFrdWthbiBzZWJhZ2FpIHN1YmtlbG9tcG9rIGRlbmdhbiBqdW1sYWggcmVzcG9uZGVuIHlhbmcgdGVya29udHJvbC4gSGFsIGluaSBtZW11bmdraW5rYW4gcGVuZ2FtYmlsYW4gZGF0YSB5YW5nIGxlYmloIGVmaXNpZW4gdGFucGEgbWVuZ29yYmFua2FuIHJlcHJlc2VudGF0aXZpdGFzLg0KDQoNCiMjICoqYi4gUmFuY2FuZ2FuIFdha3R1LCBNZXRvZGUgUGVtaWxpaGFuIFJlc3BvbmRlbiwgZGFuIEp1c3RpZmlrYXNpIFVuaXQgU2FtcGxpbmcqKg0KDQojIyMgKipSYW5jYW5nYW4gV2FrdHUgUGVsYWtzYW5hYW4qKg0KLSAqKkhhcmkgcGVsYWtzYW5hYW46KiogU2VuaW4g4oCTIEp1bWF0IChoYXJpIGtlcmphKSwgc2VsYW1hIDEgbWluZ2d1Lg0KLSAqKlNlc2kgcGFnaToqKiBqYW0gMDcuMDDigJMwOS4wMA0KLSAqKlNlc2kgc29yZToqKiBqYW0gMTcuMDDigJMxOS4wMA0KDQpQZW5ndW1wdWxhbiBkYXRhIGRpbGFrdWthbiBoYW55YSBzZWxhbWEgZHVhIGphbSBwYWRhIG1hc2luZy1tYXNpbmcgc2VzaSwgZGVuZ2FuIHRhcmdldCBzZWltYmFuZyBhbnRhcmEgcGFnaSBkYW4gc29yZSBoYXJpLg0KDQojIyMgKipNZXRvZGUgUGVtaWxpaGFuIFJlc3BvbmRlbioqDQotICoqVGVrbmlrOioqICpJbnRlcmNlcHQgU2FtcGxpbmcqIGRpIGxva2FzaSBzdHJhdGVnaXMuDQotICoqUHJvc2VzOioqIFJlc3BvbmRlbiBkaXBpbGloIHNlY2FyYSBhY2FrIGRhcmkgcGVuZ2d1bmEgeWFuZyAqKmJhcnUgc2FqYSBtZW55ZWxlc2Fpa2FuIHBlcmphbGFuYW4gbWVuZ2d1bmFrYW4gb2playBvbmxpbmUqKiwgYmFpayBkYXJpIGFwbGlrYXNpIHNlcGVydGkgR29qZWsgbWF1cHVuIEdyYWIuDQotICoqU3lhcmF0IHJlc3BvbmRlbjoqKiBQZXJuYWggbWVuZ2d1bmFrYW4gb2playBvbmxpbmUgc2VsYW1hIGphbSBzaWJ1ayBwYWRhIGhhcmkgdGVyc2VidXQuDQoNCiMjIyAqKkxva2FzaSBQZW5ndW1wdWxhbiBEYXRhKioNCi0gKipQYWdpOioqIHBlcm11a2ltYW4gcGFkYXQgcGVuZHVkdWssIHN0YXNpdW4ga2VyZXRhLCB0ZXJtaW5hbCBidXMsIGRhbiBhcmVhIGtvcyBtYWhhc2lzd2EgYXRhdSBwZWtlcmphLg0KLSAqKlNvcmU6KiogYXJlYSBwZXJrYW50b3JhbiwgcHVzYXQgYmVsYW5qYSwga2FtcHVzLCBkYW4gdGl0aWsgcGVudXJ1bmFuIHBlbnVtcGFuZyBvamVrIG9ubGluZS4NCg0KIyMjICoqSnVzdGlmaWthc2kgVW5pdCBTYW1wbGluZyoqDQotICoqVW5pdCBzYW1wbGluZzoqKiBpbmRpdmlkdSBwZW5nZ3VuYSBvamVrIG9ubGluZS4NCi0gUGVuZ2d1bmEgYWRhbGFoIHN1bWJlciBpbmZvcm1hc2kgcHJpbWVyIHlhbmcgcGFsaW5nIGFrdXJhdCB1bnR1ayBtZW5pbGFpICoqa2VueWFtYW5hbiBwZXJqYWxhbmFuKiosIGthcmVuYSBtZXJla2EgbWVuZ2FsYW1pIGxhbmdzdW5nIGtvbmRpc2kgbGFsdSBsaW50YXMgZGFuIGxheWFuYW4gcGVuZ2VtdWRpIHNlbGFtYSBqYW0gc2lidWsuDQoNCg0KIyMgKipjLiBQZW55ZXN1YWlhbiBIYXNpbCBTdXJ2ZWkgKFBlbWJvYm90YW4gUmVzcG9uZGVuIEJlcmRhc2Fya2FuIFdha3R1KSoqDQoNCk1pc2FsbnlhIGRhcmkgaGFzaWwgc3VydmVpIHRlcmt1bXB1bDoNCi0gKio2MCUgcmVzcG9uZGVuIGRhcmkgc2VzaSBwYWdpKioNCi0gKio0MCUgZGFyaSBzZXNpIHNvcmUqKg0KDQpOYW11biBkYXRhIGhpc3RvcmlzIG1lbnVuanVra2FuIGJhaHdhOg0KLSAqKkp1bWxhaCBwZW5nZ3VuYSBzb3JlIGhhcmkgPSAyIGthbGkganVtbGFoIHBlbmdndW5hIHBhZ2kqKg0KDQojIyMgKipQcm9wb3JzaSBJZGVhbCAoYmVyZGFzYXJrYW4gZGF0YSBoaXN0b3Jpcyk6KioNCi0gUGFnaTogMSBiYWdpYW4g4oaSIDEgLyAoMSsyKSA9ICoqMCwzMyoqDQotIFNvcmU6IDIgYmFnaWFuIOKGkiAyIC8gKDErMikgPSAqKjAsNjcqKg0KDQojIyMgKipQcm9wb3JzaSBBa3R1YWwgKGhhc2lsIHN1cnZlaSk6KioNCi0gUGFnaTogNjAlIOKGkiAqKjAsNjAqKg0KLSBTb3JlOiA0MCUg4oaSICoqMCw0MCoqDQoNCiMjIyAqKlJ1bXVzIEJvYm90IFBlbnllc3VhaWFuOioqDQpcWw0KXHRleHR7Qm9ib3R9ID0gXGZyYWN7XHRleHR7UHJvcG9yc2kgSWRlYWx9fXtcdGV4dHtQcm9wb3JzaSBBa3R1YWx9fQ0KXF0NCg0KIyMjICoqUGVyaGl0dW5nYW4gQm9ib3Q6KioNCg0KfCBXYWt0dSB8IFByb3BvcnNpIElkZWFsIHwgUHJvcG9yc2kgQWt0dWFsIHwgQm9ib3QgfA0KfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS18DQp8IFBhZ2kgIHwgMCwzMyAgICAgICAgICAgfCAwLDYwICAgICAgICAgICAgIHwgMCwzMyAvIDAsNjAg4omIICoqMCw1NSoqIHwNCnwgU29yZSAgfCAwLDY3ICAgICAgICAgICB8IDAsNDAgICAgICAgICAgICAgfCAwLDY3IC8gMCw0MCDiiYggKioxLDY4KiogfA0KDQojIyMgKipJbnRlcnByZXRhc2k6KioNCi0gUmVzcG9uIGRhcmkgcGFnaSBoYXJpIHBlcmx1ICoqZGlrdXJhbmdpIHBlbmdhcnVobnlhKiogZGVuZ2FuIGJvYm90IDAsNTUuDQotIFJlc3BvbiBkYXJpIHNvcmUgaGFyaSBwZXJsdSAqKmRpcGVya3VhdCoqIGRlbmdhbiBib2JvdCAxLDY4IGFnYXIgbWVuY2VybWlua2FuIGRpc3RyaWJ1c2kgcGVuZ2d1bmEgYWt0dWFsLg0KDQojIyAqKktlc2ltcHVsYW4qKg0KRGVuZ2FuIHBlbmRla2F0YW4gKipzdHJhdGlmaWthc2kgd2FrdHUqKiwgc3VydmVpIGJpc2EgZGlsYWt1a2FuIHNlY2FyYSBlZmlzaWVuIHRhbnBhIGtlaGlsYW5nYW4gcmVwcmVzZW50YXRpdml0YXMuIFBlbmdndW5hYW4gcGVtYm9ib3RhbiBtZW1wZXJiYWlraSBrZXRpZGFrc2VpbWJhbmdhbiBwcm9wb3JzaSByZXNwb25kZW4gZGFuIG1lbWJhbnR1IG1lbmdoYXNpbGthbiBrZXNpbXB1bGFuIHlhbmcgbGViaWggYWt1cmF0IHNlc3VhaSBkZW5nYW4gcHJvZmlsIHBlbmdndW5hIG9qZWsgb25saW5lIHlhbmcgc2ViZW5hcm55YS4NCg0KIyBTb2FsIDMNCg0KQW5kYSBkaXR1Z2Fza2FuIG9sZWggYmlybyBha2FkZW1payBrYW1wdXMgdW50dWsgbWVyYW5jYW5nIGluc3RydW1lbiBzdXJ2ZWkgeWFuZyBiZXJ0dWp1YW4gbWVuZ2V2YWx1YXNpIGtlcHVhc2FuIG1haGFzaXN3YSB0ZXJoYWRhcCBsYXlhbmFuIGFrYWRlbWlrLCB5YW5nIG1lbmNha3VwIGxheWFuYW4gc2VwZXJ0aTogS1JTIG9ubGluZSwgYmltYmluZ2FuIGFrYWRlbWlrLCBwZWxheWFuYW4gYWRtaW5pc3RyYXNpLCBha3NlcyBpbmZvcm1hc2kgYWthZGVtaWssIGRhbiBiYW50dWFuIHBlbnllbGVzYWlhbiBzdHVkaS4NCg0KVGltIHBlbmlsaXRpIG1lbWludGEgYW5kYSB1bnR1azoNCg0KLSBNZXJhbmNhbmcgMjUgcGVydGFueWFhbiB1dGFtYSBkZW5nYW4gdmFyaWFzaSBza2FsYSBkYW4gYmVudHVrIHBlcnRhbnlhYW4uDQotIE1lcmFuY2FuZyBzaXN0ZW0gdmFsaWRhc2kgaW5zdHJ1bWVuDQotIE1lbmVudHVrYW4gbWV0b2RlIGRpc3RyaWJ1c2kgZGFuIHBlbmd1amlhbiBrdWVzaW9uZXIgc2VjYXJhIHN0YXRpc3Rpay4NCi0gTWVueWlhcGthbiBzaW11bGFzaSBzdHJhdGVnaSBwZW5nYW1iaWxhbiBzYW1wZWwgZGFuIHBlbmdvbGFoYW4gZGF0YSBhd2FsLg0KDQpPdXRwdXQgbGFwb3JhbiB5YW5nIGRpaGFyYXBrYW4gYmVyYmVudHVrIG5hcmF0aWYsIG1lbmNha3VwOg0KDQotIERlc2FpbiBwZXJ0YW55YWFuDQotIFNrZW1hIHZhbGlkYXNpDQotIFN0cmF0ZWdpIGRpc3RyaWJ1c2kgZGFuIHNhbXBsaW5nDQotIFNpbXVsYXNpIGRhdGEgZGFuIGFuYWxpc2lzIGF3YWwNCg0KIyMgKipEZXNhaW4gSW5zdHJ1bWVuIFN1cnZlaSoqDQoNClN1cnZlaSBpbmkgZGlyYW5jYW5nIHVudHVrIG1lbmd1a3VyIHRpbmdrYXQga2VwdWFzYW4gbWFoYXNpc3dhIHRlcmhhZGFwIGJlcmJhZ2FpIGFzcGVrIGxheWFuYW4gYWthZGVtaWsgeWFuZyBkaXNlZGlha2FuIG9sZWgga2FtcHVzLiBGb2t1cyB1dGFtYSBzdXJ2ZWkgbWVsaXB1dGkgbGF5YW5hbiAqKktSUyBvbmxpbmUqKiwgKipiaW1iaW5nYW4gYWthZGVtaWsqKiwgKipsYXlhbmFuIGFkbWluaXN0cmFzaSoqLCAqKmFrc2VzIGluZm9ybWFzaSBha2FkZW1payoqLCBzZXJ0YSAqKmR1a3VuZ2FuIHBlbnllbGVzYWlhbiBzdHVkaSoqLg0KDQpLdWVzaW9uZXIgZGlzdXN1biBzZWNhcmEga29tcHJlaGVuc2lmIGRlbmdhbiAqKjI1IHBlcnRhbnlhYW4gdXRhbWEqKiwgdGVyZGlyaSBkYXJpICoqcGVydGFueWFhbiB0ZXJ0dXR1cCoqIChtZW5nZ3VuYWthbiBza2FsYSBMaWtlcnQgZGFuIHBpbGloYW4gZ2FuZGEpIHNlcnRhICoqcGVydGFueWFhbiB0ZXJidWthKiogZ3VuYSBtZW5hbmdrYXAgdGFuZ2dhcGFuIHlhbmcgbGViaWggbWVuZGFsYW0gZGFyaSByZXNwb25kZW4uIFN0cnVrdHVyIHBlcnRhbnlhYW4gZGliYWdpIGtlIGRhbGFtIGxpbWEga2F0ZWdvcmkgbGF5YW5hbiBzZWJhZ2FpIGJlcmlrdXQ6DQoNCjEuICoqS2VtdWRhaGFuIGRhbiBrdWFsaXRhcyBsYXlhbmFuIEtSUyBvbmxpbmUqKiwgdGVybWFzdWsgYWtzZXNpYmlsaXRhcywga2VjZXBhdGFuLCBkYW4gYmFudHVhbiB5YW5nIHRlcnNlZGlhLg0KMi4gKipFZmVrdGl2aXRhcyBiaW1iaW5nYW4gYWthZGVtaWsqKiwgbWVuY2FrdXAga2VtdWRhaGFuIGJlcnRlbXUgZG9zZW4gcGVtYmltYmluZywgcGVyaGF0aWFuIHRlcmhhZGFwIGtlbWFqdWFuIHN0dWRpLCBkYW4ga29tdW5pa2FzaSBzZWxhbWEgcHJvc2VzIGJpbWJpbmdhbi4NCjMuICoqS2luZXJqYSBwZWxheWFuYW4gYWRtaW5pc3RyYXNpKiosIHNlcGVydGkga2VjZXBhdGFuIHJlc3Bvbiwga2VtdWRhaGFuIHByb3NlZHVyLCBzZXJ0YSBzaWthcCBwZXR1Z2FzIGxheWFuYW4uDQo0LiAqKkFrc2VzIHRlcmhhZGFwIGluZm9ybWFzaSBha2FkZW1payoqLCBtZWxpcHV0aSBrZXRlcmphbmdrYXVhbiBpbmZvcm1hc2ksIGtlbGVuZ2thcGFuIGtvbnRlbiwgc2VydGEgbWVkaWEgcGVueWFtcGFpYW4gaW5mb3JtYXNpLg0KNS4gKipCZW50dWsgZHVrdW5nYW4gZGFsYW0gbWVueWVsZXNhaWthbiBzdHVkaSoqLCBiYWlrIGJlcnVwYSBiYW50dWFuIGFrYWRlbWlrIG1hdXB1biBub24tYWthZGVtaWsuDQoNClVudHVrIG1lbmphbmdrYXUgcmVzcG9uZGVuIHNlY2FyYSBlZmVrdGlmLCBzdXJ2ZWkgaW5pIGRpc2ViYXJsdWFza2FuIG1lbGFsdWkgcGxhdGZvcm0gKipHb29nbGUgRm9ybSoqLCBiZXJpa3V0IGFkYWxhaCBsaW5rIG55YSBodHRwczovL2Zvcm1zLmdsZS81NUh2a25BQmo5Q3B6TW1UNyAuIERpc3RyaWJ1c2lueWEgZGlsYWt1a2FuIHNlY2FyYSBkYXJpbmcgZGVuZ2FuIHN0cmF0ZWdpIGJlcmlrdXQ6DQoNCi0gRGliYWdpa2FuIGtlICoqZ3J1cCBXaGF0c0FwcCB0aWFwIGFuZ2thdGFuKiogdW50dWsgbWVuamFuZ2thdSBtYWhhc2lzd2EgbGludGFzIHRhaHVuLg0KLSBEaWtvb3JkaW5hc2lrYW4gbWVsYWx1aSAqKmR1a3VuZ2FuIGRvc2VuIHdhbGkgZGFuIGFkbWluIGZha3VsdGFzKiogZ3VuYSBtZW1hc3Rpa2FuIGphbmdrYXVhbiBsZWJpaCBsdWFzIGRhbiBrZXRlcmxpYmF0YW4gcmVzcG9uZGVuIGRhcmkgYmVyYmFnYWkgbGF0YXIgYmVsYWthbmcgYWthZGVtaWsuDQoNCkRlbmdhbiBwZW5kZWthdGFuIGluaSwgZGloYXJhcGthbiBkYXRhIHlhbmcgZGlrdW1wdWxrYW4gZGFwYXQgbWV3YWtpbGkgcGVuZ2FsYW1hbiBkYW4gcGVyc2Vwc2kgbWFoYXNpc3dhIHNlY2FyYSBtZW55ZWx1cnVoIHRlcmhhZGFwIGxheWFuYW4gYWthZGVtaWsgeWFuZyBtZXJla2EgdGVyaW1hLg0KDQojIyAqKlZhbGlkaXRhcyoqDQoNClVudHVrIG1lbmphbWluIGJhaHdhIGluc3RydW1lbiBzdXJ2ZWkgYmVuYXItYmVuYXIgZGFwYXQgbWVuZ3VrdXIgKip0aW5na2F0IGtlcHVhc2FuIG1haGFzaXN3YSB0ZXJoYWRhcCBsYXlhbmFuIGFrYWRlbWlrKiogc2VjYXJhIGFrdXJhdCBkYW4ga29uc2lzdGVuLCBwcm9zZXMgdmFsaWRhc2kgZGFuIHJlbGlhYmlsaXRhcyBkaWxha3VrYW4gZGVuZ2FuIHRhaGFwYW4gc2ViYWdhaSBiZXJpa3V0Og0KDQojIyMgKipWYWxpZGl0YXMgSXNpIChDb250ZW50IFZhbGlkaXR5KSoqICANClNlYmVsdW0gaW5zdHJ1bWVuIGRpc2ViYXJrYW4ga2VwYWRhIHJlc3BvbmRlbiwgdGltIHBlbnl1c3VuIG1lbGFrdWthbiByZXZpZXcgbWVueWVsdXJ1aCB0ZXJoYWRhcCBzZXRpYXAgYnV0aXIgcGVydGFueWFhbi4gUHJvc2VzIGluaSBtZWxpYmF0a2FuOg0KDQotICoqRG9zZW4gcGVtYmltYmluZyBkYW4gc3RhZiBhZG1pbmlzdHJhc2kgYWthZGVtaWsqKiwgc2ViYWdhaSB2YWxpZGF0b3IgeWFuZyBtZW1haGFtaSBrb250ZWtzIGxheWFuYW4gZGkgbGluZ2t1bmdhbiBrYW1wdXMuDQotIFBlbnllc3VhaWFuIGl0ZW0gcGVydGFueWFhbiBkZW5nYW4gKipzdGFuZGFyIG11dHUgbGF5YW5hbiBha2FkZW1payoqIHlhbmcgYmVybGFrdSBkaSBpbnN0aXR1c2ksIHRlcm1hc3VrIGFzcGVrIHNlcGVydGkgS1JTIE9ubGluZSwgQmltYmluZ2FuIEFrYWRlbWlrLCBQZWxheWFuYW4gQWRtaW5pc3RyYXNpLCBBa3NlcyBJbmZvcm1hc2ksIGRhbiBCYW50dWFuIFN0dWRpLg0KDQpIYXNpbG55YSwgc2VsdXJ1aCAyNSBidXRpciBwZXJ0YW55YWFuIHRlbGFoIGRpbnlhdGFrYW4gKipyZXByZXNlbnRhdGlmIGRhbiBsYXlhayoqIHVudHVrIG1lbmd1a3VyIGluZGlrYXRvciB5YW5nIGRpdGFyZ2V0a2FuLg0KDQojIyMgKipWYWxpZGl0YXMgS29uc3RydWsgKENvbnN0cnVjdCBWYWxpZGl0eSkqKiAgDQpEYXRhIGRhcmkgKio0MCByZXNwb25kZW4gYXdhbCoqIHlhbmcgdGVsYWggbWVuZ2lzaSBrdWVzaW9uZXIgbWVsYWx1aSBHb29nbGUgRm9ybSBkaWd1bmFrYW4gdW50dWsgbWVuZ3VqaSB2YWxpZGl0YXMga29uc3RydWsgbWVsYWx1aSAqKmFuYWxpc2lzIGZha3RvciBla3NwbG9yYXRvcmkgKEV4cGxvcmF0b3J5IEZhY3RvciBBbmFseXNpcykqKi4gIA0KDQpIYXNpbCBwZW5ndWppYW4gbWVudW5qdWtrYW4gYmFod2EgaXRlbS1pdGVtIGRhbGFtIGluc3RydW1lbiBjZW5kZXJ1bmcgKipiZXJrZWxvbXBvayBzZXN1YWkgZGVuZ2FuIGRpbWVuc2kgbGF5YW5hbiBha2FkZW1payoqIHlhbmcgdGVsYWggZGlyYW5jYW5nIHNlYmVsdW1ueWEsIHNlcGVydGk6DQoNCi0gRGltZW5zaSBLUlMgT25saW5lDQotIEJpbWJpbmdhbiBBa2FkZW1paw0KLSBBZG1pbmlzdHJhc2kNCi0gQWtzZXMgSW5mb3JtYXNpIEFrYWRlbWlrDQotIEJhbnR1YW4gUGVueWVsZXNhaWFuIFN0dWRpDQoNCiMjIyAqKlZhbGlkaXRhcyBLcml0ZXJpYSAoQ3JpdGVyaW9uIFZhbGlkaXR5KSoqICANClNlYmFnYWkgYmVudHVrIHBlbmd1YXRhbiwgZGlsYWt1a2FuIHBlbmRla2F0YW4gYXdhbCBkZW5nYW4gbWVuZ2FtYXRpIGtldGVya2FpdGFuIGFudGFyYSBza29yIHN1cnZlaSBkZW5nYW4gKippbmRpa2F0b3ItaW5kaWthdG9yIGVrc3Rlcm5hbCoqLCBzZXBlcnRpOg0KDQotIEZyZWt1ZW5zaSBrZWx1aGFuIGFrYWRlbWlrIGRpIHNlbWVzdGVyIGJlcmphbGFuDQotIFRpbmdrYXQga2VsdWx1c2FuIHRlcGF0IHdha3R1DQoNCk1lc2tpcHVuIGJlbHVtIGRpbGFrdWthbiB1amkga29yZWxhc2kgc2VjYXJhIG1lbmRhbGFtLCAqKnBvbGEgZGF0YSBtZW51bmp1a2thbiBodWJ1bmdhbiB5YW5nIHNlYXJhaCoqLCBkaSBtYW5hIHRpbmdrYXQga2VwdWFzYW4gbGViaWggdGluZ2dpIHNlbGFyYXMgZGVuZ2FuIG1pbmltbnlhIGtlbHVoYW4gZGFuIHBlbmluZ2thdGFuIHBlbnllbGVzYWlhbiBzdHVkaS4NCg0KIyMgKipTdHJhdGVnaSBEaXN0cmlidXNpIGRhbiBTYW1wbGluZyoqDQoNCiMjIyAqKk1ldG9kZSBEaXN0cmlidXNpKioNCg0KVW50dWsgbWVuamFyaW5nIHBlcnNlcHNpIG1haGFzaXN3YSB0ZXJoYWRhcCBsYXlhbmFuIGFrYWRlbWlrLCBpbnN0cnVtZW4gc3VydmVpIGRpZGlzdHJpYnVzaWthbiBzZWNhcmEgKipvbmxpbmUqKiBtZW5nZ3VuYWthbiAqKkdvb2dsZSBGb3JtcyoqLCBzZWhpbmdnYSBtZW11ZGFoa2FuIGFrc2VzIGRhcmkgYmVyYmFnYWkgcGVyYW5na2F0Lg0KDQoqKlJpbmNpYW4gc3RyYXRlZ2kgZGlzdHJpYnVzaSBzZWJhZ2FpIGJlcmlrdXQ6KioNCg0KMS4gKipNZWRpYToqKiBUYXV0YW4ga3Vlc2lvbmVyIGRpYmFnaWthbiBtZWxhbHVpIGdydXAgV2hhdHNBcHAgYW5na2F0YW4sIGRvc2VuIHdhbGksIHNlcnRhIHBsYXRmb3JtIG1lZGlhIHNvc2lhbCBpbnRlcm5hbCBrYW1wdXMgKG1pc2FsbnlhIFRlbGVncmFtIGZha3VsdGFzIGRhbiBJbnN0YWdyYW0gSGltcHVuYW4gTWFoYXNpc3dhKS4NCg0KMi4gKipQZXJpb2RlIFN1cnZlaToqKiBTdXJ2ZWkgZGlsYWtzYW5ha2FuIHNlbGFtYSAqKnNhdHUgbWluZ2d1IGFrdGlmKiogZGkgcGVydGVuZ2FoYW4gc2VtZXN0ZXIsIHRlcGF0bnlhIGFudGFyYSAqKm1pbmdndSBrZS04IGhpbmdnYSBtaW5nZ3Uga2UtOSoqLCBrZXRpa2EgbWFoYXNpc3dhIHRlbGFoIG1lbWlsaWtpIHBlbmdhbGFtYW4gYmVyaW50ZXJha3NpIGRlbmdhbiBzaXN0ZW0gYWthZGVtaWsgc2VwZXJ0aSBLUlMsIGJpbWJpbmdhbiwgZGFuIGFkbWluaXN0cmFzaS4NCg0KMy4gKipTdHJhdGVnaSBQcm9tb3NpOioqIFBlbnllYmFyYW4gaW5mb3JtYXNpIHN1cnZlaSBkaWxha3VrYW4gbWVsYWx1aSBicm9hZGNhc3QgV2hhdHNBcHAsIHBlbmd1bXVtYW4gZGkgZS1sZWFybmluZyBrYW1wdXMsIGRhbiBhamFrYW4gcGFydGlzaXBhc2kgZGFyaSBkb3NlbiB3YWxpIHNlcnRhIHN0YWYgYWthZGVtaWsuDQoNCiMjIyAqKlN0cmF0ZWdpIFNhbXBsaW5nKioNCg0KTWVuZ2d1bmFrYW4gcGVuZGVrYXRhbiAqKlN0cmF0aWZpZWQgUmFuZG9tIFNhbXBsaW5nKiosIGRlbmdhbiBzdHJhdGEgYmVyZGFzYXJrYW4gKipwcm9ncmFtIHN0dWRpIGRhbiB0YWh1biBhbmdrYXRhbioqIG1haGFzaXN3YS4gTWVza2lwdW4gdGFyZ2V0IGlkZWFsIGF3YWxueWEgYWRhbGFoIDM4NSByZXNwb25kZW4sIHBhZGEgdGFoYXAgdWppIGNvYmEgYXdhbCBpbmkgZGlwZXJvbGVoICoqc2ViYW55YWsgNDAgcmVzcG9uZGVuKiogc2ViYWdhaSAqKnNhbXBlbCBhd2FsKiogdW50dWsgbWVuZ2V2YWx1YXNpIGt1YWxpdGFzIGluc3RydW1lbiBkYW4gbWVuZ2lkZW50aWZpa2FzaSBwZXJiYWlrYW4gc2ViZWx1bSBkaXN0cmlidXNpIHNrYWxhIGJlc2FyLg0KDQojIyMjICoqRGV0YWlsIFNhbXBsaW5nKioNCg0KLSAqKlBvcHVsYXNpOioqIFNlbHVydWggbWFoYXNpc3dhIGFrdGlmIGRhcmkgNSBwcm9ncmFtIHN0dWRpIHV0YW1hIChTYWlucyBEYXRhLCBJbmZvcm1hdGlrYSwgVGVrbmlrIFBlcnRhbWJhbmdhbiwgUGVybWlueWFrYW4sIGRhbiBNZXRhbHVyZ2kpLg0KICANCi0gKipTdHJhdGE6KiogRGlrZWxvbXBva2thbiBiZXJkYXNhcmthbiAqKmFuZ2thdGFuKiogKHRhaHVuIHBlcnRhbWEgaGluZ2dhIHRhaHVuIGtlZW1wYXQpIGRhbiAqKnByb2dyYW0gc3R1ZGkqKi4NCiAgDQotICoqVGVrbmlrIFBlbWlsaWhhbjoqKiBNYWhhc2lzd2EgZGFsYW0gc2V0aWFwIHN0cmF0YSBkaXBpbGloIHNlY2FyYSAqKmFjYWsqKiBkYXJpIGRhdGFiYXNlIGFrYWRlbWlrLCBtZW5nZ3VuYWthbiAqKnJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKiogdW50dWsgbWVtYXN0aWthbiBrZXRlcndha2lsYW4gZGFuIG9iamVrdGl2aXRhcy4NCg0KIyMjICoqVWt1cmFuIFNhbXBlbCAoU2ltdWxhc2kpKioNCg0KV2FsYXVwdW4gc2FhdCBpbmkgZGF0YSB5YW5nIHRlcnNlZGlhIGJlcmFzYWwgZGFyaSAqKjQwIHJlc3BvbmRlbioqLCBwZXJoaXR1bmdhbiB0ZW9yaXRpcyB1a3VyYW4gc2FtcGVsIG1lbmdndW5ha2FuIHJ1bXVzIFNsb3ZpbiB0ZXRhcCBkaWNhbnR1bWthbiBzZWJhZ2FpIGFjdWFuIHVudHVrIHBlcmx1YXNhbiBzdXJ2ZWkgYmVyaWt1dG55YToNCg0KXFsNCm4gPSBcZnJhY3tOfXsxICsgTiBcY2RvdCBlXjJ9DQpcXQ0KZGVuZ2FuOg0KLSBcKCBOID0gMTAuMDAwIFwpIChqdW1sYWggcG9wdWxhc2kgbWFoYXNpc3dhIGFrdGlmKQ0KLSBcKCBlID0gMCwwNSBcKSAobWFyZ2luIG9mIGVycm9yIDUlKQ0KDQpcWw0KbiA9IFxmcmFjezEwLjAwMH17MSArIDEwLjAwMCBcY2RvdCAwLDAwMjV9IFxhcHByb3ggMzg1DQpcXQ0KDQpTZWhpbmdnYSB0YXJnZXQgcGVuZ3VtcHVsYW4gZGF0YSB0YWhhcCBsYW5qdXRhbiBhZGFsYWggKio0MDAgcmVzcG9uZGVuKiosIHVudHVrIG1lbmdhbnRpc2lwYXNpIGRhdGEgeWFuZyB0aWRhayBsZW5na2FwIGF0YXUgdGlkYWsgdmFsaWQuDQoNCiMjIyAqKkRpc3RyaWJ1c2kgU2FtcGVsIFNlbWVudGFyYSoqDQoNCkRhdGEgYXdhbCBzZWJhbnlhayA0MCByZXNwb25kZW4gbWVuY2FrdXAgbWFoYXNpc3dhIGRhcmkgYmVyYmFnYWkgYW5na2F0YW4gZGFuIHByb2dyYW0gc3R1ZGksIG5hbXVuIGJlbHVtIG1lcmF0YSBzZXBlbnVobnlhLiBIYWwgaW5pIHdhamFyIG1lbmdpbmdhdCBwZW5ndW1wdWxhbiBkaWxha3VrYW4gZGFsYW0ga29udGVrcyB1amkgY29iYS4gRGlzdHJpYnVzaSBha2hpciBuYW50aW55YSBha2FuIGRpc2VzdWFpa2FuIGRlbmdhbiAqKnByb3BvcnNpIGp1bWxhaCBtYWhhc2lzd2EqKiBkYXJpIHRpYXAgc3RyYXRhLg0KDQojIyMgKipQcm9zZWR1ciBkYW4gUGVuZ29sYWhhbiBBd2FsKioNCg0KLSBEYXRhIHlhbmcgbWFzdWsgZGlla3N0cmFrc2kgZGFsYW0gZm9ybWF0ICoqQ1NWKiogdW50dWsgbWVtdWRhaGthbiBhbmFsaXNpcyBtZW5nZ3VuYWthbiBwZXJhbmdrYXQgbHVuYWsgc3RhdGlzdGlrLg0KLSBJZGVudGl0YXMgcmVzcG9uZGVuIGRpamFnYSBrZXJhaGFzaWFhbm55YSBzZXN1YWkgcHJpbnNpcCBldGlrYSBwZW5lbGl0aWFuLg0KLSBTZWx1cnVoIDI1IGl0ZW0gc3VydmVpIHRlbGFoIGRpaXNpIGxlbmdrYXAgb2xlaCA0MCByZXNwb25kZW4gZGFuIHNpYXAgZGlndW5ha2FuIHVudHVrOg0KICAtICoqVWppIHZhbGlkaXRhcyoqDQogIC0gKipVamkgcmVsaWFiaWxpdGFzKioNCiAgLSAqKkFuYWxpc2lzIHN0YXRpc3RpayBkZXNrcmlwdGlmIGF3YWwqKiAoc2VwZXJ0aSByZXJhdGEsIHN0YW5kYXIgZGV2aWFzaSwgZGFuIGRpc3RyaWJ1c2kgc2tvciBwZXIgZGltZW5zaSBsYXlhbmFuIGFrYWRlbWlrKS4NCg0KIyMgKipTaW11bGFzaSBEYXRhIGRhbiBBbmFsaXNpcyBBd2FsKioNCg0KQmVyaWt1dCBhZGFsYWggdmVyc2kgeWFuZyBzdWRhaCBkaXNlc3VhaWthbiBkZW5nYW4gZGF0YSBkYW4ga29udGVrcyBzdXJ2ZWkgeWFuZyB0ZWxhaCBkaWJhaGFzIHNlYmVsdW1ueWEsIHRlcm1hc3VrIDI1IHBlcnRhbnlhYW4gZGFuIDQwIHJlc3BvbmRlbiwgc2VydGEgYW5hbGlzaXMgeWFuZyByZWxldmFuIGRlbmdhbiBkYXRhIHRlcnNlYnV0Og0KDQotLS0NCg0KIyMgU2ltdWxhc2kgRGF0YSBkYW4gQW5hbGlzaXMgQXdhbA0KDQojIyMgU2ltdWxhc2kgRGF0YQ0KDQpVbnR1ayBzaW11bGFzaSwga2FtaSBtZW5naGFzaWxrYW4gZGF0YSBzaW50ZXRpcyB1bnR1ayA0MCByZXNwb25kZW4sIGRlbmdhbiBza29yIExpa2VydCAoMS01KSB1bnR1ayAyNSBwZXJ0YW55YWFuIGt1YW50aXRhdGlmIHlhbmcgbWVsaWJhdGthbiA1IGRpbWVuc2kgbGF5YW5hbiBha2FkZW1payAoS1JTIE9ubGluZSwgQmltYmluZ2FuIEFrYWRlbWlrLCBQZWxheWFuYW4gQWRtaW5pc3RyYXNpLCBBa3NlcyBJbmZvcm1hc2kgQWthZGVtaWssIGRhbiBCYW50dWFuIFBlbnllbGVzYWlhbiBTdHVkaSkuIFNldGlhcCBkaW1lbnNpIHRlcmRpcmkgZGFyaSA1IHBlcnRhbnlhYW4geWFuZyBtYXNpbmctbWFzaW5nIGRpYmVyaSBza29yIG9sZWggcmVzcG9uZGVuLg0KDQpEYXRhIHVudHVrIHNldGlhcCBkaW1lbnNpIGRpcmFuZ2t1bSBzZWJhZ2FpIGJlcmlrdXQsIGJlcmRhc2Fya2FuIGhhc2lsIHBlcmhpdHVuZ2FuIHJhdGEtcmF0YSBza29yIGRhbiBzdGFuZGFyIGRldmlhc2kgdW50dWsgc2V0aWFwIGRpbWVuc2k6DQoNCmBgYHtyfQ0KbGlicmFyeShrbml0cikNCg0KIyBEYXRhIGhhc2lsIGFuYWxpc2lzIHJhdGEtcmF0YSBkYW4gc3RhbmRhciBkZXZpYXNpIHBlciBkaW1lbnNpDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIGBEaW1lbnNpYCA9IGMoIktSUyBPbmxpbmUiLCAiQmltYmluZ2FuIEFrYWRlbWlrIiwgIlBlbGF5YW5hbiBBZG1pbmlzdHJhc2kiLCAiQWtzZXMgSW5mb3JtYXNpIEFrYWRlbWlrIiwgIkJhbnR1YW4gUGVueWVsZXNhaWFuIFN0dWRpIiksDQogIGBSYXRhLXJhdGEgU2tvcmAgPSBjKDMuOCwgMy41LCAzLjMsIDQuMCwgMy42KSwNCiAgYFN0YW5kYXIgRGV2aWFzaWAgPSBjKDAuNywgMC44LCAwLjksIDAuNiwgMC43KQ0KKQ0KDQojIE1lbmFtcGlsa2FuIGhhc2lsIGRhbGFtIGZvcm1hdCB0YWJlbA0Ka2FibGUoZGF0YSwgY29sLm5hbWVzID0gYygiRGltZW5zaSIsICJSYXRhLXJhdGEgU2tvciIsICJTdGFuZGFyIERldmlhc2kiKSkNCmBgYA0KDQojIyMgQW5hbGlzaXMgQXdhbA0KDQoqKjEuIFN0YXRpc3RpayBEZXNrcmlwdGlmOioqDQoNCi0gKipLUlMgT25saW5lIChSYXRhLXJhdGEgMy44LCBTdGFuZGFyIERldmlhc2kgMC43KToqKiAgDQogIFNrb3IgcmF0YS1yYXRhIDMuOCBtZW51bmp1a2thbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciByZXNwb25kZW4gbWVyYXNhIGN1a3VwIHB1YXMgZGVuZ2FuIGxheWFuYW4gS1JTIE9ubGluZS4gTmFtdW4sIHN0YW5kYXIgZGV2aWFzaSAwLjcgbWVudW5qdWtrYW4gYmFod2EgYWRhIHZhcmlhc2kgcGVuZ2FsYW1hbiBkaSBhbnRhcmEgcmVzcG9uZGVuLCBkZW5nYW4gc2ViYWdpYW4gYmVzYXIgbWVuZ2FsYW1pIHBlbmdhbGFtYW4gcG9zaXRpZiwgc2VtZW50YXJhIHNlYmFnaWFuIGxhaW5ueWEgbWVtaWxpa2kgcGVuZ2FsYW1hbiB5YW5nIGt1cmFuZyBtZW11YXNrYW4uDQoNCi0gKipCaW1iaW5nYW4gQWthZGVtaWsgKFJhdGEtcmF0YSAzLjUsIFN0YW5kYXIgRGV2aWFzaSAwLjgpOioqICANCiAgUmF0YS1yYXRhIHNrb3IgdW50dWsgQmltYmluZ2FuIEFrYWRlbWlrIGFkYWxhaCAzLjUsIHlhbmcgbWVudW5qdWtrYW4gdGluZ2thdCBrZXB1YXNhbiB5YW5nIGN1a3VwIGJhaWsuIE1lc2tpIGRlbWlraWFuLCBzdGFuZGFyIGRldmlhc2kgeWFuZyBsZWJpaCB0aW5nZ2kgKDAuOCkgbWVudW5qdWtrYW4gYWRhbnlhIHBlcmJlZGFhbiBkYWxhbSBwZW5pbGFpYW4gcmVzcG9uZGVuIHRlcmhhZGFwIGt1YWxpdGFzIGJpbWJpbmdhbiBha2FkZW1paywgeWFuZyBiZXJhcnRpIGFkYSBiZWJlcmFwYSBtYWhhc2lzd2EgeWFuZyBtZXJhc2EgdGlkYWsgcHVhcy4NCg0KLSAqKlBlbGF5YW5hbiBBZG1pbmlzdHJhc2kgKFJhdGEtcmF0YSAzLjMsIFN0YW5kYXIgRGV2aWFzaSAwLjkpOioqICANCiAgUGVsYXlhbmFuIEFkbWluaXN0cmFzaSBtZW5kYXBhdGthbiBza29yIHJhdGEtcmF0YSAzLjMsIHlhbmcgbWVydXBha2FuIHlhbmcgdGVyZW5kYWggZGkgYW50YXJhIGRpbWVuc2kgbGFpbm55YS4gU3RhbmRhciBkZXZpYXNpIHlhbmcgdGluZ2dpICgwLjkpIG1lbnVuanVra2FuIGJhaHdhIHJlc3BvbmRlbiBzYW5nYXQgYmVydmFyaWFzaSBkYWxhbSBtZW5pbGFpIGxheWFuYW4gaW5pLCBkZW5nYW4gYmViZXJhcGEgbWVuZ2FuZ2dhcG55YSBtZW1hZGFpIGRhbiBzZWJhZ2lhbiBsYWlubnlhIHRpZGFrIHB1YXMuDQoNCi0gKipBa3NlcyBJbmZvcm1hc2kgQWthZGVtaWsgKFJhdGEtcmF0YSA0LjAsIFN0YW5kYXIgRGV2aWFzaSAwLjYpOioqICANCiAgQWtzZXMgSW5mb3JtYXNpIEFrYWRlbWlrIG1lbmNhdGF0a2FuIHNrb3IgdGVydGluZ2dpIGRlbmdhbiByYXRhLXJhdGEgNC4wIGRhbiBzdGFuZGFyIGRldmlhc2kgeWFuZyByZW5kYWggKDAuNiksIG1lbnVuanVra2FuIGJhaHdhIHNlYmFnaWFuIGJlc2FyIG1haGFzaXN3YSBtZXJhc2Egc2FuZ2F0IHB1YXMgZGVuZ2FuIGtlbXVkYWhhbiBha3NlcyBkYW4ga2VsZW5na2FwYW4gaW5mb3JtYXNpIGFrYWRlbWlrIHlhbmcgZGlzZWRpYWthbi4NCg0KLSAqKkJhbnR1YW4gUGVueWVsZXNhaWFuIFN0dWRpIChSYXRhLXJhdGEgMy42LCBTdGFuZGFyIERldmlhc2kgMC43KToqKiAgDQogIFNrb3IgcmF0YS1yYXRhIDMuNiBtZW51bmp1a2thbiBiYWh3YSBiYW50dWFuIGRhbGFtIHBlbnllbGVzYWlhbiBzdHVkaSBjdWt1cCBtZW1hZGFpLCBtZXNraXB1biBhZGEgYmViZXJhcGEgdmFyaWFzaSBkYWxhbSBwZW5pbGFpYW4gcmVzcG9uZGVuLg0KDQoqKjIuIEFuYWxpc2lzIEt1YWxpdGF0aWY6KiogIA0KVW50dWsgcGVydGFueWFhbiB0ZXJidWthLCBiZXJpa3V0IGFkYWxhaCBiZWJlcmFwYSBrZWx1aGFuIGRhbiBzYXJhbiB5YW5nIHVtdW0gZGFyaSByZXNwb25kZW46DQoNCi0gKipLZWx1aGFuIFVtdW06KiogIA0KICAtIFByb3NlZHVyIGFkbWluaXN0cmFzaSB5YW5nIHJ1bWl0IGRhbiB3YWt0dSByZXNwb25zIHN0YWYgeWFuZyBsYW1iYXQuDQogIC0gS2VrdXJhbmdhbiBiaW1iaW5nYW4gYWthZGVtaWsgZGkgbHVhciBqYW0ga3VsaWFoIHJlZ3VsZXIuDQoNCi0gKipTYXJhbjoqKiAgDQogIC0gTWVuaW5na2F0a2FuIHBhbmR1YW4gZGFuIHBlbGF0aWhhbiB0ZXJrYWl0IHBlbmdndW5hYW4gS1JTIE9ubGluZS4NCiAgLSBNZW5hbWJhaCBzZXNpIGJpbWJpbmdhbiBha2FkZW1payBhdGF1IG1lbWJlcmlrYW4gYWtzZXMgYmltYmluZ2FuIHNlY2FyYSBsZWJpaCBmbGVrc2liZWwuDQogIC0gTWVtcGVyY2VwYXQgcmVzcG9uIGRhbGFtIHBlbGF5YW5hbiBhZG1pbmlzdHJhc2kgZGFuIG1lbmd1cmFuZ2kgYmlyb2tyYXNpIHlhbmcgYmVyYmVsaXQtYmVsaXQuDQoNCioqMy4gSW1wbGlrYXNpOioqDQoNCi0gKipQcmlvcml0YXMgUGVyYmFpa2FuOioqICANCiAgUGVsYXlhbmFuIEFkbWluaXN0cmFzaSBkYW4gQmltYmluZ2FuIEFrYWRlbWlrIG1lbWJ1dHVoa2FuIHBlcmhhdGlhbiBsZWJpaC4gUHJvc2VkdXIgYWRtaW5pc3RyYXNpIHlhbmcgcnVtaXQgZGFuIGJpbWJpbmdhbiB5YW5nIHRlcmJhdGFzIGRpIGx1YXIgamFtIGt1bGlhaCBoYXJ1cyBtZW5qYWRpIGZva3VzIHV0YW1hIHVudHVrIGRpcGVyYmFpa2kuDQogIA0KLSAqKktla3VhdGFuIHlhbmcgRGFwYXQgRGlwZXJ0YWhhbmthbjoqKiAgDQogIEFrc2VzIEluZm9ybWFzaSBBa2FkZW1payBtZXJ1cGFrYW4gYXJlYSB5YW5nIHNhbmdhdCBiYWlrLCBkZW5nYW4gc2tvciByYXRhLXJhdGEgeWFuZyB0aW5nZ2kgZGFuIHNlZGlraXRueWEgdmFyaWFzaSBkYWxhbSBwZW5pbGFpYW4uIEhhbCBpbmkgZGFwYXQgZGlwZXJ0YWhhbmthbiBhdGF1IGJhaGthbiBsZWJpaCBkaXRpbmdrYXRrYW4gbGFnaS4NCg==