Tugas Pertemuan 11

profile

Ukuran Penyebaran Data

Definisi Ukuran Penyebaran Data -> Iyalah suatu konsep dalam statistika yang menggambarkan sejauh mana nilai-nilai dalam suatau dataset tersebar atau bervariasi dari nilai pusat (misalnya rata-rata, median). Ukuran ini memberikan informasi tentang distribusi data, membantu mengidentifikasi tingkat kehomogenan atau keheterogenan data, serta mendeteksi keberadaan outlier.

A. Jangkauan (Range)

1. Definisi Jangkauan (Range)

adalah suatau ukuran penyebaran data yang paling sederhana, yang menunjukkan selisih antara nilai maksimum dan nilai minimum dalam suatu dataset. Jangkauan memberikan gambaran kasar tentang rentang distribusi data.

2. Rumus:

\[ \text{Range} = \text{Nilai Maksimum} - \text{Nilai Minimum} \] Contoh:

Jika sebuah dataset memiliki nilai: \(3, 7, 8, 15, 22\)

  • Nilai maksimum = \(22\)
  • Nilai minimum = \(3\)

Maka, jangkauan (range) adalah: \[ \text{Range} = 22 - 3 = 19 \]

3. Kelebihan:

  • Mudah dihitung
  • Memberikan informasi dasar tentang rentang distribusi data.

4. Kekurangan:

  • Tidak memperhitungkan distribusi data di antara nilai-nilai tersebut.
  • Sangat sensitif terhadap outlier (nilai ekstrem).

Jangkauan biasanya digunakan sebagai langkah awal untuk memahami sebaran data sebelum menggunakan ukuran penyebaran lainnya yang lebih kompleks, seperti varians atay standar deviasi.

B. Jangkauan Antar Kuartil (IQR)

1. Definisi IQR

Jangkauan Antar Kuartil adalah ukuran penyebaran data yang menggambarkan rentang antara kuartil ketiga\((Q3)\) dan kuartil pertama \((Q1)\). IQR menunjukan rentang nilai tengah dari dataset, yaitu data yang berada di antara 25% hingga 75% distribusi.

2. Rumus:

\[ \text{IQR} = Q_3 - Q_1 \]

  • \(Q1\) (Kuartil Pertama): Nilai yang memisahkan 25% data terkecil dari sisanya.
  • $Q3 (Kuartil Ketiga): Nilai yang memisahkan 25% data terbessar dari sisanya.

3. Contoh:

Jika sebuah dataset memiliki nilai: \[ 5, 7, 8, 12, 15, 18, 20 \]

  1. Urutkan data.
  2. Tentukan \(Q1\) (kuartil pertama): Median dari setengah data pertama \((5, 7, 8)\) adalah \(7\).
  3. Tentukan \(Q3\) (kuartil ketiga): Median dari setengah data kedua \((15, 18, 20)\) adalah \(18\).
  4. Hitung IQR: \[ IQR = Q3 - Q1 = 18 - 7 = 11 \]

4. Fungsi IQR:

  • Mengukur konsentrasi nilai tengah dalam dataset.
  • Membantu mengidentifikasi outlier: data yang jauh dari luar rentang \[ Q_1 - 1.5 \times \text{IQR} \quad \text{atau} \quad Q_3 + 1.5 \times \text{IQR} \quad \text{dianggap sebagai outlier.} \]

IQR lebih stabil terhadap outlier dibandingkan jangkauan (range) karena hanya mengggunakan nilai tengah distribusi data.

C. Varians

1. Definisi Varians

Varians adalah ukuran penyebaran data yang menunjukan sejauh mana nilai-nilai dalam dataset tersebar atau berbeda dari nilai rata-rata (mean). Varians mengukur rata-rata kuadrat deviasi (selisih) setiap nilai data terhadap nilai rata-rata.

2. Rumus Varians:

Untuk dataset dnegan \(n\) data, varians dihitung dengan rumus:

  • Varians untuk populasi: \[ \sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2 \] Di mana:

  • \(\sigma^2\) adalah varians populasi.

  • \(N\) adalah jumlah data dalam populasi.

  • \(X_i\) adalah nilai individual dalam data.

  • \(\mu\) adalah rata-rata populasi.

Untuk sampel, varians dirumuskan sebagai: \[ s^2 = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})^2 \]

3. Interpretasi:

  • Varians tinggi menunjukan bahwa data memiliki penyebaran yang besar (data lebih jauh dari rata-rata).
  • Varians rendahmenunjukkan bahwa data lebih terkonsentrasi di sekitar rata-rata.

4. Contoh

Jika data \[ [2, 4, 6, 8]: \]

  1. Hitung rata-rata: \[ \bar{X} = \frac{2 + 4 + 6 + 8}{4} = 5 \]
  2. Hitung selsih kuadrat setiap data dari rata-rata: \[ (2 - 5)^2, (4 - 5)^2, (6 - 5)^2, (8 - 5)^2 \implies 9, 1, 1, 9 \]
  3. Hitung rata-rata selisih kuadrat tersebut:
  • Jika populasi: \[ \frac{9 + 1 + 1 + 9}{4} = 5 \]
  • Jika sampel: \[ \frac{9 + 1 + 1 + 9}{3} = 6.67\]

Varians digunakan dalam berbagai bidang, termasuk statistik, ekonomi, dan machine learning,untuk mengukur penyebaran data.

D. Standar Deviasi

1. Definisi Standar Deviasi

Standar Deviasi adalah ukuran statistik yang menunjukkan seberapa tersebar atau bervariasinya data dari nilai rata-rata (mean) dalam suatu distribusi. Standar deviasi memberikan gambaran seberapa jauh setiap data dalam kumpulan tersebut dari nilai rata-rata.

2. Definisi Matematika:

Standar deviasi dihitung dengan rumus: \[ sigma = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2} \]

Penjelasan Komponen:

  • \(\sigma\): Standar deviasi.
  • \(X_i\): Setiap nilai dalam kumpulan data.
  • \(\mu\): Rata-rata dari seluruh data. \(n\): Jumlah data.

3. Fungsi Standar Deviasi:

  • Mengukur Variabilitas data: Semakin kecil standar deviasi, semakin dekat data dengan rata-rata, dan sebaliknya.
  • Membantu dalam Analisis risiko atau Variabilitas hasil, misalnya dalam keuangan dan statistik.
  • Memahami Penyebaran data dalam suatu distribusi normal.

Jenis Standar Deviasi: 1. Populasi digunakan saat seluruh populasi data diketahui. [
= ] 2. Sampel digunakan saat hanya sebagian data (sampel) yang dianalisis. \[ s = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2} \]

4. Contoh:

Misalkan kumpulan data adalah: \(2, 4, 6, 8, 10\).

  1. Hitung rata-rata \((\mu)\): \((2 + 4 + 6 + 8 + 10)/ 5 = 6\)
  2. Hitung selisih setiap data dari rata-rata, kuadratkan, lalu cari rata-rata kuadrat tersebut.
  3. Ambil akar kaudrat dari rata-rata kuadrat.

Dengan hasilnya, Anda mengetahui bagaimana data menyebar dari rata-rata.

E. Koefisien Variasi

1. Definisi Koefisien

Koefisien Variasi (CV) adalah statistik yang menunjukkan tingkat variasi dalam suatu datset relatif terhadap rata-rata dataset tersebut. CV digunakan untuk membandingkan variasi data antar grup atau dataset yang memiliki satuan atau skala yang berbeda.

2. Rumus Koefisien Varisi:

\[ CV = \left( \frac{\sigma}{\mu} \right) \times 100 \] Di mana:

  • \(\sigma\) = Simpangan baku (standar deviasi).
  • \(\mu\) = Rata-rata (mean).
  • \(CV\) = Koefisien variasi dalam bentuk presentase.

3. Penjelasan Elemen dalam Rumus

  1. Simpangan Baku (Standard Deviation) : Simpangan baku \(\sigma\) mengukur seberapa besar data terbesar dari rata-rata. Semakin besar simpangan baku, semakin besar penyebaran data.
  2. Rata-rata (Mean): Rata-rata \(\mu\) adalah nilai pusat dari data, yang dihitung dengan menjumlahkan semua nilai data dan membaginya dengan jumlah data.
  3. Koefisien Variasi (CV): CV memberikan gambaran tentang tingkat variasi data relatif terhadap rata-rata, lalu mengalikan hasil pembagian simpangan baku dengan rata-rata, lalu mengalikannya dengan \(100\), kita memperoleh persentase variasi yang lebih mudah dibandingkan dengan satuan asli data.

4. Interpretasi Koefisien Variasi

  • CV rendah: Jika relatif rendah, itu menunjukkan bahwa data lebih terkonsentrasi di sekitar rata-rata. Variasi dalam data kecil dibandingkan dengan rata-rata. _ CV tinggi: Jika CV tinggi, itu menunjukkan bahwa data lebih tersebar. Variasi dalam data besar dibandingkan dengan rata-rata.

5. Contoh Penggunan koefisien Variasi

Misalkan ada dua kolompok siswa yang mengikuti ujian matematika:

  • Kelompok A memiliki rata-rata nilai \(80\) dan simpangan baku \(5\).
  • Kelompok B memiliki rata-rata nilai \(90\) dan simpangan baku \(10\).

Menghitung CV untuk kedua kelompok:

  1. Kelompok A \[ CV_A = \left( \frac{5}{80} \right) \times 100 = 6.25\% \]
  2. Kelompok B \[ CV_B = \left(\frac{10}{90}\right) \times 100 = 11.11% \]

Dari perhitungan di atas, meskipun kelompok B memiliki rata-rata yang lebih tinggi, variasi (atau sebaran) nilai dalam kelompok B lebih besar, sebagaimana ditunjukkan oleh nilai CV yang lebih tinggi.

F. Rentang Semi-Interkuartil

1. Definisi Rentang Semi-Interkuartil

Rentang Semi-Interkuartil adalah salah satu jenis rentang dalam analisis statistik yang digunakan untuk mengukur variabilitas atau penyebaran data. Rentang ini dihitung dengan cara mengurangi nilar kuartil pertama \((Q1)\) dari nilai kuartil ketiga \((Q3)\). Dengan kata lain, rentang semi-interkuartil (atau disebut juga interquartile range / IQR) menggambarkan sebaran data pada 50% tengah dari kumpulan data yang telah diurutkan.

2. Rumus Rentang Semi-Interkuaril (IQR)

Rentang Semi-Interkuartil dihitung menggunakan rumus: \[ IQR = Q_3 - Q_1 \]

Di mana:

  • \(Q1\) = Kuartil ketiga (nilai pada posisi ke 75% data)
  • \(Q1\) = Kuartil pertama (nilai pada posisi ke 25% data)

3. Langkah-langkah Menghitung Rentang Semi-Interkuartil (IQR)

Untuk menghitung IQR, berikut adalah langkah-langkah dilakukan:

Langkah 1: Urutkan Data

Langkah pertama yaitu mengurutkan data dalam urutan menaik (dari yang terkecil hingga terbesar). Contoh data: \(3,7,8,12,14,18,19,21,22,30\)

Langkah 2: Tentukan Kuartil Pertama (Q1)

Kuartil pertama (Q1) adalah median dari data bagian bawah (nilai yang terletak di bawah median keseluruhan). Data ini dibagi menjadi dua bagian, dan Q1 adalah median dari bagian yang lebih kecil.

Langkah 3: Tentukan Kuartil (Q3)

Kuartil ketiga (Q3) adalah median dari data bagian atas (nilai yang terletak di atas median keseluruhan). Data ini dibagi menjadi dua bagian, dan Q3 adalah median dari bagian yang lebih besar.

Langakh 4: Hitung IQR

Setelah menemukan nilai Q1 dan Q3, IQR dapat dihitung dengan mengurangkan Q1 dari Q3: \[ IQR = Q_3 - Q_1 \]

4. Contoh Perhitungan IQR

Misalkan kita memiliki data berikut yang sudah diurutkan: \(1,4,7,9,12,15,18,20,25,30\)

  • Median (Q2): Nilai tengah dari data adalah \(12\) (nilai pada posisi \(5\) dan \(6\)).
  • Kuartil pertama (Q1): Median dari \(1, 4, 7, 9, 12\) adalah \(7\)
  • Kuartil ketiga (Q3): Meidan dari \(15, 18, 20, 25, 30\) adalah \(20\).

Jadi, perhitungan IQR adalah: \[ IQR = Q3 - Q1 = 20 - 7 = 13 \]

Latihan 1

Sebuah perusahaan ingin memahami karakteristik penyebaran data hasil penjualan dari empat cabang (A, B, C, dan D) selama satu bulan terakhir. Data penjualan (dalam juta rupiah) dari keempat cabang tersebut adalah sebagai berikut:

  • Cabang A: 50, 55, 60, 65, 70
  • Cabang B: 40, 50, 60, 70, 80
  • Cabang C: 30, 30, 35, 40, 45
  • Cabang D: 70, 75, 80, 85, 90

Soal 1. Hitunglah rata-rata, median, dan standar deviasi untuk masing-masing cabang.

Cabang A

Data: \([50, 55, 60, 65, 70]\)

  1. Rata-rata: \[ \text{Rata-rata} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{5}{300} = 60 \]
  2. Meedian:
  • Data sudah terurut: \([50, 55, 60, 65, 70]\)
  • Median adalah nilai tengah: \(60\)
  1. Standar Deviasi:

Langkah:

  • Hitung \((X_1 - \mu)^2\) untuk setiap data: \[ (50 - 60)^2 = 100, (55 - 60)^2 = 25, (60 - 60)^2 = 0, (65 - 60)^2 = 25, (70 - 60)^2 = 100 \]
  • Jumlahlkan: \[ 100 + 25 + 0 + 25 + 100 = 250 \]
  • Standar deviasi: \[ \sigma = \sqrt{\frac{250}{5}} = \sqrt{50} \approx 7.07 \]

Cabang B

Data: \([40, 50, 60, 70, 80]\)

  1. Rata-rata: \[ \text{Rata-rata} = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{5}{300} = 60 \]
  2. Median:

Median adalah nilai = \(60\)

  1. Standar Deviasi:

Langkah:

  • Hitung \((X_1 - \mu)^2\) untuk setiap data: \[ (40 - 60)^2 = 400, (50 - 60)^2 = 100, (60 - 60)^2 = 0, (70 - 60)^2 = 100, (80 - 60)^2 = 400 \]
  • Jumlahkan: \[ 400 + 100 + 0 + 100 + 400 = 1000 \]
  • Standar deviasi: \[ \sigma = \sqrt{\frac{1000}{5}} = \sqrt{200} \approx 14.14 \]

Cabang C

Data: \([30, 30, 35, 40, 45]\)

  1. Rata-rata: \[ \text{Rata-rata} = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{5}{180} = 36 \]
  2. Median:

Median adalah nilai tengah = \(35\)

  1. Standar Deviasi:

Langkah:

  • Hitung \((X_1 - \mu)^2\) untuk setiap data: \[ (30 - 36)^2 = 36, (30 - 36)^2 = 36, (35 - 36)^2 = 1, (40 - 36)^2 = 16, (45 - 36)^2 = 81 \]
  • Jumlahkan: \[ 36 + 36 + 1 + 16 + 81 = 170 \]
  • Standar deviasi: \[ \sigma = \sqrt{\frac{170}{5}} = \sqrt{34} \approx 5.83 \]

Cabang D

Data: \([70, 75, 80, 85, 90]\)

  1. Rata-rata: \[ \text{Rata-rata} = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{5}{400} = 80 \]
  2. Median:

Median adalah nilai tengah = \(80\)

  1. Standar Deviasi:

Langkah:

Hitung \((X_1 - \mu)^2\) untuk setiap data: \[ (70 - 80)^2 = 100, (75 - 80)^2 = 25, (80 - 80)^2 = 0, (85 - 80)^2 =25, (90 - 80)^2 = 100 \] - Jumlahkan: \[ 100 + 25 + 0 + 25 + 100 = 250 \] - Standar deviasi: \[ \sigma = \sqrt{\frac{250}{5}} = \sqrt{50} \approx 7.07 \]

Soal 2. Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan alasannya.

Cabang yang memiliki penyebaran data paling kecil adalah Cabang C, karena standar deviasi dari data penjualan Cabang C adalah yang paling rendah, yaitu \(5,83\) juta

Penjelasan:

1. Standar deviasi

Standar deviasi adalah ukuran statistik yang menggambarkan seberapa tersebar data terhadap rata-rata. Semakin kecil nilai standar deviasi, semakin dekat data terhadap rata-rata, yang berarti penyebaran data lebih kecil.

2. Perbandingan standar deviasi antar cabang:

  • Cabang A = 7,07 juta
  • Cabang B = 14,14 juta
  • Cabang C = 5,83 juta (paling kecil)
  • Cabang D = 7,07 juta

3. Interpretasi untuk Cabang C:

  • Data penjualan Cabang C lebih seragam atau konsisten dibandingkan cabang lainnya.
  • Rentang data di Cabang C juga lebih sempit \((30\) hingga \(45)\)

4. Kesimpulannya:

Cabang C memiliki penyebaran data paling kecil karena data mereka lebih seragam, dan nilai standar deviasinya adalah yang terendah di antara semua cabang.**

Soal 3. Jika target penjualan minimum adalah 50 juta rupiah, cabang mana saja yang gagal mencapai target di semua datanya?

Cabang yang gagal mencapai target penjualan minimum sebesar 50 juta rupiah untuk semua datanya adalah Cabang C.

1. Alasan:

  • Data penjualan Cabang C: \([30,30,35,40,45]\)
  • Seluruh nilai dalam data tersebut kurang dari target 50 juta, sehingga Cabang C gagal mencapai target di semua datanya.

2. Pengecekan untuk cabang lain:

  • Cabang A: \([50,55,60,65,70]\)

Semua data memenuhi target 50 juta.

  • Cabang B: \([40,50,60,70,80]\)

Ada daya yang gagal \((40)\), tetapi tidak semuanya.

  • Cabang D: \([70,75,80,85,90]\)

Semua data memenuhi target 50 juta.

3. Kesimpulan:

Hanya Cabang C yang gagal mencapai target penjualan 50 juta rupiah di semua datanya.

Soal 4. Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran data setiap cabang.

1. Cabang A dalam Boxplt

2. Cabang B dalam Boxplot

3. Cabang C dalam Boxplot

4. Cabang D dalam Boxplot

5. Boxplot Cabang A, B, C, dan D

Soal 5. Jika andalah manajer perusahaan, bagaimana anda akan menggunankan informasi ini untuk merencanakan strategi peningkatan penjualan?

Sebagai manajer perusahaan yang menganalisis boxplot penjualan dari keempat cabang, saya akan menggunakan informasi ini untuk merencanakan strategi peningkatan penjualan dengan pendekatan yang terarah dan berdasarkan pada data. Berikut adalah beberapa langkah yang bisa diambil:

1. Analisis Penyebaran Data

  • Cabang dengan Variabilitas Terendah (Penyebaran Data Kecil):
    • Berdasarkan boxplot, kita bisa melihat cabang mana yang memiliki penyebaran data paling kecil, yang berarti penjualannya relatif stabil. Misalnya, Cabang C dengan nilai penjualan yang konsisten antara \(30\) juta hingga \(45\) juta.
    • Strategi: Cabang yang stabil bisa digunakan sebagai model bagi cabang lain. Tugasnya bisa lebih fokus pada mempertahankan performa yang sudah ada dan meningkatkan efektivitas operasional untuk meningkatkan efisiensi. Jika sudah stabil, strategi seperti promosi produk unggulan atau perluasan pasar dapat diterapkan.
  • Cabang dengan Variabilitas Terbesar (Penyebaran Data Lebih Besar):
    • Cabang seperti Cabang A dan D mungkin menunjukkan variabilitas yang lebih besar, yang berarti ada fluktuasi besar dalam hasil penjualan. Hal ini bisa disebabkan oleh berbagai faktor seperti musim, perubahan harga, atau faktor eksternal lainnya.
    • Strategi:Untuk cabang dengan penyebaran yang lebih besar, langkah pertama adalah mengidentifikasi penyebab fluktuasi tersebut. Mungkin perlu melakukan analisis lebih mendalam untuk mengetahui apakah ada faktor eksternal yang mempengaruhi penjualan atau apakah ada masalah dalam strategi penjualan dan pemasaran. Strategi yang lebih dinamis, seperti penyesuaian harga, promosi khusus, atau pelatihan lebih lanjut bagi tim penjualan, bisa membantu menstabilkan kinerja.

2. Perencanaan Berdasarkan Tren dan Perbandingan Antar Cabang

  • Kinerja Cabang yang Lebih Stabil (Cabang C): Cabang yang stabil bisa menjadi contoh untuk cabang lain dalam hal pendekatan penjualan yang berhasil.
  • Cabang dengan Peningkatan yang Lebih Signifikan (Cabang D): Meniru teknik atau pendekatan yang digunakan di cabang ini untuk meningkatkan hasil di cabang lainnya.
  • Cabang yang Perlu Pembenahan (Cabang A dan B): Jika cabang-cabang ini menunjukkan fluktuasi atau hasil yang lebih rendah, maka perlu dilakukan pembenahan. Hal ini bisa meliputi peningkatan kualitas produk, peningkatan promosi, atau perbaikan manajerial.

3. Monitoring dan Evaluasi Terus Menerus

  • Menetapkan indikator kinerja (KPI) untuk setiap cabang berdasarkan analisis ini.
  • Melakukan pemantauan secara berkala dan membuat penyesuaian strategi jika ada perubahan signifikan dalam data penjualan yang terpantau melalui boxplot pada periode berikutnya.

Dengan memanfaatkan informasi ini secara strategis, manajer dapat merancang rencana yang lebih terstruktur dan berbasis data untuk meningkatkan penjualan, menstabilkan cabang yang berfluktuasi, dan mengoptimalkan cabang yang sudah menunjukkan performa baik.

Latihan 2

Perusahaan XYZ mengelola pengeiriman barang ke berbagai wilayah dengan menggunakan berbagai jenis transportasi. Setiap pengiriman melibatkan biaya transportasi, waktu yang dibutuhkan, dan jumlah barang yang dikirim. Berikut adalah data terkait pengriman barang berdasarkan wilayah dan jenis barang:

Soal 1. Analisis Efisiensi Pengiriman:

  • Visualisasikan Pengiriman barang berdasarkan jumlah barang, waktu pengiriman, dan biaya per unit dengan menggunakan Boxplot 3D.
  • Tentukan Wilayah mana yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman.

A. Visualisasi Boxplot 3D

B. Analisis Efisiensi Pengiriman

Berdasarkan data pengiriman barang yang mencakup berbagai wilayah, jenis barang, waktu pengiriman, dan biaya, kita dapat menganalisis efisiensi pengiriman dengan cara menghitung biaya per unit dan waktu pengiriman.

  1. Penghitungan Biaya Per Unit dan Efisiensi
  • Biaya per unit dihitung dengan membagi biaya pengiriman dengan jumlah unit barang yang dikirim.
  • Efisiensi pengiriman dihitung dengan mengalikan biaya per unit dengan waktu pengiriman (jam). Hal ini memberikan gambaran tentang berapa banyak biaya yang dikeluarkan untuk setiap unit barang dalam waktu tertentu.
  1. Wilayah dengan Efisiensi Pengiriman Terendah Setelah melakukan perhitungan efisiensi, kita dapat menentukan wilayah dengan efisiensi pengiriman terendah, yaitu wilayah yang memiliki nilai biaya per unit dan waktu pengiriman yang paling rendah.

Berdasarkan perhitungan, wilayah dengan efisiensi pengiriman terendah adalah Wilayah Tengah dengan nilai efisiensi sebesar 178.2857.

Artinya, pengiriman barang di wilayah Tengah memiliki kombinasi biaya per unit dan waktu pengiriman yang lebih efisien dibandingkan dengan wilayah lainnya.

  1. Kesimpulan
  • Wilayah Tengah menunjukkan efisiensi pengiriman terendah dengan efisiensi sebesar \(178.2857\).
  • Visualisasi 3D memberikan gambaran yang jelas tentang pengaruh jumlah barang, waktu pengiriman, dan biaya per unit terhadap efisiensi pengiriman di berbagai wilayah.

Dengan informasi ini, perusahaan dapat lebih fokus pada wilayah Tengah untuk meningkatkan efisiensi pengiriman, baik dengan mengurangi biaya atau memperpendek waktu pengiriman guna mencapai performa yang lebih baik dalam pengelolaan logistik.

Soal 2. Rekomendasi Operasional

1. Wilayah yang Memerlukan Perhatian Khusus

  • Wilayah Tengah adalah wilayah yang menunjukkan efisiensi pengiriman terendah. Meskipun biaya per unitnya tidak terlalu tinggi, waktu pengiriman di wilayah ini cukup panjang (jam) dibandingkan dengan wilayah lainnya.
  • Wilayah ini perlu diperhatikan karena kombinasi biaya dan waktu yang tinggi dapat mempengaruhi profitabilitas perusahaan serta kepuasan pelanggan.
  • Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah tersebut?

2. Rekomendasi untuk Mengurangi Biaya dan Waktu Pengiriman di Wilayah Tengah

Berdasarkan hasil analisis, beberapa rekomendasi yang dapat diterapkan untuk mengurangi biaya dan waktu pengiriman di Wilayah Tengah adalah:

  • Optimalkan Rute Pengiriman::
    • Melakukan analisis rute pengiriman untuk mengidentifikasi apakah rute yang digunakan sudah efisien. Penggunaan teknologi seperti sistem manajemen transportasi (TMS) dapat membantu untuk merencanakan rute terbaik yang meminimalkan waktu dan biaya.
    • Penggunaan kendaraan dengan kapasitas yang lebih sesuai untuk jumlah barang yang dikirim juga bisa mengurangi waktu dan biaya pengiriman.
  • Peningkatan Pengelolaan Waktu Pengiriman:
    • Melakukan perbaikan dalam manajemen logistik untuk mengurangi waktu tunggu di titik distribusi dan mempercepat proses loading dan unloading barang.
    • Mengoptimalkan jam operasional gudang dan distribusi untuk mempersingkat waktu pengiriman dari pusat distribusi ke konsumen.

Soal 3. Analisis Kinerja Pengiriman Berdasarkan Jenis Barang dan Wilayah

Untuk menganalisis kinerja pengiriman berdasarkan jenis barang dan wilayah, kita akan melihat dua faktor utama: waktu pengiriman dan biaya per unit.

Tujuan dari analisis ini adalah untuk mengidentifikasi jenis barang dan wilayah yang memiliki:

  • Waktu pengiriman lebih cepet.
  • Biaya per unit lebih rendah.

1. Pengelompokan Berdasarkan Jenis Barang dan Wilayah

Sebelum melakukan analisis lebih lanjut, kita akan membagi data berdasarkan jenis barang dan wilayah. Berikut adalah dua metrik utama yang akan dianalisis:

  • **Waktu Pengiriman (Jam): Berapa lama waktu yang dibutuhkan untuk pengiriman.
  • Biaya per Unit: Biaya per unit barang yang dikirim.

2. Wilayah dengan Kinerja Terbaik Berdasarkan Waktu Pnegiriman dan Biaya per Unit

Dari analisis kinerja pengiriman berdasarkan wilayah, kita dapat mengidentifikasi wilayah yang menunjukkan pengiriman lebih cepat dan biaya lebih rendah:

  • Wilayah Utara untuk Pakaian dan Elektronik memiliki biaya per unit yang lebih rendah dan waktu pengiriman yang lebih cepat dibandingkan dengan wilayah lainnya.
  • Wilayah Timur menunjukkan waktu pengiriman yang lebih cepat pada Makanan dibandingkan wilayah lainnya.

3. Kesimpulan

Berdasarkan analisis, kita dapat menyimpulkan bahwa:

  • Jenis barang dengan waktu pengiriman lebih cepat: Makanan.
  • Jenis barang dengan biaya per unit lebih rendah: Pakaian.
  • Wilayah dengan kinerja pengiriman terbaik:
    • Wilayah Utara memiliki biaya lebih rendah dan waktu pengiriman lebih cepat untuk Elektronik dan Pakaian.
    • Wilayah Timur memiliki waktu pengiriman yang lebih cepat untuk Makanan.

Untuk meningkatkan kinerja pengiriman secara keseluruhan, perusahaan dapat lebih fokus pada Makanan di wilayah Timur yang memiliki waktu pengiriman yang lebih cepat, serta pada Pakaian di wilayah Utara untuk mengurangi biaya per unit dan meningkatkan efisiensi.

Kesimpulan AKhir

Penyebaran data menunjukkan perbedaan signifikan dalam efisiensi pengiriman antar wilayah dan jenis barang. Wilayah Tengah memerlukan perhatian lebih untuk mengoptimalkan biaya dan waktu pengiriman, sementara wilayah Utara dan Timur dapat dijadikan model untuk efisiensi yang lebih baik. Strategi pengelolaan yang disesuaikan dengan pola penyebaran ini dapat meningkatkan efisiensi operasional perusahaan.

Refrensi

  • DSciencelabs. (n.d.) Pengantar Statistika untuk Sains Data. Bookdown. Retrieved from Klik disini
  • Dr. Anita Rahayu, S.Si., M.Si.Ukuran Penyebaran Data. Binus University. Bookdown. Retrived from klik disini
  • Khatib A. Latief.Ukuran Penyebaran Data.UIN. Bookdown. Retrived from m Klik disini
LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiAxMSINCg0KYXV0aG9yOiANCiAgICAtICJOYWJpbGEgQW5nZ2l0YSBQdXRyaSINCg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIA0KICANCi0tLQ0KPGltZyBzcmM9ImltZy9wcm9maWxlLmpwZyIgYWx0PSJwcm9maWxlIiBpZD0ibG9nby11dGFtYSIgc3R5bGU9IndpZHRoOjMwMHB4OyBheTogZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiLz4NCg0KDQoNCg0KIyBVa3VyYW4gUGVueWViYXJhbiBEYXRhDQoqKkRlZmluaXNpIFVrdXJhbiBQZW55ZWJhcmFuIERhdGEqKiAtPiBJeWFsYWggc3VhdHUga29uc2VwIGRhbGFtIHN0YXRpc3Rpa2EgeWFuZyBtZW5nZ2FtYmFya2FuIHNlamF1aCBtYW5hIG5pbGFpLW5pbGFpIGRhbGFtIHN1YXRhdSBkYXRhc2V0IHRlcnNlYmFyIGF0YXUgYmVydmFyaWFzaSBkYXJpIG5pbGFpIHB1c2F0IChtaXNhbG55YSByYXRhLXJhdGEsIG1lZGlhbikuIFVrdXJhbiBpbmkgbWVtYmVyaWthbiBpbmZvcm1hc2kgdGVudGFuZyBkaXN0cmlidXNpIGRhdGEsIG1lbWJhbnR1IG1lbmdpZGVudGlmaWthc2kgdGluZ2thdCBrZWhvbW9nZW5hbiBhdGF1IGtlaGV0ZXJvZ2VuYW4gZGF0YSwgc2VydGEgbWVuZGV0ZWtzaSBrZWJlcmFkYWFuIG91dGxpZXIuDQoNCiMgQS4gSmFuZ2thdWFuIChSYW5nZSkNCiMjICoqMS4gRGVmaW5pc2kgSmFuZ2thdWFuIChSYW5nZSkqKiANCmFkYWxhaCBzdWF0YXUgdWt1cmFuIHBlbnllYmFyYW4gZGF0YSB5YW5nIHBhbGluZyBzZWRlcmhhbmEsIHlhbmcgbWVudW5qdWtrYW4gc2VsaXNpaCBhbnRhcmEgbmlsYWkgbWFrc2ltdW0gZGFuIG5pbGFpIG1pbmltdW0gZGFsYW0gc3VhdHUgZGF0YXNldC4gSmFuZ2thdWFuIG1lbWJlcmlrYW4gZ2FtYmFyYW4ga2FzYXIgdGVudGFuZyByZW50YW5nIGRpc3RyaWJ1c2kgZGF0YS4NCg0KIyMgKioyLiBSdW11cyoqOg0KXFsNClx0ZXh0e1JhbmdlfSA9IFx0ZXh0e05pbGFpIE1ha3NpbXVtfSAtIFx0ZXh0e05pbGFpIE1pbmltdW19DQpcXQ0KKipDb250b2gqKjoNCg0KSmlrYSBzZWJ1YWggZGF0YXNldCBtZW1pbGlraSBuaWxhaTogJDMsIDcsIDgsIDE1LCAyMiQNCg0KLSBOaWxhaSBtYWtzaW11bSA9ICQyMiQNCi0gTmlsYWkgbWluaW11bSA9ICQzJA0KDQpNYWthLCBqYW5na2F1YW4gKHJhbmdlKSBhZGFsYWg6DQpcWw0KXHRleHR7UmFuZ2V9ID0gMjIgLSAzID0gMTkNClxdDQoNCiMjICoqMy4gS2VsZWJpaGFuKio6DQoNCi0gTXVkYWggZGloaXR1bmcNCi0gTWVtYmVyaWthbiBpbmZvcm1hc2kgZGFzYXIgdGVudGFuZyByZW50YW5nIGRpc3RyaWJ1c2kgZGF0YS4NCg0KIyMgKio0LiBLZWt1cmFuZ2FuKio6DQoNCi0gVGlkYWsgbWVtcGVyaGl0dW5na2FuIGRpc3RyaWJ1c2kgZGF0YSBkaSBhbnRhcmEgbmlsYWktbmlsYWkgdGVyc2VidXQuDQotIFNhbmdhdCBzZW5zaXRpZiB0ZXJoYWRhcCBvdXRsaWVyIChuaWxhaSBla3N0cmVtKS4NCg0KSmFuZ2thdWFuIGJpYXNhbnlhIGRpZ3VuYWthbiBzZWJhZ2FpIGxhbmdrYWggYXdhbCB1bnR1ayBtZW1haGFtaSBzZWJhcmFuIGRhdGEgc2ViZWx1bSBtZW5nZ3VuYWthbiB1a3VyYW4gcGVueWViYXJhbiBsYWlubnlhIHlhbmcgIGxlYmloIGtvbXBsZWtzLCBzZXBlcnRpIHZhcmlhbnMgYXRheSBzdGFuZGFyIGRldmlhc2kuDQoNCiMgQi4gSmFuZ2thdWFuIEFudGFyIEt1YXJ0aWwgKElRUikNCiMjICoqMS4gRGVmaW5pc2kgSVFSKioNCkphbmdrYXVhbiBBbnRhciBLdWFydGlsIGFkYWxhaCB1a3VyYW4gcGVueWViYXJhbiBkYXRhIHlhbmcgbWVuZ2dhbWJhcmthbiByZW50YW5nIGFudGFyYSBrdWFydGlsIGtldGlnYSQoUTMpJCBkYW4ga3VhcnRpbCBwZXJ0YW1hICQoUTEpJC4gSVFSIG1lbnVuanVrYW4gcmVudGFuZyBuaWxhaSB0ZW5nYWggZGFyaSBkYXRhc2V0LCB5YWl0dSBkYXRhIHlhbmcgYmVyYWRhIGRpIGFudGFyYSAyNSUgaGluZ2dhIDc1JSBkaXN0cmlidXNpLg0KDQojIyAqKjIuIFJ1bXVzKio6DQpcWw0KXHRleHR7SVFSfSA9IFFfMyAtIFFfMQ0KXF0NCg0KLSAqKiRRMSQgKEt1YXJ0aWwgUGVydGFtYSkqKjogTmlsYWkgeWFuZyBtZW1pc2Foa2FuIDI1JSBkYXRhIHRlcmtlY2lsIGRhcmkgc2lzYW55YS4NCi0gKiokUTMgKEt1YXJ0aWwgS2V0aWdhKSoqOiBOaWxhaSB5YW5nIG1lbWlzYWhrYW4gMjUlIGRhdGEgdGVyYmVzc2FyIGRhcmkgc2lzYW55YS4NCg0KIyMgKiozLiBDb250b2gqKjoNCg0KSmlrYSBzZWJ1YWggZGF0YXNldCBtZW1pbGlraSBuaWxhaToNClxbDQo1LCA3LCA4LCAxMiwgMTUsIDE4LCAyMA0KXF0NCg0KMS4gVXJ1dGthbiBkYXRhLg0KMi4gVGVudHVrYW4gJFExJCAoa3VhcnRpbCBwZXJ0YW1hKTogTWVkaWFuIGRhcmkgc2V0ZW5nYWggZGF0YSBwZXJ0YW1hICQoNSwgNywgOCkkIGFkYWxhaCAkNyQuDQozLiBUZW50dWthbiAkUTMkIChrdWFydGlsIGtldGlnYSk6IE1lZGlhbiBkYXJpIHNldGVuZ2FoIGRhdGEga2VkdWEgJCgxNSwgMTgsIDIwKSQgYWRhbGFoICQxOCQuDQo0LiBIaXR1bmcgSVFSOg0KXFsNCklRUiA9IFEzIC0gUTEgPSAxOCAtIDcgPSAxMQ0KXF0NCg0KIyMgKio0LiBGdW5nc2kgSVFSKio6DQoNCi0gTWVuZ3VrdXIga29uc2VudHJhc2kgbmlsYWkgdGVuZ2FoIGRhbGFtIGRhdGFzZXQuDQotIE1lbWJhbnR1IG1lbmdpZGVudGlmaWthc2kgb3V0bGllcjogZGF0YSB5YW5nIGphdWggZGFyaSBsdWFyIHJlbnRhbmcgXFsNClFfMSAtIDEuNSBcdGltZXMgXHRleHR7SVFSfSBccXVhZCBcdGV4dHthdGF1fSBccXVhZCBRXzMgKyAxLjUgXHRpbWVzIFx0ZXh0e0lRUn0gXHF1YWQgXHRleHR7ZGlhbmdnYXAgc2ViYWdhaSBvdXRsaWVyLn0NClxdDQoNCklRUiBsZWJpaCBzdGFiaWwgdGVyaGFkYXAgb3V0bGllciBkaWJhbmRpbmdrYW4gamFuZ2thdWFuIChyYW5nZSkga2FyZW5hIGhhbnlhIG1lbmdnZ3VuYWthbiBuaWxhaSB0ZW5nYWggZGlzdHJpYnVzaSBkYXRhLg0KDQojIEMuIFZhcmlhbnMNCiMjICoqMS4gRGVmaW5pc2kgVmFyaWFucyoqDQpWYXJpYW5zIGFkYWxhaCB1a3VyYW4gcGVueWViYXJhbiBkYXRhIHlhbmcgbWVudW5qdWthbiBzZWphdWggbWFuYSBuaWxhaS1uaWxhaSBkYWxhbSBkYXRhc2V0IHRlcnNlYmFyIGF0YXUgYmVyYmVkYSBkYXJpIG5pbGFpIHJhdGEtcmF0YSAobWVhbikuIFZhcmlhbnMgbWVuZ3VrdXIgcmF0YS1yYXRhIGt1YWRyYXQgZGV2aWFzaSAoc2VsaXNpaCkgc2V0aWFwIG5pbGFpIGRhdGEgdGVyaGFkYXAgbmlsYWkgcmF0YS1yYXRhLg0KDQojIyAqKjIuIFJ1bXVzIFZhcmlhbnMqKjoNClVudHVrIGRhdGFzZXQgZG5lZ2FuICRuJCBkYXRhLCB2YXJpYW5zIGRpaGl0dW5nIGRlbmdhbiBydW11czoNCg0KLSAqKlZhcmlhbnMgdW50dWsgcG9wdWxhc2kqKjoNClxbDQpcc2lnbWFeMiA9IFxmcmFjezF9e059IFxzdW1fe2k9MX1ee059ICh4X2kgLSBcbXUpXjINClxdDQpEaSBtYW5hOg0KDQotICRcc2lnbWFeMiQgYWRhbGFoIHZhcmlhbnMgcG9wdWxhc2kuDQotICROJCBhZGFsYWgganVtbGFoIGRhdGEgZGFsYW0gcG9wdWxhc2kuDQotICRYX2kkIGFkYWxhaCBuaWxhaSBpbmRpdmlkdWFsIGRhbGFtIGRhdGEuDQotICRcbXUkIGFkYWxhaCByYXRhLXJhdGEgcG9wdWxhc2kuDQoNClVudHVrIHNhbXBlbCwgdmFyaWFucyBkaXJ1bXVza2FuIHNlYmFnYWk6DQpcWw0Kc14yID0gXGZyYWN7MX17bi0xfSBcc3VtX3tpPTF9Xm4gKHhfaSAtIFxiYXJ7eH0pXjINClxdDQoNCiMjICoqMy4gSW50ZXJwcmV0YXNpKio6DQoNCi0gKipWYXJpYW5zIHRpbmdnaSoqIG1lbnVuanVrYW4gYmFod2EgZGF0YSBtZW1pbGlraSBwZW55ZWJhcmFuIHlhbmcgYmVzYXIgKGRhdGEgbGViaWggamF1aCBkYXJpIHJhdGEtcmF0YSkuDQotICoqVmFyaWFucyByZW5kYWgqKm1lbnVuanVra2FuIGJhaHdhIGRhdGEgbGViaWggdGVya29uc2VudHJhc2kgZGkgc2VraXRhciByYXRhLXJhdGEuDQoNCiMjICoqNC4gQ29udG9oKioNCkppa2EgZGF0YSANClxbDQpbMiwgNCwgNiwgOF06DQpcXQ0KDQoxLiBIaXR1bmcgcmF0YS1yYXRhOg0KXFsNClxiYXJ7WH0gPSBcZnJhY3syICsgNCArIDYgKyA4fXs0fSA9IDUNClxdDQoyLiBIaXR1bmcgc2Vsc2loIGt1YWRyYXQgc2V0aWFwIGRhdGEgZGFyaSByYXRhLXJhdGE6DQpcWw0KKDIgLSA1KV4yLCAoNCAtIDUpXjIsICg2IC0gNSleMiwgKDggLSA1KV4yIFxpbXBsaWVzIDksIDEsIDEsIDkNClxdDQozLiBIaXR1bmcgcmF0YS1yYXRhIHNlbGlzaWgga3VhZHJhdCB0ZXJzZWJ1dDoNCg0KLSBKaWthIHBvcHVsYXNpOiBcWyBcZnJhY3s5ICsgMSArIDEgKyA5fXs0fSA9IDUgXF0NCi0gSmlrYSBzYW1wZWw6IFxbIFxmcmFjezkgKyAxICsgMSArIDl9ezN9ID0gNi42N1xdDQoNClZhcmlhbnMgZGlndW5ha2FuIGRhbGFtIGJlcmJhZ2FpIGJpZGFuZywgdGVybWFzdWsgc3RhdGlzdGlrLCBla29ub21pLCBkYW4gbWFjaGluZSBsZWFybmluZyx1bnR1ayBtZW5ndWt1ciBwZW55ZWJhcmFuIGRhdGEuDQoNCg0KIyAqKkQuIFN0YW5kYXIgRGV2aWFzaSoqDQoNCiMjICoqMS4gRGVmaW5pc2kgU3RhbmRhciBEZXZpYXNpKioNClN0YW5kYXIgRGV2aWFzaSBhZGFsYWggdWt1cmFuIHN0YXRpc3RpayB5YW5nIG1lbnVuanVra2FuIHNlYmVyYXBhIHRlcnNlYmFyIGF0YXUgYmVydmFyaWFzaW55YSBkYXRhIGRhcmkgbmlsYWkgcmF0YS1yYXRhIChtZWFuKSBkYWxhbSBzdWF0dSBkaXN0cmlidXNpLiBTdGFuZGFyIGRldmlhc2kgbWVtYmVyaWthbiBnYW1iYXJhbiBzZWJlcmFwYSBqYXVoIHNldGlhcCBkYXRhIGRhbGFtIGt1bXB1bGFuIHRlcnNlYnV0IGRhcmkgbmlsYWkgcmF0YS1yYXRhLg0KDQojIyAqKjIuIERlZmluaXNpIE1hdGVtYXRpa2EqKjoNClN0YW5kYXIgZGV2aWFzaSBkaWhpdHVuZyBkZW5nYW4gcnVtdXM6DQpcWw0Kc2lnbWEgPSBcc3FydHtcZnJhY3sxfXtufSBcc3VtX3tpPTF9XntufSAoeF9pIC0gXG11KV4yfQ0KXF0NCg0KKipQZW5qZWxhc2FuIEtvbXBvbmVuKio6DQoNCi0gJFxzaWdtYSQ6IFN0YW5kYXIgZGV2aWFzaS4NCi0gJFhfaSQ6IFNldGlhcCBuaWxhaSBkYWxhbSBrdW1wdWxhbiBkYXRhLg0KLSAkXG11JDogUmF0YS1yYXRhIGRhcmkgc2VsdXJ1aCBkYXRhLg0KJG4kOiBKdW1sYWggZGF0YS4NCg0KIyMgKiozLiBGdW5nc2kgU3RhbmRhciBEZXZpYXNpKio6DQoNCi0gTWVuZ3VrdXIgKipWYXJpYWJpbGl0YXMqKiBkYXRhOiBTZW1ha2luIGtlY2lsIHN0YW5kYXIgZGV2aWFzaSwgc2VtYWtpbiBkZWthdCBkYXRhIGRlbmdhbiByYXRhLXJhdGEsIGRhbiBzZWJhbGlrbnlhLg0KLSBNZW1iYW50dSBkYWxhbSAqKkFuYWxpc2lzIHJpc2lrbyoqIGF0YXUgKipWYXJpYWJpbGl0YXMgaGFzaWwqKiwgbWlzYWxueWEgZGFsYW0ga2V1YW5nYW4gZGFuIHN0YXRpc3Rpay4NCi0gTWVtYWhhbWkgKipQZW55ZWJhcmFuKiogZGF0YSBkYWxhbSBzdWF0dSBkaXN0cmlidXNpIG5vcm1hbC4NCg0KKipKZW5pcyBTdGFuZGFyIERldmlhc2kqKjoNCjEuICoqUG9wdWxhc2kqKiBkaWd1bmFrYW4gc2FhdCBzZWx1cnVoIHBvcHVsYXNpIGRhdGEgZGlrZXRhaHVpLg0KW1wNClxzaWdtYSA9IFxzcXJ0e1xzdW1fe2k9MX1ee259ICh4X2kgLSBcbXUpXjJ9DQpcXQ0KMi4gKipTYW1wZWwqKiBkaWd1bmFrYW4gc2FhdCBoYW55YSBzZWJhZ2lhbiBkYXRhIChzYW1wZWwpIHlhbmcgZGlhbmFsaXNpcy4NClxbDQpzID0gXHNxcnR7XGZyYWN7MX17bi0xfSBcc3VtX3tpPTF9XntufSAoeF9pIC0gXGJhcnt4fSleMn0NClxdDQoNCg0KIyMgKio0LiBDb250b2gqKjoNCk1pc2Fsa2FuIGt1bXB1bGFuIGRhdGEgYWRhbGFoOiAkMiwgNCwgNiwgOCwgMTAkLg0KDQoxLiBIaXR1bmcgcmF0YS1yYXRhICQoXG11KSQ6ICQoMiArIDQgKyA2ICsgOCArIDEwKS8gNSA9IDYkDQoyLiBIaXR1bmcgc2VsaXNpaCBzZXRpYXAgZGF0YSBkYXJpIHJhdGEtcmF0YSwga3VhZHJhdGthbiwgbGFsdSBjYXJpIHJhdGEtcmF0YSBrdWFkcmF0IHRlcnNlYnV0Lg0KMy4gQW1iaWwgYWthciBrYXVkcmF0IGRhcmkgcmF0YS1yYXRhIGt1YWRyYXQuDQoNCkRlbmdhbiBoYXNpbG55YSwgQW5kYSBtZW5nZXRhaHVpIGJhZ2FpbWFuYSBkYXRhIG1lbnllYmFyIGRhcmkgcmF0YS1yYXRhLg0KDQoNCiMgKipFLiBLb2VmaXNpZW4gVmFyaWFzaSoqDQoNCiMjICoqMS4gRGVmaW5pc2kgS29lZmlzaWVuKioNCktvZWZpc2llbiBWYXJpYXNpIChDVikgYWRhbGFoIHN0YXRpc3RpayB5YW5nIG1lbnVuanVra2FuIHRpbmdrYXQgdmFyaWFzaSBkYWxhbSBzdWF0dSBkYXRzZXQgcmVsYXRpZiB0ZXJoYWRhcCByYXRhLXJhdGEgZGF0YXNldCB0ZXJzZWJ1dC4gQ1YgZGlndW5ha2FuIHVudHVrIG1lbWJhbmRpbmdrYW4gdmFyaWFzaSBkYXRhIGFudGFyIGdydXAgYXRhdSBkYXRhc2V0IHlhbmcgbWVtaWxpa2kgc2F0dWFuIGF0YXUgc2thbGEgeWFuZyBiZXJiZWRhLg0KDQojIyAqKjIuIFJ1bXVzIEtvZWZpc2llbiBWYXJpc2kqKjoNClxbDQpDViA9IFxsZWZ0KCBcZnJhY3tcc2lnbWF9e1xtdX0gXHJpZ2h0KSBcdGltZXMgMTAwDQpcXQ0KRGkgbWFuYToNCg0KLSAkXHNpZ21hJCA9IFNpbXBhbmdhbiBiYWt1IChzdGFuZGFyIGRldmlhc2kpLg0KLSAkXG11JCA9IFJhdGEtcmF0YSAobWVhbikuDQotICRDViQgPSBLb2VmaXNpZW4gdmFyaWFzaSBkYWxhbSBiZW50dWsgcHJlc2VudGFzZS4NCg0KIyMgKiozLiBQZW5qZWxhc2FuIEVsZW1lbiBkYWxhbSBSdW11cyoqDQoNCjEuICoqU2ltcGFuZ2FuIEJha3UgKFN0YW5kYXJkIERldmlhdGlvbikqKiA6IFNpbXBhbmdhbiBiYWt1ICRcc2lnbWEkIG1lbmd1a3VyIHNlYmVyYXBhIGJlc2FyIGRhdGEgdGVyYmVzYXIgZGFyaSByYXRhLXJhdGEuIFNlbWFraW4gYmVzYXIgc2ltcGFuZ2FuIGJha3UsIHNlbWFraW4gYmVzYXIgcGVueWViYXJhbiBkYXRhLg0KMi4gKipSYXRhLXJhdGEgKE1lYW4pKio6IFJhdGEtcmF0YSAkXG11JCBhZGFsYWggbmlsYWkgcHVzYXQgZGFyaSBkYXRhLCB5YW5nIGRpaGl0dW5nIGRlbmdhbiBtZW5qdW1sYWhrYW4gc2VtdWEgbmlsYWkgZGF0YSBkYW4gbWVtYmFnaW55YSBkZW5nYW4ganVtbGFoIGRhdGEuDQozLiAqKktvZWZpc2llbiBWYXJpYXNpIChDVikqKjogQ1YgbWVtYmVyaWthbiBnYW1iYXJhbiB0ZW50YW5nIHRpbmdrYXQgdmFyaWFzaSBkYXRhIHJlbGF0aWYgdGVyaGFkYXAgcmF0YS1yYXRhLCBsYWx1IG1lbmdhbGlrYW4gaGFzaWwgcGVtYmFnaWFuIHNpbXBhbmdhbiBiYWt1IGRlbmdhbiByYXRhLXJhdGEsIGxhbHUgbWVuZ2FsaWthbm55YSBkZW5nYW4gJDEwMCQsIGtpdGEgbWVtcGVyb2xlaCBwZXJzZW50YXNlIHZhcmlhc2kgeWFuZyBsZWJpaCBtdWRhaCBkaWJhbmRpbmdrYW4gZGVuZ2FuIHNhdHVhbiBhc2xpIGRhdGEuDQoNCiMjICoqNC4gSW50ZXJwcmV0YXNpIEtvZWZpc2llbiBWYXJpYXNpKioNCg0KLSAqKkNWIHJlbmRhaCoqOiBKaWthIHJlbGF0aWYgcmVuZGFoLCBpdHUgbWVudW5qdWtrYW4gYmFod2EgZGF0YSBsZWJpaCB0ZXJrb25zZW50cmFzaSBkaSBzZWtpdGFyIHJhdGEtcmF0YS4gVmFyaWFzaSBkYWxhbSBkYXRhIGtlY2lsIGRpYmFuZGluZ2thbiBkZW5nYW4gcmF0YS1yYXRhLg0KXyAqKkNWIHRpbmdnaSoqOiBKaWthIENWIHRpbmdnaSwgaXR1IG1lbnVuanVra2FuIGJhaHdhIGRhdGEgbGViaWggdGVyc2ViYXIuIFZhcmlhc2kgZGFsYW0gZGF0YSBiZXNhciBkaWJhbmRpbmdrYW4gZGVuZ2FuIHJhdGEtcmF0YS4NCg0KIyMgKio1LiBDb250b2ggUGVuZ2d1bmFuIGtvZWZpc2llbiBWYXJpYXNpKioNCk1pc2Fsa2FuIGFkYSBkdWEga29sb21wb2sgc2lzd2EgeWFuZyBtZW5naWt1dGkgdWppYW4gbWF0ZW1hdGlrYToNCg0KLSBLZWxvbXBvayBBIG1lbWlsaWtpIHJhdGEtcmF0YSBuaWxhaSAkODAkIGRhbiBzaW1wYW5nYW4gYmFrdSAkNSQuDQotIEtlbG9tcG9rIEIgbWVtaWxpa2kgcmF0YS1yYXRhIG5pbGFpICQ5MCQgZGFuIHNpbXBhbmdhbiBiYWt1ICQxMCQuDQoNCioqTWVuZ2hpdHVuZyBDViB1bnR1ayBrZWR1YSBrZWxvbXBvayoqOg0KDQoxLiAqKktlbG9tcG9rIEEqKg0KXFsNCkNWX0EgPSBcbGVmdCggXGZyYWN7NX17ODB9IFxyaWdodCkgXHRpbWVzIDEwMCA9IDYuMjVcJQ0KXF0NCjIuICoqS2Vsb21wb2sgQioqDQpcWw0KQ1ZfQiA9IFxsZWZ0KFxmcmFjezEwfXs5MH1ccmlnaHQpIFx0aW1lcyAxMDAgPSAxMS4xMSUNClxdDQoNCkRhcmkgcGVyaGl0dW5nYW4gZGkgYXRhcywgbWVza2lwdW4ga2Vsb21wb2sgQiBtZW1pbGlraSByYXRhLXJhdGEgeWFuZyBsZWJpaCB0aW5nZ2ksIHZhcmlhc2kgKGF0YXUgc2ViYXJhbikgbmlsYWkgZGFsYW0ga2Vsb21wb2sgQiBsZWJpaCBiZXNhciwgc2ViYWdhaW1hbmEgZGl0dW5qdWtrYW4gb2xlaCBuaWxhaSBDViB5YW5nIGxlYmloIHRpbmdnaS4NCg0KIyAqKkYuIFJlbnRhbmcgU2VtaS1JbnRlcmt1YXJ0aWwqKg0KDQojIyAqKjEuIERlZmluaXNpIFJlbnRhbmcgU2VtaS1JbnRlcmt1YXJ0aWwqKg0KUmVudGFuZyBTZW1pLUludGVya3VhcnRpbCBhZGFsYWggc2FsYWggc2F0dSBqZW5pcyByZW50YW5nIGRhbGFtIGFuYWxpc2lzIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5ndWt1ciB2YXJpYWJpbGl0YXMgYXRhdSBwZW55ZWJhcmFuIGRhdGEuIFJlbnRhbmcgaW5pIGRpaGl0dW5nIGRlbmdhbiBjYXJhIG1lbmd1cmFuZ2kgbmlsYXIga3VhcnRpbCBwZXJ0YW1hICQoUTEpJCBkYXJpIG5pbGFpIGt1YXJ0aWwga2V0aWdhICQoUTMpJC4gRGVuZ2FuIGthdGEgbGFpbiwgcmVudGFuZyBzZW1pLWludGVya3VhcnRpbCAoYXRhdSBkaXNlYnV0IGp1Z2EgKmludGVycXVhcnRpbGUgcmFuZ2UgLyBJUVIqKSBtZW5nZ2FtYmFya2FuIHNlYmFyYW4gZGF0YSBwYWRhIDUwJSB0ZW5nYWggZGFyaSBrdW1wdWxhbiBkYXRhIHlhbmcgdGVsYWggZGl1cnV0a2FuLg0KDQojIyAqKjIuIFJ1bXVzIFJlbnRhbmcgU2VtaS1JbnRlcmt1YXJpbCAoSVFSKSoqDQpSZW50YW5nIFNlbWktSW50ZXJrdWFydGlsIGRpaGl0dW5nIG1lbmdndW5ha2FuIHJ1bXVzOg0KXFsNCklRUiA9IFFfMyAtIFFfMQ0KXF0NCg0KRGkgbWFuYTogDQoNCi0gJFExJCA9IEt1YXJ0aWwga2V0aWdhIChuaWxhaSBwYWRhIHBvc2lzaSBrZSA3NSUgZGF0YSkNCi0gJFExJCA9IEt1YXJ0aWwgcGVydGFtYSAobmlsYWkgcGFkYSBwb3Npc2kga2UgMjUlIGRhdGEpDQoNCiMjICoqMy4gTGFuZ2thaC1sYW5na2FoIE1lbmdoaXR1bmcgUmVudGFuZyBTZW1pLUludGVya3VhcnRpbCAoSVFSKSoqDQpVbnR1ayBtZW5naGl0dW5nIElRUiwgYmVyaWt1dCBhZGFsYWggbGFuZ2thaC1sYW5na2FoIGRpbGFrdWthbjoNCg0KKipMYW5na2FoIDE6IFVydXRrYW4gRGF0YSoqDQoNCkxhbmdrYWggcGVydGFtYSB5YWl0dSBtZW5ndXJ1dGthbiBkYXRhIGRhbGFtIHVydXRhbiBtZW5haWsgKGRhcmkgeWFuZyB0ZXJrZWNpbCBoaW5nZ2EgdGVyYmVzYXIpLg0KQ29udG9oIGRhdGE6ICQzLDcsOCwxMiwxNCwxOCwxOSwyMSwyMiwzMCQNCg0KKipMYW5na2FoIDI6IFRlbnR1a2FuIEt1YXJ0aWwgUGVydGFtYSAoUTEpKioNCg0KS3VhcnRpbCBwZXJ0YW1hIChRMSkgYWRhbGFoIG1lZGlhbiBkYXJpIGRhdGEgYmFnaWFuIGJhd2FoIChuaWxhaSB5YW5nIHRlcmxldGFrIGRpIGJhd2FoIG1lZGlhbiBrZXNlbHVydWhhbikuIERhdGEgaW5pIGRpYmFnaSBtZW5qYWRpIGR1YSBiYWdpYW4sIGRhbiBRMSBhZGFsYWggbWVkaWFuIGRhcmkgYmFnaWFuIHlhbmcgbGViaWgga2VjaWwuDQoNCioqTGFuZ2thaCAzOiBUZW50dWthbiBLdWFydGlsIChRMykqKg0KDQpLdWFydGlsIGtldGlnYSAoUTMpIGFkYWxhaCBtZWRpYW4gZGFyaSBkYXRhIGJhZ2lhbiBhdGFzIChuaWxhaSB5YW5nIHRlcmxldGFrIGRpIGF0YXMgbWVkaWFuIGtlc2VsdXJ1aGFuKS4gRGF0YSBpbmkgZGliYWdpIG1lbmphZGkgZHVhIGJhZ2lhbiwgZGFuIFEzIGFkYWxhaCBtZWRpYW4gZGFyaSBiYWdpYW4geWFuZyBsZWJpaCBiZXNhci4NCg0KKipMYW5nYWtoIDQ6IEhpdHVuZyBJUVIqKg0KDQpTZXRlbGFoIG1lbmVtdWthbiBuaWxhaSBRMSBkYW4gUTMsIElRUiBkYXBhdCBkaWhpdHVuZyBkZW5nYW4gbWVuZ3VyYW5na2FuIFExIGRhcmkgUTM6DQpcWw0KSVFSID0gUV8zIC0gUV8xDQpcXQ0KDQojIyAqKjQuIENvbnRvaCBQZXJoaXR1bmdhbiBJUVIqKg0KTWlzYWxrYW4ga2l0YSBtZW1pbGlraSBkYXRhIGJlcmlrdXQgeWFuZyBzdWRhaCBkaXVydXRrYW46ICQxLDQsNyw5LDEyLDE1LDE4LDIwLDI1LDMwJA0KDQotICoqTWVkaWFuIChRMikqKjogTmlsYWkgdGVuZ2FoIGRhcmkgZGF0YSBhZGFsYWggJDEyJCAobmlsYWkgcGFkYSBwb3Npc2kgJDUkIGRhbiAkNiQpLg0KLSAqKkt1YXJ0aWwgcGVydGFtYSAoUTEpKio6IE1lZGlhbiBkYXJpICQxLCA0LCA3LCA5LCAxMiQgYWRhbGFoICQ3JA0KLSAqKkt1YXJ0aWwga2V0aWdhIChRMykqKjogTWVpZGFuIGRhcmkgJDE1LCAxOCwgMjAsIDI1LCAzMCQgYWRhbGFoICQyMCQuDQoNCkphZGksIHBlcmhpdHVuZ2FuIElRUiBhZGFsYWg6DQpcWw0KSVFSID0gUTMgLSBRMSA9IDIwIC0gNyA9IDEzDQpcXQ0KDQoNCiMgKipMYXRpaGFuIDEqKg0KU2VidWFoIHBlcnVzYWhhYW4gaW5naW4gbWVtYWhhbWkga2FyYWt0ZXJpc3RpayBwZW55ZWJhcmFuIGRhdGEgaGFzaWwgcGVuanVhbGFuIGRhcmkgZW1wYXQgY2FiYW5nIChBLCBCLCBDLCBkYW4gRCkgc2VsYW1hIHNhdHUgYnVsYW4gdGVyYWtoaXIuIERhdGEgcGVuanVhbGFuIChkYWxhbSBqdXRhIHJ1cGlhaCkgZGFyaSBrZWVtcGF0IGNhYmFuZyB0ZXJzZWJ1dCBhZGFsYWggc2ViYWdhaSBiZXJpa3V0Og0KDQotIENhYmFuZyBBOiA1MCwgNTUsIDYwLCA2NSwgNzANCi0gQ2FiYW5nIEI6IDQwLCA1MCwgNjAsIDcwLCA4MA0KLSBDYWJhbmcgQzogMzAsIDMwLCAzNSwgNDAsIDQ1DQotIENhYmFuZyBEOiA3MCwgNzUsIDgwLCA4NSwgOTANCg0KIyAqKlNvYWwgMS4gSGl0dW5nbGFoIHJhdGEtcmF0YSwgbWVkaWFuLCBkYW4gc3RhbmRhciBkZXZpYXNpIHVudHVrIG1hc2luZy1tYXNpbmcgY2FiYW5nKiouDQoNCiMjICoqQ2FiYW5nIEEqKg0KDQpEYXRhOiAkWzUwLCA1NSwgNjAsIDY1LCA3MF0kDQoNCjEuICoqUmF0YS1yYXRhKio6IA0KXFsNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3s1MCArIDU1ICsgNjAgKyA2NSArIDcwfXs1fSA9IFxmcmFjezV9ezMwMH0gPSA2MA0KXF0NCjIuICoqTWVlZGlhbioqOg0KDQotIERhdGEgc3VkYWggdGVydXJ1dDogJFs1MCwgNTUsIDYwLCA2NSwgNzBdJA0KLSBNZWRpYW4gYWRhbGFoIG5pbGFpIHRlbmdhaDogJDYwJA0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOiANCg0KTGFuZ2thaDoNCg0KLSBIaXR1bmcgJChYXzEgLSBcbXUpXjIkIHVudHVrIHNldGlhcCBkYXRhOg0KXFsNCig1MCAtIDYwKV4yID0gMTAwLCAoNTUgLSA2MCleMiA9IDI1LCAoNjAgLSA2MCleMiA9IDAsICg2NSAtIDYwKV4yID0gMjUsICg3MCAtIDYwKV4yID0gMTAwDQpcXQ0KLSBKdW1sYWhsa2FuOg0KXFsNCjEwMCArIDI1ICsgMCArIDI1ICsgMTAwID0gMjUwDQpcXQ0KLSBTdGFuZGFyIGRldmlhc2k6IA0KXFsNClxzaWdtYSA9IFxzcXJ0e1xmcmFjezI1MH17NX19ID0gXHNxcnR7NTB9IFxhcHByb3ggNy4wNw0KXF0NCg0KIyMgKipDYWJhbmcgQioqDQoNCkRhdGE6ICRbNDAsIDUwLCA2MCwgNzAsIDgwXSQNCg0KMS4gKipSYXRhLXJhdGEqKjoNClxbDQpcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7NDAgKyA1MCArIDYwICsgNzAgKyA4MH17NX0gPSBcZnJhY3s1fXszMDB9ID0gNjANClxdDQoyLiAqKk1lZGlhbioqOg0KDQpNZWRpYW4gYWRhbGFoIG5pbGFpID0gJDYwJA0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOg0KDQpMYW5na2FoOg0KDQotIEhpdHVuZyAkKFhfMSAtIFxtdSleMiQgdW50dWsgc2V0aWFwIGRhdGE6DQpcWw0KKDQwIC0gNjApXjIgPSA0MDAsICg1MCAtIDYwKV4yID0gMTAwLCAoNjAgLSA2MCleMiA9IDAsICg3MCAtIDYwKV4yID0gMTAwLCAoODAgLSA2MCleMiA9IDQwMA0KXF0NCi0gSnVtbGFoa2FuOg0KXFsNCjQwMCArIDEwMCArIDAgKyAxMDAgKyA0MDAgPSAxMDAwDQpcXQ0KLSBTdGFuZGFyIGRldmlhc2k6DQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7MTAwMH17NX19ID0gXHNxcnR7MjAwfSBcYXBwcm94IDE0LjE0DQpcXQ0KDQojIyAqKkNhYmFuZyBDKioNCg0KRGF0YTogJFszMCwgMzAsIDM1LCA0MCwgNDVdJA0KDQoxLiAqKlJhdGEtcmF0YSoqOg0KXFsNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3szMCArIDMwICsgMzUgKyA0MCArIDQ1fXs1fSA9IFxmcmFjezV9ezE4MH0gPSAzNg0KXF0NCjIuICoqTWVkaWFuKio6DQoNCk1lZGlhbiBhZGFsYWggbmlsYWkgdGVuZ2FoID0gJDM1JA0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOg0KDQpMYW5na2FoOg0KDQotIEhpdHVuZyAkKFhfMSAtIFxtdSleMiQgdW50dWsgc2V0aWFwIGRhdGE6DQpcWw0KKDMwIC0gMzYpXjIgPSAzNiwgKDMwIC0gMzYpXjIgPSAzNiwgKDM1IC0gMzYpXjIgPSAxLCAoNDAgLSAzNileMiA9IDE2LCAoNDUgLSAzNileMiA9IDgxDQpcXQ0KLSBKdW1sYWhrYW46DQpcWw0KMzYgKyAzNiArIDEgKyAxNiArIDgxID0gMTcwDQpcXQ0KLSBTdGFuZGFyIGRldmlhc2k6DQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7MTcwfXs1fX0gPSBcc3FydHszNH0gXGFwcHJveCA1LjgzDQpcXQ0KDQoNCiMjICoqQ2FiYW5nIEQqKg0KDQpEYXRhOiAkWzcwLCA3NSwgODAsIDg1LCA5MF0kDQoNCjEuICoqUmF0YS1yYXRhKio6DQpcWw0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NX17NDAwfSA9IDgwDQpcXQ0KMi4gKipNZWRpYW4qKjoNCg0KTWVkaWFuIGFkYWxhaCBuaWxhaSB0ZW5nYWggPSAkODAkDQoNCjMuICoqU3RhbmRhciBEZXZpYXNpKio6DQoNCkxhbmdrYWg6DQoNCiBIaXR1bmcgJChYXzEgLSBcbXUpXjIkIHVudHVrIHNldGlhcCBkYXRhOg0KXFsNCig3MCAtIDgwKV4yID0gMTAwLCAoNzUgLSA4MCleMiA9IDI1LCAoODAgLSA4MCleMiA9IDAsICg4NSAtIDgwKV4yID0yNSwgKDkwIC0gODApXjIgPSAxMDANClxdDQotIEp1bWxhaGthbjoNClxbDQoxMDAgKyAyNSArIDAgKyAyNSArIDEwMCA9IDI1MA0KXF0NCi0gU3RhbmRhciBkZXZpYXNpOg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xmcmFjezI1MH17NX19ID0gXHNxcnR7NTB9IFxhcHByb3ggNy4wNw0KXF0NCg0KIyAqKlNvYWwgMi4gQ2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsPyBKZWxhc2thbiBhbGFzYW5ueWEqKi4NCg0KQ2FiYW5nIHlhbmcgbWVtaWxpa2kgKipwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsKiogYWRhbGFoICoqQ2FiYW5nIEMqKiwga2FyZW5hICoqc3RhbmRhciBkZXZpYXNpKiogZGFyaSBkYXRhIHBlbmp1YWxhbiBDYWJhbmcgQyBhZGFsYWggeWFuZyBwYWxpbmcgcmVuZGFoLCB5YWl0dSAkNSw4MyQganV0YQ0KDQoqKlBlbmplbGFzYW4qKjoNCg0KIyMgKioxLiBTdGFuZGFyIGRldmlhc2kqKiANClN0YW5kYXIgZGV2aWFzaSBhZGFsYWggdWt1cmFuIHN0YXRpc3RpayB5YW5nIG1lbmdnYW1iYXJrYW4gc2ViZXJhcGEgdGVyc2ViYXIgZGF0YSB0ZXJoYWRhcCByYXRhLXJhdGEuIFNlbWFraW4ga2VjaWwgbmlsYWkgc3RhbmRhciBkZXZpYXNpLCBzZW1ha2luIGRla2F0IGRhdGEgdGVyaGFkYXAgcmF0YS1yYXRhLCB5YW5nIGJlcmFydGkgcGVueWViYXJhbiBkYXRhIGxlYmloIGtlY2lsLg0KDQojIyAqKjIuIFBlcmJhbmRpbmdhbiBzdGFuZGFyIGRldmlhc2kgYW50YXIgY2FiYW5nKio6DQoNCi0gKipDYWJhbmcgQSoqID0gNywwNyBqdXRhDQotICoqQ2FiYW5nIEIqKiA9IDE0LDE0IGp1dGENCi0gKipDYWJhbmcgQyoqID0gNSw4MyBqdXRhIChwYWxpbmcga2VjaWwpDQotICoqQ2FiYW5nIEQqKiA9IDcsMDcganV0YQ0KDQojIyAqKjMuIEludGVycHJldGFzaSB1bnR1ayBDYWJhbmcgQyoqOg0KDQotIERhdGEgcGVuanVhbGFuIENhYmFuZyBDIGxlYmloIHNlcmFnYW0gYXRhdSBrb25zaXN0ZW4gZGliYW5kaW5na2FuIGNhYmFuZyBsYWlubnlhLg0KLSBSZW50YW5nIGRhdGEgZGkgQ2FiYW5nIEMganVnYSBsZWJpaCBzZW1waXQgJCgzMCQgaGluZ2dhICQ0NSkkDQoNCiMjIDQuICoqS2VzaW1wdWxhbm55YSoqOg0KQ2FiYW5nIEMgbWVtaWxpa2kgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbCBrYXJlbmEgZGF0YSBtZXJla2EgbGViaWggc2VyYWdhbSwgZGFuIG5pbGFpIHN0YW5kYXIgZGV2aWFzaW55YSBhZGFsYWggeWFuZyB0ZXJlbmRhaCBkaSBhbnRhcmEgc2VtdWEgY2FiYW5nLioqDQoNCiMgKipTb2FsIDMuIEppa2EgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIGFkYWxhaCA1MCBqdXRhIHJ1cGlhaCwgY2FiYW5nIG1hbmEgc2FqYSB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBkaSBzZW11YSBkYXRhbnlhPyoqDQoNCkNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBzZWJlc2FyIDUwIGp1dGEgcnVwaWFoIHVudHVrIHNlbXVhIGRhdGFueWEgYWRhbGFoICoqQ2FiYW5nIEMqKi4NCg0KIyMgKioxLiBBbGFzYW4qKjoNCg0KLSBEYXRhIHBlbmp1YWxhbiBDYWJhbmcgQzogJFszMCwzMCwzNSw0MCw0NV0kDQotIFNlbHVydWggbmlsYWkgZGFsYW0gZGF0YSB0ZXJzZWJ1dCBrdXJhbmcgZGFyaSB0YXJnZXQgNTAganV0YSwgc2VoaW5nZ2EgKipDYWJhbmcgQyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YSoqLg0KDQojIyAqKjIuIFBlbmdlY2VrYW4gdW50dWsgY2FiYW5nIGxhaW4qKjoNCg0KLSAqKkNhYmFuZyBBKio6ICRbNTAsNTUsNjAsNjUsNzBdJA0KDQpTZW11YSBkYXRhIG1lbWVudWhpIHRhcmdldCA1MCBqdXRhLg0KDQotICoqQ2FiYW5nIEIqKjogJFs0MCw1MCw2MCw3MCw4MF0kDQoNCkFkYSBkYXlhIHlhbmcgZ2FnYWwgJCg0MCkkLCB0ZXRhcGkgdGlkYWsgc2VtdWFueWEuDQoNCi0gKipDYWJhbmcgRCoqOiAkWzcwLDc1LDgwLDg1LDkwXSQNCg0KU2VtdWEgZGF0YSBtZW1lbnVoaSB0YXJnZXQgNTAganV0YS4NCg0KIyMgKiozLiBLZXNpbXB1bGFuKio6DQoNCkhhbnlhICoqQ2FiYW5nIEMqKiB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gNTAganV0YSBydXBpYWggZGkgc2VtdWEgZGF0YW55YS4NCg0KIyAqKlNvYWwgNC4gQnVhdGxhaCBkaWFncmFtIGtvdGFrIChib3ggcGxvdCkgdW50dWsgbWVtdmlzdWFsaXNhc2lrYW4gcGVueWViYXJhbiBkYXRhIHNldGlhcCBjYWJhbmcuKioNCg0KIyMgKioxLiBDYWJhbmcgQSBkYWxhbSBCb3hwbHQqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIENhYmFuZyBBDQpkYXRhX2NhYmFuZ19hIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwKQ0KDQojIE1lbWJ1YXQgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9jYWJhbmdfYV9kZiA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGRhdGFfY2FiYW5nX2EsDQogIEtlbG9tcG9rID0gcmVwKCJDYWJhbmcgQSIsIGxlbmd0aChkYXRhX2NhYmFuZ19hKSkNCikNCg0KIyBNZW1idWF0IGJveHBsb3QgaW50ZXJha3RpZiBtZW5nZ3VuYWthbiBQbG90bHkgdW50dWsgQ2FiYW5nIEENCnBsb3RfYm94cGxvdF9jYWJhbmdfYSA8LSBwbG90X2x5KA0KICBkYXRhX2NhYmFuZ19hX2RmLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gImFsbCIsICAjIE1lbmFtcGlsa2FuIHNlbXVhIHRpdGlrLCB0ZXJtYXN1ayBvdXRsaWVycw0KICBqaXR0ZXIgPSAwLjIsICAgICAgICMgTWVtYmVyaWthbiBlZmVrIGppdHRlciBwYWRhIHRpdGlrIGRhdGENCiAgcG9pbnRwb3MgPSAtMS4yICAgICAjIE1lbnllc3VhaWthbiBwb3Npc2kgdGl0aWsgdGVyaGFkYXAgYm94cGxvdA0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkJveCBQbG90IFBlbmp1YWxhbiBDYWJhbmcgQSIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoanV0YSBydXBpYWgpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyAiKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkNhYmFuZyBBIiwNCiAgICAgICAgeSA9IG1lZGlhbihkYXRhX2NhYmFuZ19hKSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46IiwgbWVkaWFuKGRhdGFfY2FiYW5nX2EpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3djb2xvciA9ICJibHVlIiwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3RfYm94cGxvdF9jYWJhbmdfYQ0KYGBgDQoNCiMjICoqMi4gQ2FiYW5nIEIgZGFsYW0gQm94cGxvdCoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEINCmRhdGFfY2FiYW5nX2IgPC0gYyg0MCwgNTAsIDYwLCA3MCwgODApDQoNCiMgTWVtYnVhdCBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhX2NhYmFuZ19iX2RmIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gZGF0YV9jYWJhbmdfYiwNCiAgS2Vsb21wb2sgPSByZXAoIkNhYmFuZyBCIiwgbGVuZ3RoKGRhdGFfY2FiYW5nX2IpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBpbnRlcmFrdGlmIG1lbmdndW5ha2FuIFBsb3RseSB1bnR1ayBDYWJhbmcgQg0KcGxvdF9ib3hwbG90X2NhYmFuZ19iIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2JfZGYsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiwgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWssIHRlcm1hc3VrIG91dGxpZXJzDQogIGppdHRlciA9IDAuMiwgICAgICAgIyBNZW1iZXJpa2FuIGVmZWsgaml0dGVyIHBhZGEgdGl0aWsgZGF0YQ0KICBwb2ludHBvcyA9IC0xLjIgICAgICMgTWVueWVzdWFpa2FuIHBvc2lzaSB0aXRpayB0ZXJoYWRhcCBib3hwbG90DQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBCIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nICIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEIiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2IpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfYikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdF9ib3hwbG90X2NhYmFuZ19iDQpgYGANCg0KIyMgKiozLiBDYWJhbmcgQyBkYWxhbSBCb3hwbG90KioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEMNCmRhdGFfY2FiYW5nX2MgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQoNCiMgTWVtYnVhdCBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhX2NhYmFuZ19jX2RmIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gZGF0YV9jYWJhbmdfYywNCiAgS2Vsb21wb2sgPSByZXAoIkNhYmFuZyBDIiwgbGVuZ3RoKGRhdGFfY2FiYW5nX2MpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBpbnRlcmFrdGlmIG1lbmdndW5ha2FuIFBsb3RseSB1bnR1ayBDYWJhbmcgQw0KcGxvdF9ib3hwbG90X2NhYmFuZ19jIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2NfZGYsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiwgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWssIHRlcm1hc3VrIG91dGxpZXJzDQogIGppdHRlciA9IDAuMiwgICAgICAgIyBNZW1iZXJpa2FuIGVmZWsgaml0dGVyIHBhZGEgdGl0aWsgZGF0YQ0KICBwb2ludHBvcyA9IC0xLjIgICAgICMgTWVueWVzdWFpa2FuIHBvc2lzaSB0aXRpayB0ZXJoYWRhcCBib3hwbG90DQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBDIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nICIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEMiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2MpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfYykpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdF9ib3hwbG90X2NhYmFuZ19jDQpgYGANCg0KIyMgKio0LiBDYWJhbmcgRCBkYWxhbSBCb3hwbG90KioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEQNCmRhdGFfY2FiYW5nX2QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhX2NhYmFuZ19kX2RmIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gZGF0YV9jYWJhbmdfZCwNCiAgS2Vsb21wb2sgPSByZXAoIkNhYmFuZyBEIiwgbGVuZ3RoKGRhdGFfY2FiYW5nX2QpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBpbnRlcmFrdGlmIG1lbmdndW5ha2FuIFBsb3RseSB1bnR1ayBDYWJhbmcgRA0KcGxvdF9ib3hwbG90X2NhYmFuZ19kIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2RfZGYsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiwgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWssIHRlcm1hc3VrIG91dGxpZXJzDQogIGppdHRlciA9IDAuMiwgICAgICAgIyBNZW1iZXJpa2FuIGVmZWsgaml0dGVyIHBhZGEgdGl0aWsgZGF0YQ0KICBwb2ludHBvcyA9IC0xLjIgICAgICMgTWVueWVzdWFpa2FuIHBvc2lzaSB0aXRpayB0ZXJoYWRhcCBib3hwbG90DQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBEIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nICIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEQiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2QpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfZCkpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdF9ib3hwbG90X2NhYmFuZ19kDQpgYGANCg0KIyMgKio1LiBCb3hwbG90IENhYmFuZyBBLCBCLCBDLCBkYW4gRCoqDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHVudHVrIGtlZW1wYXQgY2FiYW5nDQpkYXRhX2NhYmFuZ19hIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwKQ0KZGF0YV9jYWJhbmdfYiA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCmRhdGFfY2FiYW5nX2MgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQpkYXRhX2NhYmFuZ19kIDwtIGMoNzAsIDc1LCA4MCwgODUsIDkwKQ0KDQojIE1lbWJ1YXQgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9hbGwgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfY2FiYW5nX2EsIGRhdGFfY2FiYW5nX2IsIGRhdGFfY2FiYW5nX2MsIGRhdGFfY2FiYW5nX2QpLA0KICBLZWxvbXBvayA9IHJlcChjKCJDYWJhbmcgQSIsICJDYWJhbmcgQiIsICJDYWJhbmcgQyIsICJDYWJhbmcgRCIpLCANCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhX2NhYmFuZ19hKSwgbGVuZ3RoKGRhdGFfY2FiYW5nX2IpLCBsZW5ndGgoZGF0YV9jYWJhbmdfYyksIGxlbmd0aChkYXRhX2NhYmFuZ19kKSkpDQopDQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYgbWVuZ2d1bmFrYW4gUGxvdGx5IHVudHVrIGtlZW1wYXQgY2FiYW5nDQpwbG90X2JveHBsb3RfYWxsIDwtIHBsb3RfbHkoDQogIGRhdGFfYWxsLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gImFsbCIsICAjIE1lbmFtcGlsa2FuIHNlbXVhIHRpdGlrLCB0ZXJtYXN1ayBvdXRsaWVycw0KICBqaXR0ZXIgPSAwLjIsICAgICAgICMgTWVtYmVyaWthbiBlZmVrIGppdHRlciBwYWRhIHRpdGlrIGRhdGENCiAgcG9pbnRwb3MgPSAtMS4yICAgICAjIE1lbnllc3VhaWthbiBwb3Npc2kgdGl0aWsgdGVyaGFkYXAgYm94cGxvdA0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkJveCBQbG90IFBlbmp1YWxhbiBDYWJhbmcgQSwgQiwgQywgZGFuIEQiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQZW5qdWFsYW4gKGp1dGEgcnVwaWFoKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkNhYmFuZyBBIiwNCiAgICAgICAgeSA9IG1lZGlhbihkYXRhX2NhYmFuZ19hKSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gQ2FiYW5nIEE6IiwgbWVkaWFuKGRhdGFfY2FiYW5nX2EpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3djb2xvciA9ICJibHVlIiwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEIiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2IpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbiBDYWJhbmcgQjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfYikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApLA0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9ICJDYWJhbmcgQyIsDQogICAgICAgIHkgPSBtZWRpYW4oZGF0YV9jYWJhbmdfYyksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuIENhYmFuZyBDOiIsIG1lZGlhbihkYXRhX2NhYmFuZ19jKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93Y29sb3IgPSAiYmx1ZSIsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkNhYmFuZyBEIiwNCiAgICAgICAgeSA9IG1lZGlhbihkYXRhX2NhYmFuZ19kKSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gQ2FiYW5nIEQ6IiwgbWVkaWFuKGRhdGFfY2FiYW5nX2QpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3djb2xvciA9ICJibHVlIiwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3RfYm94cGxvdF9hbGwNCmBgYA0KDQojICoqU29hbCA1LiBKaWthIGFuZGFsYWggbWFuYWplciBwZXJ1c2FoYWFuLCBiYWdhaW1hbmEgYW5kYSBha2FuIG1lbmdndW5hbmthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lcmVuY2FuYWthbiBzdHJhdGVnaSBwZW5pbmdrYXRhbiBwZW5qdWFsYW4/KioNCg0KU2ViYWdhaSBtYW5hamVyIHBlcnVzYWhhYW4geWFuZyBtZW5nYW5hbGlzaXMgYm94cGxvdCBwZW5qdWFsYW4gZGFyaSBrZWVtcGF0IGNhYmFuZywgc2F5YSBha2FuIG1lbmdndW5ha2FuIGluZm9ybWFzaSBpbmkgdW50dWsgbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbiBkZW5nYW4gcGVuZGVrYXRhbiB5YW5nIHRlcmFyYWggZGFuIGJlcmRhc2Fya2FuIHBhZGEgZGF0YS4gQmVyaWt1dCBhZGFsYWggYmViZXJhcGEgbGFuZ2thaCB5YW5nIGJpc2EgZGlhbWJpbDoNCg0KIyMgKioxLiBBbmFsaXNpcyBQZW55ZWJhcmFuIERhdGEqKg0KDQotICoqQ2FiYW5nIGRlbmdhbiBWYXJpYWJpbGl0YXMgVGVyZW5kYWggKFBlbnllYmFyYW4gRGF0YSBLZWNpbCkqKjogDQogIC0gQmVyZGFzYXJrYW4gYm94cGxvdCwga2l0YSBiaXNhIG1lbGloYXQgY2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsLCB5YW5nIGJlcmFydGkgcGVuanVhbGFubnlhIHJlbGF0aWYgc3RhYmlsLiBNaXNhbG55YSwgKipDYWJhbmcgQyoqIGRlbmdhbiBuaWxhaSBwZW5qdWFsYW4geWFuZyBrb25zaXN0ZW4gYW50YXJhICQzMCQganV0YSBoaW5nZ2EgJDQ1JCBqdXRhLg0KICAtICoqU3RyYXRlZ2kqKjogQ2FiYW5nIHlhbmcgc3RhYmlsIGJpc2EgZGlndW5ha2FuIHNlYmFnYWkgbW9kZWwgYmFnaSBjYWJhbmcgbGFpbi4gVHVnYXNueWEgYmlzYSBsZWJpaCBmb2t1cyBwYWRhIG1lbXBlcnRhaGFua2FuIHBlcmZvcm1hIHlhbmcgc3VkYWggYWRhIGRhbiBtZW5pbmdrYXRrYW4gZWZla3Rpdml0YXMgb3BlcmFzaW9uYWwgdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaS4gSmlrYSBzdWRhaCBzdGFiaWwsIHN0cmF0ZWdpIHNlcGVydGkgcHJvbW9zaSBwcm9kdWsgdW5nZ3VsYW4gYXRhdSBwZXJsdWFzYW4gcGFzYXIgZGFwYXQgZGl0ZXJhcGthbi4NCi0gKipDYWJhbmcgZGVuZ2FuIFZhcmlhYmlsaXRhcyBUZXJiZXNhciAoUGVueWViYXJhbiBEYXRhIExlYmloIEJlc2FyKSoqOiANCiAgLSBDYWJhbmcgc2VwZXJ0aSAqKkNhYmFuZyBBIGRhbiBEKiogbXVuZ2tpbiBtZW51bmp1a2thbiB2YXJpYWJpbGl0YXMgeWFuZyBsZWJpaCBiZXNhciwgeWFuZyBiZXJhcnRpIGFkYSBmbHVrdHVhc2kgYmVzYXIgZGFsYW0gaGFzaWwgcGVuanVhbGFuLiBIYWwgaW5pIGJpc2EgZGlzZWJhYmthbiBvbGVoIGJlcmJhZ2FpIGZha3RvciBzZXBlcnRpIG11c2ltLCBwZXJ1YmFoYW4gaGFyZ2EsIGF0YXUgZmFrdG9yIGVrc3Rlcm5hbCBsYWlubnlhLg0KICAtICoqU3RyYXRlZ2kqKjpVbnR1ayBjYWJhbmcgZGVuZ2FuIHBlbnllYmFyYW4geWFuZyBsZWJpaCBiZXNhciwgbGFuZ2thaCBwZXJ0YW1hIGFkYWxhaCBtZW5naWRlbnRpZmlrYXNpIHBlbnllYmFiIGZsdWt0dWFzaSB0ZXJzZWJ1dC4gTXVuZ2tpbiBwZXJsdSBtZWxha3VrYW4gYW5hbGlzaXMgbGViaWggbWVuZGFsYW0gdW50dWsgbWVuZ2V0YWh1aSBhcGFrYWggYWRhIGZha3RvciBla3N0ZXJuYWwgeWFuZyBtZW1wZW5nYXJ1aGkgcGVuanVhbGFuIGF0YXUgYXBha2FoIGFkYSBtYXNhbGFoIGRhbGFtIHN0cmF0ZWdpIHBlbmp1YWxhbiBkYW4gcGVtYXNhcmFuLiBTdHJhdGVnaSB5YW5nIGxlYmloIGRpbmFtaXMsIHNlcGVydGkgcGVueWVzdWFpYW4gaGFyZ2EsIHByb21vc2kga2h1c3VzLCBhdGF1IHBlbGF0aWhhbiBsZWJpaCBsYW5qdXQgYmFnaSB0aW0gcGVuanVhbGFuLCBiaXNhIG1lbWJhbnR1IG1lbnN0YWJpbGthbiBraW5lcmphLg0KDQoNCiMjICoqMi4gUGVyZW5jYW5hYW4gQmVyZGFzYXJrYW4gVHJlbiBkYW4gUGVyYmFuZGluZ2FuIEFudGFyIENhYmFuZyoqDQoNCi0gKipLaW5lcmphIENhYmFuZyB5YW5nIExlYmloIFN0YWJpbCAoQ2FiYW5nIEMpKio6IENhYmFuZyB5YW5nIHN0YWJpbCBiaXNhIG1lbmphZGkgY29udG9oIHVudHVrIGNhYmFuZyBsYWluIGRhbGFtIGhhbCBwZW5kZWthdGFuIHBlbmp1YWxhbiB5YW5nIGJlcmhhc2lsLg0KLSAqKkNhYmFuZyBkZW5nYW4gUGVuaW5na2F0YW4geWFuZyBMZWJpaCBTaWduaWZpa2FuIChDYWJhbmcgRCkqKjogTWVuaXJ1IHRla25payBhdGF1IHBlbmRla2F0YW4geWFuZyBkaWd1bmFrYW4gZGkgY2FiYW5nIGluaSB1bnR1ayBtZW5pbmdrYXRrYW4gaGFzaWwgZGkgY2FiYW5nIGxhaW5ueWEuDQotICoqQ2FiYW5nIHlhbmcgUGVybHUgUGVtYmVuYWhhbiAoQ2FiYW5nIEEgZGFuIEIpKio6IEppa2EgY2FiYW5nLWNhYmFuZyBpbmkgbWVudW5qdWtrYW4gZmx1a3R1YXNpIGF0YXUgaGFzaWwgeWFuZyBsZWJpaCByZW5kYWgsIG1ha2EgcGVybHUgZGlsYWt1a2FuIHBlbWJlbmFoYW4uIEhhbCBpbmkgYmlzYSBtZWxpcHV0aSBwZW5pbmdrYXRhbiBrdWFsaXRhcyBwcm9kdWssIHBlbmluZ2thdGFuIHByb21vc2ksIGF0YXUgcGVyYmFpa2FuIG1hbmFqZXJpYWwuDQoNCiMjICoqMy4gTW9uaXRvcmluZyBkYW4gRXZhbHVhc2kgVGVydXMgTWVuZXJ1cyoqDQoNCi0gTWVuZXRhcGthbiBpbmRpa2F0b3Iga2luZXJqYSAoS1BJKSB1bnR1ayBzZXRpYXAgY2FiYW5nIGJlcmRhc2Fya2FuIGFuYWxpc2lzIGluaS4NCi0gTWVsYWt1a2FuIHBlbWFudGF1YW4gc2VjYXJhIGJlcmthbGEgZGFuIG1lbWJ1YXQgcGVueWVzdWFpYW4gc3RyYXRlZ2kgamlrYSBhZGEgcGVydWJhaGFuIHNpZ25pZmlrYW4gZGFsYW0gZGF0YSBwZW5qdWFsYW4geWFuZyB0ZXJwYW50YXUgbWVsYWx1aSBib3hwbG90IHBhZGEgcGVyaW9kZSBiZXJpa3V0bnlhLg0KDQpEZW5nYW4gbWVtYW5mYWF0a2FuIGluZm9ybWFzaSBpbmkgc2VjYXJhIHN0cmF0ZWdpcywgbWFuYWplciBkYXBhdCBtZXJhbmNhbmcgcmVuY2FuYSB5YW5nIGxlYmloIHRlcnN0cnVrdHVyIGRhbiBiZXJiYXNpcyBkYXRhIHVudHVrIG1lbmluZ2thdGthbiBwZW5qdWFsYW4sIG1lbnN0YWJpbGthbiBjYWJhbmcgeWFuZyBiZXJmbHVrdHVhc2ksIGRhbiBtZW5nb3B0aW1hbGthbiBjYWJhbmcgeWFuZyBzdWRhaCBtZW51bmp1a2thbiBwZXJmb3JtYSBiYWlrLg0KDQoNCiMgKipMYXRpaGFuIDIqKg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2VpcmltYW4gYmFyYW5nIGtlIGJlcmJhZ2FpIHdpbGF5YWggZGVuZ2FuIG1lbmdndW5ha2FuIGJlcmJhZ2FpIGplbmlzIHRyYW5zcG9ydGFzaS4gU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbiBiaWF5YSB0cmFuc3BvcnRhc2ksIHdha3R1IHlhbmcgZGlidXR1aGthbiwgZGFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHRlcmthaXQgcGVuZ3JpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiB3aWxheWFoIGRhbiBqZW5pcyBiYXJhbmc6DQoNCiMgKipTb2FsIDEuIEFuYWxpc2lzIEVmaXNpZW5zaSBQZW5naXJpbWFuKio6DQoNCi0gVmlzdWFsaXNhc2lrYW4gUGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4ganVtbGFoIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgZGFuIGJpYXlhIHBlciB1bml0IGRlbmdhbiBtZW5nZ3VuYWthbiBCb3hwbG90IDNELg0KLSBUZW50dWthbiBXaWxheWFoIG1hbmEgeWFuZyBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbi4NCg0KIyMgKipBLiBWaXN1YWxpc2FzaSBCb3hwbG90IDNEKioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB5YW5nIGRpYnV0dWhrYW4NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuZ2lyaW1hbg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygnVXRhcmEnLCAnU2VsYXRhbicsICdUaW11cicsICdCYXJhdCcsICdUZW5nYWgnLCAnVXRhcmEnLCAnU2VsYXRhbicsICdUaW11cicsICdCYXJhdCcsICdUZW5nYWgnLCANCiAgICAgICAgICAgICAgJ1V0YXJhJywgJ1NlbGF0YW4nLCAnVGltdXInLCAnQmFyYXQnLCAnVGVuZ2FoJyksDQogIEJhcmFuZyA9IGMoJ0VsZWt0cm9uaWsnLCAnUGFrYWlhbicsICdNYWthbmFuJywgJ1BlcmFsYXRhbicsICdFbGVrdHJvbmlrJywgJ1Bha2FpYW4nLCAnTWFrYW5hbicsICdQZXJhbGF0YW4nLCANCiAgICAgICAgICAgICAnRWxla3Ryb25paycsICdQYWthaWFuJywgJ1BlcmFsYXRhbicsICdFbGVrdHJvbmlrJywgJ1Bha2FpYW4nLCAnTWFrYW5hbicsICdFbGVrdHJvbmlrJyksDQogIFVuaXQgPSBjKDIwMCwgMTUwLCAxODAsIDEyMCwgMjUwLCAzMDAsIDIyMCwgMTQwLCAxODAsIDM1MCwgMTcwLCAyNTAsIDE5MCwgMTgwLCAyMjApLA0KICBKYW0gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDYsIDUpLA0KICBCaWF5YSA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgNzgwMCwgMTIwMDAsIDE2MDAwLCA4MjAwLCAxMDUwMCwgMTIwMDApDQopDQoNCiMgTWVuZ2hpdHVuZyBiaWF5YSBwZXIgdW5pdA0KZGF0YSRCaWF5YV9QZXJfVW5pdCA8LSBkYXRhJEJpYXlhIC8gZGF0YSRVbml0DQoNCiMgTWVuZ2hpdHVuZyBlZmlzaWVuc2kgKEJpYXlhIFBlciBVbml0ICogSmFtKQ0KZGF0YSRFZmlzaWVuc2kgPC0gZGF0YSRCaWF5YV9QZXJfVW5pdCAqIGRhdGEkSmFtDQoNCiMgTWVuZW50dWthbiB3aWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaA0KbG93ZXN0X2VmZmljaWVuY3kgPC0gZGF0YVt3aGljaC5taW4oZGF0YSRFZmlzaWVuc2kpLCBdDQpsb3dlc3RfZWZmaWNpZW5jeV93aWxheWFoIDwtIGxvd2VzdF9lZmZpY2llbmN5JFdpbGF5YWgNCmxvd2VzdF9lZmZpY2llbmN5X3ZhbHVlIDwtIGxvd2VzdF9lZmZpY2llbmN5JEVmaXNpZW5zaQ0KDQojIFZpc3VhbGlzYXNpIDNEIG1lbmdndW5ha2FuIHBsb3RseQ0KZmlnIDwtIHBsb3RfbHkoZGF0YSwgeCA9IH5Vbml0LCB5ID0gfkphbSwgeiA9IH5CaWF5YV9QZXJfVW5pdCwgDQogICAgICAgICAgICAgICB0eXBlID0gInNjYXR0ZXIzZCIsIG1vZGUgPSAibWFya2VycyIsIA0KICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvciA9IH5FZmlzaWVuc2ksIGNvbG9yc2NhbGUgPSAnVmlyaWRpcycsIHNpemUgPSAxMCkpDQoNCmZpZyA8LSBmaWcgJT4lDQogIGxheW91dChzY2VuZSA9IGxpc3QoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0p1bWxhaCBCYXJhbmcgKFVuaXQpJyksDQogICAgICAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gJ1dha3R1IFBlbmdpcmltYW4gKEphbSknKSwNCiAgICAgICAgICAgICAgICAgICAgICB6YXhpcyA9IGxpc3QodGl0bGUgPSAnQmlheWEgUGVyIFVuaXQnKSksDQogICAgICAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSBQZW5naXJpbWFuIEJhcmFuZyBCZXJkYXNhcmthbiBKdW1sYWgsIFdha3R1LCBkYW4gQmlheWEgUGVyIFVuaXQiKQ0KDQpmaWcNCmBgYA0KDQojIyAqKkIuIEFuYWxpc2lzIEVmaXNpZW5zaSBQZW5naXJpbWFuKioNCg0KQmVyZGFzYXJrYW4gZGF0YSBwZW5naXJpbWFuIGJhcmFuZyB5YW5nIG1lbmNha3VwIGJlcmJhZ2FpIHdpbGF5YWgsIGplbmlzIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgZGFuIGJpYXlhLCBraXRhIGRhcGF0IG1lbmdhbmFsaXNpcyBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBkZW5nYW4gY2FyYSBtZW5naGl0dW5nICoqYmlheWEgcGVyIHVuaXQqKiBkYW4gKip3YWt0dSBwZW5naXJpbWFuKiouDQoNCjEuICoqUGVuZ2hpdHVuZ2FuIEJpYXlhIFBlciBVbml0IGRhbiBFZmlzaWVuc2kqKg0KDQotICoqQmlheWEgcGVyIHVuaXQqKiBkaWhpdHVuZyBkZW5nYW4gbWVtYmFnaSBiaWF5YSBwZW5naXJpbWFuIGRlbmdhbiBqdW1sYWggdW5pdCBiYXJhbmcgeWFuZyBkaWtpcmltLg0KLSAqKkVmaXNpZW5zaSBwZW5naXJpbWFuKiogZGloaXR1bmcgZGVuZ2FuIG1lbmdhbGlrYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4gKGphbSkuIEhhbCBpbmkgbWVtYmVyaWthbiBnYW1iYXJhbiB0ZW50YW5nIGJlcmFwYSBiYW55YWsgYmlheWEgeWFuZyBkaWtlbHVhcmthbiB1bnR1ayBzZXRpYXAgdW5pdCBiYXJhbmcgZGFsYW0gd2FrdHUgdGVydGVudHUuDQoNCjIuICoqV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFBlbmdpcmltYW4gVGVyZW5kYWgqKiBTZXRlbGFoIG1lbGFrdWthbiBwZXJoaXR1bmdhbiBlZmlzaWVuc2ksIGtpdGEgZGFwYXQgbWVuZW50dWthbiB3aWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCwgeWFpdHUgd2lsYXlhaCB5YW5nIG1lbWlsaWtpIG5pbGFpICoqYmlheWEgcGVyIHVuaXQqKiBkYW4gKip3YWt0dSBwZW5naXJpbWFuKiogeWFuZyBwYWxpbmcgcmVuZGFoLg0KDQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiwgd2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYWRhbGFoIFdpbGF5YWggVGVuZ2FoIGRlbmdhbiBuaWxhaSBlZmlzaWVuc2kgc2ViZXNhciAxNzguMjg1Ny4NCg0KQXJ0aW55YSwgcGVuZ2lyaW1hbiBiYXJhbmcgZGkgd2lsYXlhaCBUZW5nYWggbWVtaWxpa2kga29tYmluYXNpIGJpYXlhIHBlciB1bml0IGRhbiB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggZWZpc2llbiBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdpbGF5YWggbGFpbm55YS4NCg0KMy4gKipLZXNpbXB1bGFuKioNCg0KLSBXaWxheWFoICoqVGVuZ2FoKiogbWVudW5qdWtrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggZGVuZ2FuIGVmaXNpZW5zaSBzZWJlc2FyICQxNzguMjg1NyQuIA0KLSBWaXN1YWxpc2FzaSAzRCBtZW1iZXJpa2FuIGdhbWJhcmFuIHlhbmcgamVsYXMgdGVudGFuZyBwZW5nYXJ1aCBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgdGVyaGFkYXAgZWZpc2llbnNpIHBlbmdpcmltYW4gZGkgYmVyYmFnYWkgd2lsYXlhaC4NCg0KRGVuZ2FuIGluZm9ybWFzaSBpbmksIHBlcnVzYWhhYW4gZGFwYXQgbGViaWggZm9rdXMgcGFkYSB3aWxheWFoICoqVGVuZ2FoKiogdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuLCBiYWlrIGRlbmdhbiBtZW5ndXJhbmdpIGJpYXlhIGF0YXUgbWVtcGVycGVuZGVrIHdha3R1IHBlbmdpcmltYW4gZ3VuYSBtZW5jYXBhaSBwZXJmb3JtYSB5YW5nIGxlYmloIGJhaWsgZGFsYW0gcGVuZ2Vsb2xhYW4gbG9naXN0aWsuDQoNCiMgKipTb2FsIDIuIFJla29tZW5kYXNpIE9wZXJhc2lvbmFsKioNCg0KDQojIyAqKjEuIFdpbGF5YWggeWFuZyBNZW1lcmx1a2FuIFBlcmhhdGlhbiBLaHVzdXMqKg0KDQotICoqV2lsYXlhaCBUZW5nYWgqKiBhZGFsYWggd2lsYXlhaCB5YW5nIG1lbnVuanVra2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoLiBNZXNraXB1biBiaWF5YSBwZXIgdW5pdG55YSB0aWRhayB0ZXJsYWx1IHRpbmdnaSwgd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIGluaSBjdWt1cCBwYW5qYW5nIChqYW0pIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWlubnlhLg0KLSBXaWxheWFoIGluaSBwZXJsdSBkaXBlcmhhdGlrYW4ga2FyZW5hIGtvbWJpbmFzaSBiaWF5YSBkYW4gd2FrdHUgeWFuZyB0aW5nZ2kgZGFwYXQgbWVtcGVuZ2FydWhpIHByb2ZpdGFiaWxpdGFzIHBlcnVzYWhhYW4gc2VydGEga2VwdWFzYW4gcGVsYW5nZ2FuLg0KLSBBcGEgcmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIHRlcnNlYnV0Pw0KDQojIyAqKjIuIFJla29tZW5kYXNpIHVudHVrIE1lbmd1cmFuZ2kgQmlheWEgZGFuIFdha3R1IFBlbmdpcmltYW4gZGkgV2lsYXlhaCBUZW5nYWgqKg0KDQpCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgYmViZXJhcGEgcmVrb21lbmRhc2kgeWFuZyBkYXBhdCBkaXRlcmFwa2FuIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4gZGkgKipXaWxheWFoIFRlbmdhaCoqIGFkYWxhaDoNCg0KLSAqKk9wdGltYWxrYW4gUnV0ZSBQZW5naXJpbWFuOioqOg0KICAgIC0gTWVsYWt1a2FuIGFuYWxpc2lzIHJ1dGUgcGVuZ2lyaW1hbiB1bnR1ayBtZW5naWRlbnRpZmlrYXNpIGFwYWthaCBydXRlIHlhbmcgZGlndW5ha2FuIHN1ZGFoIGVmaXNpZW4uIFBlbmdndW5hYW4gdGVrbm9sb2dpIHNlcGVydGkgc2lzdGVtIG1hbmFqZW1lbiB0cmFuc3BvcnRhc2kgKFRNUykgZGFwYXQgbWVtYmFudHUgdW50dWsgbWVyZW5jYW5ha2FuIHJ1dGUgdGVyYmFpayB5YW5nIG1lbWluaW1hbGthbiB3YWt0dSBkYW4gYmlheWEuDQogICAgLSBQZW5nZ3VuYWFuIGtlbmRhcmFhbiBkZW5nYW4ga2FwYXNpdGFzIHlhbmcgbGViaWggc2VzdWFpIHVudHVrIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltIGp1Z2EgYmlzYSBtZW5ndXJhbmdpIHdha3R1IGRhbiBiaWF5YSBwZW5naXJpbWFuLg0KDQotICoqUGVuaW5na2F0YW4gUGVuZ2Vsb2xhYW4gV2FrdHUgUGVuZ2lyaW1hbioqOg0KICAgIC0gTWVsYWt1a2FuIHBlcmJhaWthbiBkYWxhbSBtYW5hamVtZW4gbG9naXN0aWsgdW50dWsgbWVuZ3VyYW5naSB3YWt0dSB0dW5nZ3UgZGkgdGl0aWsgZGlzdHJpYnVzaSBkYW4gbWVtcGVyY2VwYXQgcHJvc2VzIGxvYWRpbmcgZGFuIHVubG9hZGluZyBiYXJhbmcuDQogICAgLSBNZW5nb3B0aW1hbGthbiBqYW0gb3BlcmFzaW9uYWwgZ3VkYW5nIGRhbiBkaXN0cmlidXNpIHVudHVrIG1lbXBlcnNpbmdrYXQgd2FrdHUgcGVuZ2lyaW1hbiBkYXJpIHB1c2F0IGRpc3RyaWJ1c2kga2Uga29uc3VtZW4uDQogICAgDQoNCiMgKipTb2FsIDMuIEFuYWxpc2lzIEtpbmVyamEgUGVuZ2lyaW1hbiBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcgZGFuIFdpbGF5YWgqKg0KVW50dWsgbWVuZ2FuYWxpc2lzIGtpbmVyamEgcGVuZ2lyaW1hbiBiZXJkYXNhcmthbiBqZW5pcyBiYXJhbmcgZGFuIHdpbGF5YWgsIGtpdGEgYWthbiBtZWxpaGF0IGR1YSBmYWt0b3IgdXRhbWE6ICoqd2FrdHUgcGVuZ2lyaW1hbioqIGRhbiAqKmJpYXlhIHBlciB1bml0KiouDQoNCioqVHVqdWFuKiogZGFyaSBhbmFsaXNpcyBpbmkgYWRhbGFoIHVudHVrIG1lbmdpZGVudGlmaWthc2kgamVuaXMgYmFyYW5nIGRhbiB3aWxheWFoIHlhbmcgbWVtaWxpa2k6DQoNCi0gKipXYWt0dSBwZW5naXJpbWFuIGxlYmloIGNlcGV0KiouDQotICoqQmlheWEgcGVyIHVuaXQgbGViaWggcmVuZGFoKiouDQoNCiMjICoqMS4gUGVuZ2Vsb21wb2thbiBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcgZGFuIFdpbGF5YWgqKg0KU2ViZWx1bSBtZWxha3VrYW4gYW5hbGlzaXMgbGViaWggbGFuanV0LCBraXRhIGFrYW4gbWVtYmFnaSBkYXRhIGJlcmRhc2Fya2FuIGplbmlzICoqYmFyYW5nKiogZGFuICoqd2lsYXlhaCoqLiBCZXJpa3V0IGFkYWxhaCBkdWEgbWV0cmlrIHV0YW1hIHlhbmcgYWthbiBkaWFuYWxpc2lzOg0KDQotICoqV2FrdHUgUGVuZ2lyaW1hbiAoSmFtKTogQmVyYXBhIGxhbWEgd2FrdHUgeWFuZyBkaWJ1dHVoa2FuIHVudHVrIHBlbmdpcmltYW4uDQotICoqQmlheWEgcGVyIFVuaXQqKjogQmlheWEgcGVyIHVuaXQgYmFyYW5nIHlhbmcgZGlraXJpbS4NCg0KIyMgKioyLiBXaWxheWFoIGRlbmdhbiBLaW5lcmphIFRlcmJhaWsgQmVyZGFzYXJrYW4gV2FrdHUgUG5lZ2lyaW1hbiBkYW4gQmlheWEgcGVyIFVuaXQqKg0KRGFyaSBhbmFsaXNpcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gd2lsYXlhaCwga2l0YSBkYXBhdCBtZW5naWRlbnRpZmlrYXNpIHdpbGF5YWggeWFuZyBtZW51bmp1a2thbiBwZW5naXJpbWFuICoqbGViaWggY2VwYXQqKiBkYW4gKipiaWF5YSBsZWJpaCByZW5kYWgqKjoNCg0KLSAqKldpbGF5YWggVXRhcmEqKiB1bnR1ayAqKlBha2FpYW4qKiBkYW4gKipFbGVrdHJvbmlrKiogbWVtaWxpa2kgKipiaWF5YSBwZXIgdW5pdCB5YW5nIGxlYmloIHJlbmRhaCoqIGRhbiAqKndha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBjZXBhdCoqIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWlubnlhLg0KLSAqKldpbGF5YWggVGltdXIqKiBtZW51bmp1a2thbiAqKndha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBjZXBhdCoqIHBhZGEgKipNYWthbmFuKiogZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbm55YS4NCg0KIyMgKiozLiBLZXNpbXB1bGFuKioNCkJlcmRhc2Fya2FuIGFuYWxpc2lzLCBraXRhIGRhcGF0IG1lbnlpbXB1bGthbiBiYWh3YToNCg0KLSBKZW5pcyBiYXJhbmcgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4gbGViaWggY2VwYXQ6IE1ha2FuYW4uDQotIEplbmlzIGJhcmFuZyBkZW5nYW4gYmlheWEgcGVyIHVuaXQgbGViaWggcmVuZGFoOiBQYWthaWFuLg0KLSBXaWxheWFoIGRlbmdhbiBraW5lcmphIHBlbmdpcmltYW4gdGVyYmFpazoNCiAgICAtIFdpbGF5YWggVXRhcmEgbWVtaWxpa2kgYmlheWEgbGViaWggcmVuZGFoIGRhbiB3YWt0dSBwZW5naXJpbWFuIGxlYmloIGNlcGF0IHVudHVrIEVsZWt0cm9uaWsgZGFuIFBha2FpYW4uDQogICAgLSBXaWxheWFoIFRpbXVyIG1lbWlsaWtpIHdha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBjZXBhdCB1bnR1ayBNYWthbmFuLg0KICAgIA0KVW50dWsgbWVuaW5na2F0a2FuIGtpbmVyamEgcGVuZ2lyaW1hbiBzZWNhcmEga2VzZWx1cnVoYW4sIHBlcnVzYWhhYW4gZGFwYXQgbGViaWggZm9rdXMgcGFkYSBNYWthbmFuIGRpIHdpbGF5YWggVGltdXIgeWFuZyBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggY2VwYXQsIHNlcnRhIHBhZGEgUGFrYWlhbiBkaSB3aWxheWFoIFV0YXJhIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgcGVyIHVuaXQgZGFuIG1lbmluZ2thdGthbiBlZmlzaWVuc2kuDQoNCiMgKipLZXNpbXB1bGFuIEFLaGlyKioNClBlbnllYmFyYW4gZGF0YSBtZW51bmp1a2thbiBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBhbnRhciB3aWxheWFoIGRhbiBqZW5pcyBiYXJhbmcuIFdpbGF5YWggVGVuZ2FoIG1lbWVybHVrYW4gcGVyaGF0aWFuIGxlYmloIHVudHVrIG1lbmdvcHRpbWFsa2FuIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuLCBzZW1lbnRhcmEgd2lsYXlhaCBVdGFyYSBkYW4gVGltdXIgZGFwYXQgZGlqYWRpa2FuIG1vZGVsIHVudHVrIGVmaXNpZW5zaSB5YW5nIGxlYmloIGJhaWsuIFN0cmF0ZWdpIHBlbmdlbG9sYWFuIHlhbmcgZGlzZXN1YWlrYW4gZGVuZ2FuIHBvbGEgcGVueWViYXJhbiBpbmkgZGFwYXQgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBvcGVyYXNpb25hbCBwZXJ1c2FoYWFuLg0KDQojICoqUmVmcmVuc2kqKg0KLSBEU2NpZW5jZWxhYnMuIChuLmQuKSBQZW5nYW50YXIgU3RhdGlzdGlrYSB1bnR1ayBTYWlucyBEYXRhLiBCb29rZG93bi4gUmV0cmlldmVkIGZyb20gPGEgaHJlZiA9ICJodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay8iID4gS2xpayBkaXNpbmk8L2E+DQotIERyLiBBbml0YSBSYWhheXUsIFMuU2kuLCBNLlNpLlVrdXJhbiBQZW55ZWJhcmFuIERhdGEuIEJpbnVzIFVuaXZlcnNpdHkuIEJvb2tkb3duLiBSZXRyaXZlZCBmcm9tIDxhIGhyZWYgPSAiaHR0cHM6Ly9iaW51cy5hYy5pZC9tYWxhbmcvMjAyMi8wNC91a3VyYW4tcGVueWViYXJhbi1kYXRhLy8iID5rbGlrIGRpc2luaTwvYT4NCi0gS2hhdGliIEEuIExhdGllZi5Va3VyYW4gUGVueWViYXJhbiBEYXRhLlVJTi4gQm9va2Rvd24uIFJldHJpdmVkIGZyb20gbSA8YSBocmVmID0gImh0dHBzOi8vcmVwb3NpdG9yeS5hci1yYW5pcnkuYWMuaWQvaWQvZXByaW50L0EvMS83LVNldmVudGglMjBNZWV0aW5nJTIwLSUyMFVrdXJhbiUyMFBlbnllYmFyYW4lMjBEYXRhLnBkZi8iID4gS2xpayBkaXNpbmk8L2E+DQoNCg==