Ukuran Penyebaran Data

Statistika Dasar

Logo

LATIHAN 1

Tabel dari data penjualan masing-masing cabang dalam juta rupiah:

Cabang Penjualan (juta rupiah)
A 50, 55, 60, 65, 70
B 40, 50, 60, 70, 80
C 30, 30, 35, 40, 45
D 70, 75, 80, 85, 90

1.1 Mean, Median, dan Standar Deviasi Masing-masing Cabang

1.1.1 Cabang A: [50, 55, 60, 65, 70]

A. Mean (Rata-rata)

Rumus: \[ \text{Mean} = \frac{\sum x_i}{n} \] \[ \text{Mean} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \]

B. Median

Rumus:

  1. Urutkan data.
  2. Jika jumlah data ganjil, median adalah nilai di posisi tengah: \[ \text{Median} = x_{\frac{n+1}{2}} \] \[ \text{Median} = x_{\frac{5+1}{2}} = x_3 = 60 \]

C. Standar Deviasi

Rumus:

\[ \sigma = \sqrt{\frac{\sum (x_i - \mu)^2}{n}} \]

Langkah:

  1. Hitung \((x_i - \mu)\): \[ 50 - 60 = -10, \, 55 - 60 = -5, \, 60 - 60 = 0, \, 65 - 60 = 5, \, 70 - 60 = 10 \]
  2. Hitung kuadratnya: \[ (-10)^2 = 100, \, (-5)^2 = 25, \, (0)^2 = 0, \, (5)^2 = 25, \, (10)^2 = 100 \]
  3. Hitung rata-rata kuadrat: \[ \frac{100 + 25 + 0 + 25 + 100}{5} = \frac{250}{5} = 50 \]
  4. Akar kuadrat rata-rata kuadrat: \[ \sigma = \sqrt{50} \approx 7.07 \]

1.1.2 Cabang B: [40, 50, 60, 70, 80]

A. Mean (Rata-rata)

Rumus:

\[ \text{Mean} = \frac{\sum x_i}{n} \] \[ \text{Mean} = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{300}{5} = 60 \]

B. Median

\[ \text{Median} = x_{\frac{n+1}{2}} = x_3 = 60 \]

C. Standar Deviasi

Langkah:

  1. Hitung \((x_i - \mu)\): \[ 40 - 60 = -20, \, 50 - 60 = -10, \, 60 - 60 = 0, \, 70 - 60 = 10, \, 80 - 60 = 20 \]
  2. Kuadratkan: \[ (-20)^2 = 400, \, (-10)^2 = 100, \, (0)^2 = 0, \, (10)^2 = 100, \, (20)^2 = 400 \]
  3. Hitung rata-rata kuadrat: \[ \frac{400 + 100 + 0 + 100 + 400}{5} = \frac{1000}{5} = 200 \]
  4. Akar kuadrat: \[ \sigma = \sqrt{200} \approx 14.14 \]

1.1.3 Cabang C: [30, 30, 35, 40, 45]

A. Mean (Rata-rata)

\[ \text{Mean} = \frac{\sum x_i}{n} \] \[ \text{Mean} = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{180}{5} = 36 \]

B. Median

\[ \text{Median} = x_{\frac{n+1}{2}} = x_3 = 35 \]

C. Standar Deviasi

Langkah:

  1. Hitung \((x_i - \mu)\): \[ 30 - 36 = -6, \, 30 - 36 = -6, \, 35 - 36 = -1, \, 40 - 36 = 4, \, 45 - 36 = 9 \]
  2. Kuadratkan: \[ (-6)^2 = 36, \, (-6)^2 = 36, \, (-1)^2 = 1, \, 4^2 = 16, \, 9^2 = 81 \]
  3. Hitung rata-rata kuadrat: \[ \frac{36 + 36 + 1 + 16 + 81}{5} = \frac{170}{5} = 34 \]
  4. Akar kuadrat: \[ \sigma = \sqrt{34} \approx 5.83 \]

1.1.4. Cabang D: [70, 75, 80, 85, 90]

A. Mean (Rata-rata)

\[ \text{Mean} = \frac{\sum x_i}{n} \] \[ \text{Mean} = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{400}{5} = 80 \]

B. Median

\[ \text{Median} = x_{\frac{n+1}{2}} = x_3 = 80 \]

C. Standar Deviasi

Langkah:

  1. Hitung \((x_i - \mu)\): \[ 70 - 80 = -10, \, 75 - 80 = -5, \, 80 - 80 = 0, \, 85 - 80 = 5, \, 90 - 80 = 10 \]
  2. Kuadratkan: \[ (-10)^2 = 100, \, (-5)^2 = 25, \, (0)^2 = 0, \, (5)^2 = 25, \, (10)^2 = 100 \]
  3. Hitung rata-rata kuadrat: \[ \frac{100 + 25 + 0 + 25 + 100}{5} = \frac{250}{5} = 50 \]
  4. Akar kuadrat: \[ \sigma = \sqrt{50} \approx 7.07 \]

1.1.5 Kesimpulan Rumus dan Hasil

Cabang Mean Formula Median Formula Standar Deviasi Formula
A \(\frac{300}{5} = 60\) \(x_3 = 60\) \(\sqrt{\frac{250}{5}} = 7.07\)
B \(\frac{300}{5} = 60\) \(x_3 = 60\) \(\sqrt{\frac{1000}{5}} = 14.14\)
C \(\frac{180}{5} = 36\) \(x_3 = 35\) \(\sqrt{\frac{170}{5}} = 5.83\)
D \(\frac{400}{5} = 80\) \(x_3 = 80\) \(\sqrt{\frac{250}{5}} = 7.07\)

1.2 Cabang Dengan Penyebaran Data Terkecil

Penyebaran data paling kecil diukur menggunakan standar deviasi, yang menunjukkan seberapa jauh nilai-nilai data tersebar dari rata-ratanya. Semakin kecil standar deviasi, semakin terpusat data di sekitar rata-rata.

1.2.1 Hasil Standar Deviasi Tiap Cabang:

  • Cabang A: 7.07
  • Cabang B: 14.14
  • Cabang C: 5.83
  • Cabang D: 7.07

1.2.2 Analisis:

  • Cabang C memiliki standar deviasi terkecil (5.83). Artinya, data penjualan Cabang C paling terpusat di sekitar rata-rata (36 juta rupiah), meskipun nilai-nilainya relatif rendah.
  • Ini menunjukkan bahwa variasi data di Cabang C kecil dibandingkan cabang lain.

1.3 Cabang yang Gagal Mencapai Target Minimum (50 Juta Rupiah)

Sebuah cabang dikatakan gagal mencapai target jika semua nilai penjualannya di bawah 50 juta rupiah.

1.3.1 Penjualan Tiap Cabang:

  • Cabang A: [50, 55, 60, 65, 70]
    Semua nilai ≥ 50. Cabang A tidak gagal.

  • Cabang B: [40, 50, 60, 70, 80]
    Hanya 40 yang di bawah 50, tetapi tidak semua nilai gagal. Cabang B juga tidak gagal.

  • Cabang C: [30, 30, 35, 40, 45]
    Semua nilai < 50. Cabang C gagal sepenuhnya memenuhi target.

  • Cabang D: [70, 75, 80, 85, 90]
    Semua nilai ≥ 50. Cabang D tidak gagal.

1.3.2 Kesimpulan:

Hanya Cabang C yang gagal mencapai target penjualan minimum karena semua data penjualannya berada di bawah 50 juta rupiah.

1.4 Visualisasi Penyebaran Data Setiap Cabang

1.5 Strategi yang Dapat Dilakukan Berdasarkan Informasi tersebut

Sebagai manajer perusahaan, informasi ini dapat dimanfaatkan untuk merencanakan strategi peningkatan penjualan dengan langkah-langkah berikut:

1. Prioritaskan Perbaikan Cabang C: Cabang C gagal mencapai target 50 juta rupiah. Fokus pada evaluasi lokasi, kampanye pemasaran lokal, diversifikasi produk, dan pelatihan karyawan untuk meningkatkan performa.

2. Pertahankan Kinerja Cabang A dan D: Kedua cabang ini sudah memenuhi target. Pastikan konsistensi kinerja melalui penghargaan karyawan dan analisis faktor keberhasilan untuk diadaptasi ke cabang lain.

3. Tingkatkan Konsistensi di Cabang B: Variasi penjualan yang besar di Cabang B perlu dikurangi dengan memastikan stok produk favorit dan layanan yang konsisten.

4. Optimalkan Sumber Daya: Alokasikan investasi pemasaran ke Cabang C terlebih dahulu. Lakukan rotasi staf berkinerja tinggi dari Cabang A atau D ke Cabang C untuk mendukung peningkatan.

5. Monitoring dan Evaluasi: Gunakan dashboard untuk memantau penjualan secara real-time, tetapkan target mingguan, dan evaluasi performa berdasarkan KPI yang jelas.

Pendekatan berbasis data ini memastikan keputusan yang diambil lebih terarah dan efektif.


LATIHAN 2

Tabel data terkait pengiriman barang berdasarkan wilayah dan jenis barang:

Wilayah Jenis Barang Jumlah (unit) Waktu Pengiriman (jam) Biaya per Unit (Rp)
Utara Elektronik 200 5 15000
Selatan Pakaian 150 8 8000
Timur Makanan 180 6 10000
Barat Peralatan 120 7 12000
Tengah Elektronik 250 4 14000
Utara Pakaian 300 9 8500
Selatan Makanan 220 7 9500
Timur Peralatan 140 5 11000
Barat Elektronik 180 6 14500
Tengah Pakaian 350 8 7800
Utara Peralatan 170 4 12000
Selatan Elektronik 250 6 16000
Timur Pakaian 190 7 8200
Barat Makanan 130 5 10500
Tengah Peralatan 180 5 11500

2.1 Analisis Efisiensi Pengiriman

2.1.1 Visualisasi Pengiriman Barang Berdasarkan Jumlah Barang, Waktu Pengiriman, dan Biaya Per Unit

2.1.2 Wilayah Dengan Efisiensi Pengiriman Terendah Berdasarkan Biaya Per Unit dan Waktu Pengiriman

Untuk menentukan wilayah mana yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman, bisa menggunakan metrik yang menggabungkan kedua faktor tersebut. Salah satu cara untuk melakukannya adalah dengan menghitung biaya per unit per jam pengiriman (yang menggambarkan biaya yang dikeluarkan untuk setiap unit barang yang dikirim dalam setiap jam).

Rumus untuk menghitung biaya per unit per jam pengiriman adalah:

\[ \text{Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}} \]

Langkah-langkah perhitungan:

1. Menghitung Efisiensi untuk Setiap Data:

Kita akan menghitung efisiensi untuk setiap baris data dengan menggunakan rumus di atas.

  • Utara, Elektronik (15,000 / 5) = 3,000
  • Selatan, Pakaian (8,000 / 8) = 1,000
  • Timur, Makanan (10,000 / 6) = 1,667
  • Barat, Peralatan (12,000 / 7) = 1,714
  • Tengah, Elektronik (14,000 / 4) = 3,500
  • Utara, Pakaian (8,500 / 9) = 944.44
  • Selatan, Makanan (9,500 / 7) = 1,357.14
  • Timur, Peralatan (11,000 / 5) = 2,200
  • Barat, Elektronik (14,500 / 6) = 2,417
  • Tengah, Pakaian (7,800 / 8) = 975
  • Utara, Peralatan (12,000 / 4) = 3,000
  • Selatan, Elektronik (16,000 / 6) = 2,667
  • Timur, Pakaian (8,200 / 7) = 1,171.43
  • Barat, Makanan (10,500 / 5) = 2,100
  • Tengah, Peralatan (11,500 / 5) = 2,300

2. Menghitung Rata-Rata Efisiensi untuk Setiap Wilayah:

Setelah menghitung efisiensi untuk setiap baris, kita hitung rata-rata efisiensi untuk setiap wilayah.

  • Utara: (3,000 + 944.44 + 3,000) / 3 = 2,314.81
  • Selatan: (1,000 + 1,357.14 + 2,667) / 3 = 1,674.71
  • Timur: (1,667 + 2,200 + 1,171.43) / 3 = 1,679.81
  • Barat: (1,714 + 2,417 + 2,100) / 3 = 2,077.00
  • Tengah: (3,500 + 975 + 2,300) / 3 = 2,258.33

3. Menentukan Wilayah dengan Efisiensi Terendah:

Dari perhitungan rata-rata efisiensi di atas, wilayah dengan efisiensi terendah adalah Selatan, dengan rata-rata efisiensi 1,674.71.

2.1.3 Kesimpulan:

Wilayah Selatan memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman, yang menunjukkan bahwa pengiriman barang di wilayah ini relatif kurang optimal dibandingkan dengan wilayah lain.

Wilayah dengan nilai efisiensi terendah akan menunjukkan wilayah dengan biaya tinggi dan waktu pengiriman lama, yang berarti efisiensi pengirimannya rendah.


2.2 Rekomendasi Operasional

2.2.1 Wilayah Yang Memerlukan Perhatian Khusus untuk Meningkatkan Efisiensi Pengiriman

Berdasarkan hasil analisis efisiensi pengiriman, wilayah yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman adalah Wilayah Selatan, karena wilayah ini memiliki rata-rata efisiensi terendah (1,674.71). Efisiensi pengiriman yang lebih rendah menunjukkan bahwa di wilayah tersebut, kombinasi antara biaya per unit yang relatif tinggi dan waktu pengiriman yang lebih lama berkontribusi pada pengiriman yang kurang optimal.

Untuk meningkatkan efisiensi pengiriman di Wilayah Selatan, beberapa langkah yang dapat dipertimbangkan adalah:

  1. Optimalkan Waktu Pengiriman
  2. Negosiasi Biaya dengan Pemasok
  3. Analisis Pengiriman Berulang
  4. Peningkatan Infrastruktur dan Teknologi
  5. Evaluasi Proses Operasional

2.2.2 Rekomendasi untuk Mengurangi Biaya dan Waktu Pengiriman di Wilayah Selatan

Untuk meningkatkan efisiensi pengiriman di Wilayah Selatan, berikut adalah langkah-langkah yang dapat diambil:

  1. Optimasi Rute Pengiriman: Gunakan teknologi untuk merencanakan rute tercepat dan termurah serta atur jadwal pengiriman lebih efisien.
  2. Negosiasi dengan Pemasok dan Penyedia Logistik: Dapatkan diskon volume dan pilih penyedia logistik dengan tarif kompetitif.
  3. Perbaikan Infrastruktur: Bangun gudang yang lebih dekat dengan tujuan dan gunakan kendaraan lebih efisien.
  4. Pemanfaatan Teknologi: Implementasikan sistem manajemen rantai pasokan dan pelacakan real-time untuk mempercepat proses.
  5. Pengiriman Terpadu: Gabungkan beberapa pengiriman untuk mengurangi biaya operasional.
  6. Manajemen Persediaan: Terapkan sistem Just-in-Time untuk mengurangi biaya dan mempercepat pengiriman.
  7. Pelatihan Tim Logistik: Latih tim logistik untuk meningkatkan efisiensi dan pengelolaan sumber daya.

Untuk Wilayah Selatan, langkah-langkah strategis seperti optimasi rute pengiriman, negosiasi biaya dengan pemasok, pemanfaatan teknologi logistik, serta perbaikan infrastruktur distribusi akan sangat membantu dalam mengurangi biaya dan waktu pengiriman. Fokus pada peningkatan efisiensi operasional dan penggunaan teknologi dapat menghasilkan penghematan biaya yang signifikan dan waktu pengiriman yang lebih cepat.


2.3 Kinerja Berdasarkan Jenis Barang

Berikut adalah analisis kinerja pengiriman berdasarkan jenis barang dan wilayah menggunakan data yang diberikan:

2.3.1 Analisis Waktu Pengiriman

Rata-rata waktu pengiriman per wilayah:

  • Utara: (5 + 9 + 4) / 3 = 6 jam
  • Selatan: (8 + 7 + 6) / 3 = 7 jam
  • Timur: (6 + 5 + 7) / 3 = 6 jam
  • Barat: (7 + 6 + 5) / 3 = 6 jam
  • Tengah: (4 + 8 + 5) / 3 = 5.67 jam

Wilayah dengan waktu pengiriman tercepat: Tengah (5.67 jam).

2.3.2 Analisis Biaya per Unit

Rata-rata biaya per unit per wilayah:

  • Utara: (15,000 + 8,500 + 12,000) / 3 = 11,833.33
  • Selatan: (8,000 + 9,500 + 16,000) / 3 = 11,166.67
  • Timur: (10,000 + 11,000 + 8,200) / 3 = 9,733.33
  • Barat: (12,000 + 14,500 + 10,500) / 3 = 12,333.33
  • Tengah: (14,000 + 7,800 + 11,500) / 3 = 11,766.67

Wilayah dengan biaya per unit terendah: Timur (9,733.33).

2.3.3 Analisis Berdasarkan Jenis Barang

Waktu Pengiriman Tercepat per Jenis Barang:

  • Elektronik: Utara (5 jam).
  • Pakaian: Timur (7 jam).
  • Makanan: Barat (5 jam).
  • Peralatan: Tengah (5 jam).

Biaya per Unit Terendah per Jenis Barang:

  • Elektronik: Tengah (14,000 Rp).
  • Pakaian: Tengah (7,800 Rp).
  • Makanan: Timur (10,000 Rp).
  • Peralatan: Timur (11,000 Rp).

2.3.4 Kesimpulan

  1. Wilayah dengan waktu pengiriman tercepat adalah Tengah (5.67 jam).
  2. Wilayah dengan biaya per unit terendah adalah Timur (9,733.33 Rp).
  3. Jenis barang dengan kinerja terbaik (biaya dan waktu terendah):
    • Elektronik: Wilayah Utara dan Tengah unggul.
    • Pakaian: Wilayah Tengah unggul.
    • Makanan: Wilayah Timur unggul.
    • Peralatan: Wilayah Tengah unggul.

REFERENSI

  1. Yusuf, L. M., Sunarya, E., & Samsudin, A. (2022). Optimalisasi strategi segmenting, targeting, dan positioning dalam meningkatkan penjualan. Business Management and Entrepreneurship Journal, 4(1). Retrieved from https://jurnal.unigal.ac.id/bmej/article/view/4341

  2. Karya Anugerah Jaya. (2023). Strategi ekspansi sales territory management dalam meningkatkan pertumbuhan penjualan: Studi kasus pada PT. Karya Anugerah Jaya Cabang Lampung. Jurnal Saburai. Retrieved from https://jurnal.saburai.ac.id

  3. Syntax Literate. (2023). Analisis strategi pemasaran pada minimarket Alfamart untuk meningkatkan volume penjualan. Syntax Literate: Jurnal Ilmiah Indonesia. Retrieved from https://media.neliti.com

  4. Zulkifly, F. (2023). Penerapan Lean Service untuk Mereduksi Waste pada Layanan Pengiriman Barang di Perusahaan Logistik. Thesis. Institut Teknologi Sepuluh Nopember. Diakses dari repository.its.ac.id.

  5. Ariyanti, D. (2021). Peningkatan Efisiensi Logistik di Negara Kepulauan. Jurnal Transportasi & Logistik Indonesia. Diakses dari repository.unair.ac.id.

  6. Rahayu, S., & Haryanto, A. (2020). Efisiensi Distribusi Barang pada Perusahaan Logistik. Jurnal Manajemen Logistik Indonesia, 12(3), 101-115. Diakses dari jurnal.uns.ac.id.

LS0tDQp0aXRsZTogIlVrdXJhbiBQZW55ZWJhcmFuIERhdGEiDQpzdWJ0aXRsZTogIlN0YXRpc3Rpa2EgRGFzYXIiDQphdXRob3I6ICJBbHlhIE1hdXJhIFJhZGl0aGEgKDUyMjQwMDAzKSINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAiQzovVXNlcnMvRGVsbC9PbmVEcml2ZS9Eb2N1bWVudHMvc3RhdGlzL3N0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIGlkPSJhbHllYSIgc3JjPSJDOlxVc2Vyc1xEZWxsXE9uZURyaXZlXERvY3VtZW50c1xzdGF0aXNcaW1nL2FseWVhLmpwZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCg0KDQojIExBVElIQU4gMQ0KDQpUYWJlbCBkYXJpIGRhdGEgcGVuanVhbGFuIG1hc2luZy1tYXNpbmcgY2FiYW5nIGRhbGFtIGp1dGEgcnVwaWFoOg0KDQp8ICoqQ2FiYW5nKiogfCAqKlBlbmp1YWxhbiAoanV0YSBydXBpYWgpKiogICB8DQp8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqQSoqICAgICAgfCA1MCwgNTUsIDYwLCA2NSwgNzAgICAgICAgICAgICB8DQp8ICoqQioqICAgICAgfCA0MCwgNTAsIDYwLCA3MCwgODAgICAgICAgICAgICB8DQp8ICoqQyoqICAgICAgfCAzMCwgMzAsIDM1LCA0MCwgNDUgICAgICAgICAgICB8DQp8ICoqRCoqICAgICAgfCA3MCwgNzUsIDgwLCA4NSwgOTAgICAgICAgICAgICB8DQoNCiMjIDEuMSBNZWFuLCBNZWRpYW4sIGRhbiBTdGFuZGFyIERldmlhc2kgTWFzaW5nLW1hc2luZyBDYWJhbmcNCg0KIyMjIDEuMS4xIENhYmFuZyBBOiBbNTAsIDU1LCA2MCwgNjUsIDcwXQ0KDQojIyMjIEEuIE1lYW4gKFJhdGEtcmF0YSkNCg0KKipSdW11czoqKg0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7XHN1bSB4X2l9e259DQpcXQ0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCiMjIyMgQi4gTWVkaWFuDQoNCioqUnVtdXM6KioNCg0KMS4gVXJ1dGthbiBkYXRhLg0KMi4gSmlrYSBqdW1sYWggZGF0YSBnYW5qaWwsIG1lZGlhbiBhZGFsYWggbmlsYWkgZGkgcG9zaXNpIHRlbmdhaDoNClxbDQpcdGV4dHtNZWRpYW59ID0geF97XGZyYWN7bisxfXsyfX0NClxdDQpcWw0KXHRleHR7TWVkaWFufSA9IHhfe1xmcmFjezUrMX17Mn19ID0geF8zID0gNjANClxdDQoNCiMjIyMgQy4gU3RhbmRhciBEZXZpYXNpDQoNCioqUnVtdXM6KioNCg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxtdSleMn17bn19DQpcXQ0KDQoqKkxhbmdrYWg6KioNCg0KMS4gSGl0dW5nIFwoKHhfaSAtIFxtdSlcKToNCiAgIFxbDQogICA1MCAtIDYwID0gLTEwLCBcLCA1NSAtIDYwID0gLTUsIFwsIDYwIC0gNjAgPSAwLCBcLCA2NSAtIDYwID0gNSwgXCwgNzAgLSA2MCA9IDEwDQogICBcXQ0KMi4gSGl0dW5nIGt1YWRyYXRueWE6DQogICBcWw0KICAgKC0xMCleMiA9IDEwMCwgXCwgKC01KV4yID0gMjUsIFwsICgwKV4yID0gMCwgXCwgKDUpXjIgPSAyNSwgXCwgKDEwKV4yID0gMTAwDQogICBcXQ0KMy4gSGl0dW5nIHJhdGEtcmF0YSBrdWFkcmF0Og0KICAgXFsNCiAgIFxmcmFjezEwMCArIDI1ICsgMCArIDI1ICsgMTAwfXs1fSA9IFxmcmFjezI1MH17NX0gPSA1MA0KICAgXF0NCjQuIEFrYXIga3VhZHJhdCByYXRhLXJhdGEga3VhZHJhdDoNCiAgIFxbDQogICBcc2lnbWEgPSBcc3FydHs1MH0gXGFwcHJveCA3LjA3DQogICBcXQ0KDQoNCg0KIyMjIDEuMS4yICBDYWJhbmcgQjogWzQwLCA1MCwgNjAsIDcwLCA4MF0NCg0KIyMjIyBBLiBNZWFuIChSYXRhLXJhdGEpDQoNCioqUnVtdXM6KioNCg0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7XHN1bSB4X2l9e259DQpcXQ0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7NDAgKyA1MCArIDYwICsgNzAgKyA4MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCiMjIyMgQi4gTWVkaWFuDQpcWw0KXHRleHR7TWVkaWFufSA9IHhfe1xmcmFje24rMX17Mn19ID0geF8zID0gNjANClxdDQoNCiMjIyMgQy4gU3RhbmRhciBEZXZpYXNpDQoqKkxhbmdrYWg6KioNCg0KMS4gSGl0dW5nIFwoKHhfaSAtIFxtdSlcKToNCiAgIFxbDQogICA0MCAtIDYwID0gLTIwLCBcLCA1MCAtIDYwID0gLTEwLCBcLCA2MCAtIDYwID0gMCwgXCwgNzAgLSA2MCA9IDEwLCBcLCA4MCAtIDYwID0gMjANCiAgIFxdDQoyLiBLdWFkcmF0a2FuOg0KICAgXFsNCiAgICgtMjApXjIgPSA0MDAsIFwsICgtMTApXjIgPSAxMDAsIFwsICgwKV4yID0gMCwgXCwgKDEwKV4yID0gMTAwLCBcLCAoMjApXjIgPSA0MDANCiAgIFxdDQozLiBIaXR1bmcgcmF0YS1yYXRhIGt1YWRyYXQ6DQogICBcWw0KICAgXGZyYWN7NDAwICsgMTAwICsgMCArIDEwMCArIDQwMH17NX0gPSBcZnJhY3sxMDAwfXs1fSA9IDIwMA0KICAgXF0NCjQuIEFrYXIga3VhZHJhdDoNCiAgIFxbDQogICBcc2lnbWEgPSBcc3FydHsyMDB9IFxhcHByb3ggMTQuMTQNCiAgIFxdDQoNCg0KDQojIyMgMS4xLjMgQ2FiYW5nIEM6IFszMCwgMzAsIDM1LCA0MCwgNDVdDQoNCiMjIyMgQS4gTWVhbiAoUmF0YS1yYXRhKQ0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7XHN1bSB4X2l9e259DQpcXQ0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7MzAgKyAzMCArIDM1ICsgNDAgKyA0NX17NX0gPSBcZnJhY3sxODB9ezV9ID0gMzYNClxdDQoNCiMjIyMgQi4gTWVkaWFuDQpcWw0KXHRleHR7TWVkaWFufSA9IHhfe1xmcmFje24rMX17Mn19ID0geF8zID0gMzUNClxdDQoNCiMjIyMgQy4gU3RhbmRhciBEZXZpYXNpDQoqKkxhbmdrYWg6KioNCg0KMS4gSGl0dW5nIFwoKHhfaSAtIFxtdSlcKToNCiAgIFxbDQogICAzMCAtIDM2ID0gLTYsIFwsIDMwIC0gMzYgPSAtNiwgXCwgMzUgLSAzNiA9IC0xLCBcLCA0MCAtIDM2ID0gNCwgXCwgNDUgLSAzNiA9IDkNCiAgIFxdDQoyLiBLdWFkcmF0a2FuOg0KICAgXFsNCiAgICgtNileMiA9IDM2LCBcLCAoLTYpXjIgPSAzNiwgXCwgKC0xKV4yID0gMSwgXCwgNF4yID0gMTYsIFwsIDleMiA9IDgxDQogICBcXQ0KMy4gSGl0dW5nIHJhdGEtcmF0YSBrdWFkcmF0Og0KICAgXFsNCiAgIFxmcmFjezM2ICsgMzYgKyAxICsgMTYgKyA4MX17NX0gPSBcZnJhY3sxNzB9ezV9ID0gMzQNCiAgIFxdDQo0LiBBa2FyIGt1YWRyYXQ6DQogICBcWw0KICAgXHNpZ21hID0gXHNxcnR7MzR9IFxhcHByb3ggNS44Mw0KICAgXF0NCg0KDQoNCiMjIyAxLjEuNC4gQ2FiYW5nIEQ6IFs3MCwgNzUsIDgwLCA4NSwgOTBdDQoNCiMjIyMgQS4gTWVhbiAoUmF0YS1yYXRhKQ0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7XHN1bSB4X2l9e259DQpcXQ0KXFsNClx0ZXh0e01lYW59ID0gXGZyYWN7NzAgKyA3NSArIDgwICsgODUgKyA5MH17NX0gPSBcZnJhY3s0MDB9ezV9ID0gODANClxdDQoNCiMjIyMgQi4gTWVkaWFuDQpcWw0KXHRleHR7TWVkaWFufSA9IHhfe1xmcmFje24rMX17Mn19ID0geF8zID0gODANClxdDQoNCiMjIyMgQy4gU3RhbmRhciBEZXZpYXNpDQoqKkxhbmdrYWg6KioNCg0KMS4gSGl0dW5nIFwoKHhfaSAtIFxtdSlcKToNCiAgIFxbDQogICA3MCAtIDgwID0gLTEwLCBcLCA3NSAtIDgwID0gLTUsIFwsIDgwIC0gODAgPSAwLCBcLCA4NSAtIDgwID0gNSwgXCwgOTAgLSA4MCA9IDEwDQogICBcXQ0KMi4gS3VhZHJhdGthbjoNCiAgIFxbDQogICAoLTEwKV4yID0gMTAwLCBcLCAoLTUpXjIgPSAyNSwgXCwgKDApXjIgPSAwLCBcLCAoNSleMiA9IDI1LCBcLCAoMTApXjIgPSAxMDANCiAgIFxdDQozLiBIaXR1bmcgcmF0YS1yYXRhIGt1YWRyYXQ6DQogICBcWw0KICAgXGZyYWN7MTAwICsgMjUgKyAwICsgMjUgKyAxMDB9ezV9ID0gXGZyYWN7MjUwfXs1fSA9IDUwDQogICBcXQ0KNC4gQWthciBrdWFkcmF0Og0KICAgXFsNCiAgIFxzaWdtYSA9IFxzcXJ0ezUwfSBcYXBwcm94IDcuMDcNCiAgIFxdDQoNCg0KDQojIyMgMS4xLjUgS2VzaW1wdWxhbiBSdW11cyBkYW4gSGFzaWwNCg0KfCBDYWJhbmcgICAgfCBNZWFuIEZvcm11bGEgICAgICAgICB8IE1lZGlhbiBGb3JtdWxhICAgICAgICAgICAgICB8IFN0YW5kYXIgRGV2aWFzaSBGb3JtdWxhICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkEqKiAgICAgfCBcKFxmcmFjezMwMH17NX0gPSA2MFwpIHwgXCh4XzMgPSA2MFwpICAgICAgICAgICAgICAgIHwgXChcc3FydHtcZnJhY3syNTB9ezV9fSA9IDcuMDdcKSAgICAgICAgfA0KfCAqKkIqKiAgICAgfCBcKFxmcmFjezMwMH17NX0gPSA2MFwpIHwgXCh4XzMgPSA2MFwpICAgICAgICAgICAgICAgIHwgXChcc3FydHtcZnJhY3sxMDAwfXs1fX0gPSAxNC4xNFwpICAgICAgfA0KfCAqKkMqKiAgICAgfCBcKFxmcmFjezE4MH17NX0gPSAzNlwpIHwgXCh4XzMgPSAzNVwpICAgICAgICAgICAgICAgIHwgXChcc3FydHtcZnJhY3sxNzB9ezV9fSA9IDUuODNcKSAgICAgICAgfA0KfCAqKkQqKiAgICAgfCBcKFxmcmFjezQwMH17NX0gPSA4MFwpIHwgXCh4XzMgPSA4MFwpICAgICAgICAgICAgICAgIHwgXChcc3FydHtcZnJhY3syNTB9ezV9fSA9IDcuMDdcKSAgICAgICAgfA0KDQotLS0NCg0KIyMgMS4yIENhYmFuZyBEZW5nYW4gUGVueWViYXJhbiBEYXRhIFRlcmtlY2lsDQoNClBlbnllYmFyYW4gZGF0YSBwYWxpbmcga2VjaWwgZGl1a3VyIG1lbmdndW5ha2FuICoqc3RhbmRhciBkZXZpYXNpKiosIHlhbmcgbWVudW5qdWtrYW4gc2ViZXJhcGEgamF1aCBuaWxhaS1uaWxhaSBkYXRhIHRlcnNlYmFyIGRhcmkgcmF0YS1yYXRhbnlhLiBTZW1ha2luIGtlY2lsIHN0YW5kYXIgZGV2aWFzaSwgc2VtYWtpbiB0ZXJwdXNhdCBkYXRhIGRpIHNla2l0YXIgcmF0YS1yYXRhLg0KDQojIyMgMS4yLjEgSGFzaWwgU3RhbmRhciBEZXZpYXNpIFRpYXAgQ2FiYW5nOg0KDQotICoqQ2FiYW5nIEE6KiogNy4wNw0KLSAqKkNhYmFuZyBCOioqIDE0LjE0DQotICoqQ2FiYW5nIEM6KiogNS44Mw0KLSAqKkNhYmFuZyBEOioqIDcuMDcNCg0KIyMjIDEuMi4yIEFuYWxpc2lzOg0KDQotIENhYmFuZyAqKkMqKiBtZW1pbGlraSAqKnN0YW5kYXIgZGV2aWFzaSB0ZXJrZWNpbCAoNS44MykqKi4gQXJ0aW55YSwgZGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEMgcGFsaW5nIHRlcnB1c2F0IGRpIHNla2l0YXIgcmF0YS1yYXRhICgzNiBqdXRhIHJ1cGlhaCksIG1lc2tpcHVuIG5pbGFpLW5pbGFpbnlhIHJlbGF0aWYgcmVuZGFoLg0KLSBJbmkgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFzaSBkYXRhIGRpIENhYmFuZyBDIGtlY2lsIGRpYmFuZGluZ2thbiBjYWJhbmcgbGFpbi4NCg0KLS0tDQoNCiMjIDEuMyBDYWJhbmcgeWFuZyBHYWdhbCBNZW5jYXBhaSBUYXJnZXQgTWluaW11bSAoNTAgSnV0YSBSdXBpYWgpDQoNClNlYnVhaCBjYWJhbmcgZGlrYXRha2FuICoqZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0KiogamlrYSAqKnNlbXVhIG5pbGFpIHBlbmp1YWxhbm55YSBkaSBiYXdhaCA1MCBqdXRhIHJ1cGlhaCoqLg0KDQojIyMgMS4zLjEgUGVuanVhbGFuIFRpYXAgQ2FiYW5nOg0KDQotICoqQ2FiYW5nIEE6KiogWzUwLCA1NSwgNjAsIDY1LCA3MF0gIA0KICBTZW11YSBuaWxhaSAqKuKJpSA1MCoqLiBDYWJhbmcgQSB0aWRhayBnYWdhbC4NCg0KLSAqKkNhYmFuZyBCOioqIFs0MCwgNTAsIDYwLCA3MCwgODBdICANCiAgSGFueWEgKio0MCoqIHlhbmcgZGkgYmF3YWggNTAsIHRldGFwaSB0aWRhayBzZW11YSBuaWxhaSBnYWdhbC4gQ2FiYW5nIEIganVnYSB0aWRhayBnYWdhbC4NCg0KLSAqKkNhYmFuZyBDOioqIFszMCwgMzAsIDM1LCA0MCwgNDVdICANCiAgU2VtdWEgbmlsYWkgKio8IDUwKiouIENhYmFuZyBDICoqZ2FnYWwgc2VwZW51aG55YSoqIG1lbWVudWhpIHRhcmdldC4NCg0KLSAqKkNhYmFuZyBEOioqIFs3MCwgNzUsIDgwLCA4NSwgOTBdICANCiAgU2VtdWEgbmlsYWkgKiriiaUgNTAqKi4gQ2FiYW5nIEQgdGlkYWsgZ2FnYWwuDQoNCiMjIyAxLjMuMiBLZXNpbXB1bGFuOg0KDQpIYW55YSAqKkNhYmFuZyBDKiogeWFuZyAqKmdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSoqIGthcmVuYSBzZW11YSBkYXRhIHBlbmp1YWxhbm55YSBiZXJhZGEgZGkgYmF3YWggNTAganV0YSBydXBpYWguDQoNCiMjIDEuNCBWaXN1YWxpc2FzaSBQZW55ZWJhcmFuIERhdGEgU2V0aWFwIENhYmFuZw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4NCmNhYmFuZ19BIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwKQ0KY2FiYW5nX0IgPC0gYyg0MCwgNTAsIDYwLCA3MCwgODApDQpjYWJhbmdfQyA8LSBjKDMwLCAzMCwgMzUsIDQwLCA0NSkNCmNhYmFuZ19EIDwtIGMoNzAsIDc1LCA4MCwgODUsIDkwKQ0KDQojIE1lbWJ1YXQgQm94IFBsb3QgdW50dWsgc2V0aWFwIGNhYmFuZw0KcGxvdF9seSgpICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGNhYmFuZ19BLCANCiAgICB0eXBlID0gImJveCIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEEiLCANCiAgICBib3htZWFuID0gVFJVRSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2JsdWUnKQ0KICApICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGNhYmFuZ19CLCANCiAgICB0eXBlID0gImJveCIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEIiLCANCiAgICBib3htZWFuID0gVFJVRSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ3B1cnBsZScpDQogICkgJT4lDQogIGFkZF90cmFjZSgNCiAgICB5ID0gY2FiYW5nX0MsIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgQyIsIA0KICAgIGJveG1lYW4gPSBUUlVFLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAncGluaycpDQogICkgJT4lDQogIGFkZF90cmFjZSgNCiAgICB5ID0gY2FiYW5nX0QsIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgRCIsIA0KICAgIGJveG1lYW4gPSBUUlVFLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnY29yYWwnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIHBlciBDYWJhbmciLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQZW5qdWFsYW4gKEp1dGEgUnVwaWFoKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKQ0KICApDQpgYGANCg0KIyMgMS41IFN0cmF0ZWdpIHlhbmcgRGFwYXQgRGlsYWt1a2FuIEJlcmRhc2Fya2FuIEluZm9ybWFzaSB0ZXJzZWJ1dA0KDQpTZWJhZ2FpIG1hbmFqZXIgcGVydXNhaGFhbiwgaW5mb3JtYXNpIGluaSBkYXBhdCBkaW1hbmZhYXRrYW4gdW50dWsgbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbiBkZW5nYW4gbGFuZ2thaC1sYW5na2FoIGJlcmlrdXQ6DQoNCioqMS4gUHJpb3JpdGFza2FuIFBlcmJhaWthbiBDYWJhbmcgQyoqOiBDYWJhbmcgQyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgNTAganV0YSBydXBpYWguIEZva3VzIHBhZGEgZXZhbHVhc2kgbG9rYXNpLCBrYW1wYW55ZSBwZW1hc2FyYW4gbG9rYWwsIGRpdmVyc2lmaWthc2kgcHJvZHVrLCBkYW4gcGVsYXRpaGFuIGthcnlhd2FuIHVudHVrIG1lbmluZ2thdGthbiBwZXJmb3JtYS4NCg0KKioyLiBQZXJ0YWhhbmthbiBLaW5lcmphIENhYmFuZyBBIGRhbiBEKio6IEtlZHVhIGNhYmFuZyBpbmkgc3VkYWggbWVtZW51aGkgdGFyZ2V0LiBQYXN0aWthbiBrb25zaXN0ZW5zaSBraW5lcmphIG1lbGFsdWkgcGVuZ2hhcmdhYW4ga2FyeWF3YW4gZGFuIGFuYWxpc2lzIGZha3RvciBrZWJlcmhhc2lsYW4gdW50dWsgZGlhZGFwdGFzaSBrZSBjYWJhbmcgbGFpbi4NCg0KKiozLiBUaW5na2F0a2FuIEtvbnNpc3RlbnNpIGRpIENhYmFuZyBCKio6IFZhcmlhc2kgcGVuanVhbGFuIHlhbmcgYmVzYXIgZGkgQ2FiYW5nIEIgcGVybHUgZGlrdXJhbmdpIGRlbmdhbiBtZW1hc3Rpa2FuIHN0b2sgcHJvZHVrIGZhdm9yaXQgZGFuIGxheWFuYW4geWFuZyBrb25zaXN0ZW4uDQoNCioqNC4gT3B0aW1hbGthbiBTdW1iZXIgRGF5YSoqOiBBbG9rYXNpa2FuIGludmVzdGFzaSBwZW1hc2FyYW4ga2UgQ2FiYW5nIEMgdGVybGViaWggZGFodWx1LiBMYWt1a2FuIHJvdGFzaSBzdGFmIGJlcmtpbmVyamEgdGluZ2dpIGRhcmkgQ2FiYW5nIEEgYXRhdSBEIGtlIENhYmFuZyBDIHVudHVrIG1lbmR1a3VuZyBwZW5pbmdrYXRhbi4NCg0KKio1LiBNb25pdG9yaW5nIGRhbiBFdmFsdWFzaSoqOiBHdW5ha2FuIGRhc2hib2FyZCB1bnR1ayBtZW1hbnRhdSBwZW5qdWFsYW4gc2VjYXJhIHJlYWwtdGltZSwgdGV0YXBrYW4gdGFyZ2V0IG1pbmdndWFuLCBkYW4gZXZhbHVhc2kgcGVyZm9ybWEgYmVyZGFzYXJrYW4gS1BJIHlhbmcgamVsYXMuDQoNClBlbmRla2F0YW4gYmVyYmFzaXMgZGF0YSBpbmkgbWVtYXN0aWthbiBrZXB1dHVzYW4geWFuZyBkaWFtYmlsIGxlYmloIHRlcmFyYWggZGFuIGVmZWt0aWYuDQoNCi0tLQ0KDQojIExBVElIQU4gMg0KDQpUYWJlbCBkYXRhIHRlcmthaXQgcGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4gd2lsYXlhaCBkYW4gamVuaXMgYmFyYW5nOg0KDQp8ICoqV2lsYXlhaCoqIHwgKipKZW5pcyBCYXJhbmcqKiB8ICoqSnVtbGFoICh1bml0KSoqIHwgKipXYWt0dSBQZW5naXJpbWFuIChqYW0pKiogfCAqKkJpYXlhIHBlciBVbml0IChScCkqKiB8DQp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgVXRhcmEgICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjAwICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUwMDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IFBha2FpYW4gICAgICAgICAgfCAxNTAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICAgICAgICAgICAgfCA4MDAwICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgTWFrYW5hbiAgICAgICAgICB8IDE4MCAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwMDAwICAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTIwICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIwMDAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IEVsZWt0cm9uaWsgICAgICAgfCAyNTAgICAgICAgICAgICAgICB8IDQgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNDAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgUGFrYWlhbiAgICAgICAgICB8IDMwMCAgICAgICAgICAgICAgIHwgOSAgICAgICAgICAgICAgICAgICAgICAgICB8IDg1MDAgICAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMjIwICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOTUwMCAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxNDAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMTAwMCAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgRWxla3Ryb25payAgICAgICB8IDE4MCAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0NTAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMzUwICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNzgwMCAgICAgICAgICAgICAgICAgICAgfA0KfCBVdGFyYSAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxNzAgICAgICAgICAgICAgICB8IDQgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgRWxla3Ryb25payAgICAgICB8IDI1MCAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2MDAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTkwICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgIHwgODIwMCAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IE1ha2FuYW4gICAgICAgICAgfCAxMzAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMDUwMCAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgUGVyYWxhdGFuICAgICAgICB8IDE4MCAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICB8IDExNTAwICAgICAgICAgICAgICAgICAgIHwNCg0KDQojIyAyLjEgQW5hbGlzaXMgRWZpc2llbnNpIFBlbmdpcmltYW4NCg0KIyMjIDIuMS4xIFZpc3VhbGlzYXNpIFBlbmdpcmltYW4gQmFyYW5nIEJlcmRhc2Fya2FuIEp1bWxhaCBCYXJhbmcsIFdha3R1IFBlbmdpcmltYW4sIGRhbiBCaWF5YSBQZXIgVW5pdA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSB5YW5nIGRpZ3VuYWthbg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCANCiAgICAgICAgICAgICAgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgDQogICAgICAgICAgICAgICJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIpLA0KICBKZW5pc19CYXJhbmcgPSBjKCJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsIA0KICAgICAgICAgICAgICAgICAgICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsIA0KICAgICAgICAgICAgICAgICAgICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiksDQogIEp1bWxhaF9CYXJhbmcgPSBjKDIwMCwgMTUwLCAxODAsIDEyMCwgMjUwLCANCiAgICAgICAgICAgICAgICAgICAgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIA0KICAgICAgICAgICAgICAgICAgICAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIA0KICAgICAgICAgICAgICAgICAgICAgICA5LCA3LCA1LCA2LCA4LCANCiAgICAgICAgICAgICAgICAgICAgICAgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgDQogICAgICAgICAgICAgICAgICAgICA4NTAwLCA5NTAwLCAxMTAwMCwgMTQ1MDAsIDc4MDAsIA0KICAgICAgICAgICAgICAgICAgICAgMTIwMDAsIDE2MDAwLCA4MjAwLCAxMDUwMCwgMTE1MDApDQopDQoNCiMgTWVtYnVhdCBwbG90IDNEIG1lbmdndW5ha2FuIHBsb3RseQ0KcGxvdF8zZCA8LSBwbG90X2x5KA0KICBkYXRhLA0KICB4ID0gfkp1bWxhaF9CYXJhbmcsDQogIHkgPSB+V2FrdHVfUGVuZ2lyaW1hbiwNCiAgeiA9IH5CaWF5YV9QZXJfVW5pdCwNCiAgdHlwZSA9ICdzY2F0dGVyM2QnLA0KICBtb2RlID0gJ21hcmtlcnMnLA0KICBjb2xvciA9IH5XaWxheWFoLA0KICBzaXplID0gfkJpYXlhX1Blcl9Vbml0ICogMC4wMDAxLCAgIyBNZW1wZXJiZXNhciB1a3VyYW4gYnViYmxlDQogIG1hcmtlciA9IGxpc3QoDQogICAgc2l6ZSA9IDEwLA0KICAgIG9wYWNpdHkgPSAxDQogICksDQogIHRleHQgPSB+cGFzdGUoDQogICAgIldpbGF5YWg6IiwgV2lsYXlhaCwNCiAgICAiPGJyPldha3R1IFBlbmdpcmltYW46IiwgV2FrdHVfUGVuZ2lyaW1hbiwgImphbSIsDQogICAgIjxicj5KdW1sYWggQmFyYW5nOiIsIEp1bWxhaF9CYXJhbmcsICJ1bml0IiwNCiAgICAiPGJyPkJpYXlhIHBlciBVbml0OiBScCIsIEJpYXlhX1Blcl9Vbml0DQogICkNCikgJT4lIGxheW91dCgNCiAgdGl0bGUgPSAiQW5hbGlzaXMgM0QgRWZpc2llbnNpIFBlbmdpcmltYW4gQmFyYW5nIiwNCiAgc2NlbmUgPSBsaXN0KA0KICAgIHhheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIkp1bWxhaCBCYXJhbmciLA0KICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICApLA0KICAgIHlheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIlBlbmdpcmltYW4gKGphbSkiLA0KICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICApLA0KICAgIHpheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIkJpYXlhIChScCkiLA0KICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICApDQogICksDQogIGxlZ2VuZCA9IGxpc3QoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiV2lsYXlhaCIpLA0KICAgIGJnY29sb3IgPSAicmdiYSgxNzMsIDIxNiwgMjMwLCAwLjcpIiwNCiAgICBib3JkZXJjb2xvciA9ICJyZ2JhKDI1NSwgMCwgMCwgMC43KSIsDQogICAgYm9yZGVyd2lkdGggPSAxDQogICkNCikNCg0KcGxvdF8zZA0KYGBgDQoNCiMjIyAyLjEuMiBXaWxheWFoIERlbmdhbiBFZmlzaWVuc2kgUGVuZ2lyaW1hbiBUZXJlbmRhaCBCZXJkYXNhcmthbiBCaWF5YSBQZXIgVW5pdCBkYW4gV2FrdHUgUGVuZ2lyaW1hbg0KDQpVbnR1ayBtZW5lbnR1a2FuIHdpbGF5YWggbWFuYSB5YW5nIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGJlcmRhc2Fya2FuICoqYmlheWEgcGVyIHVuaXQqKiBkYW4gKip3YWt0dSBwZW5naXJpbWFuKiosIGJpc2EgbWVuZ2d1bmFrYW4gbWV0cmlrIHlhbmcgbWVuZ2dhYnVuZ2thbiBrZWR1YSBmYWt0b3IgdGVyc2VidXQuIFNhbGFoIHNhdHUgY2FyYSB1bnR1ayBtZWxha3VrYW5ueWEgYWRhbGFoIGRlbmdhbiBtZW5naGl0dW5nICoqYmlheWEgcGVyIHVuaXQgcGVyIGphbSBwZW5naXJpbWFuKiogKHlhbmcgbWVuZ2dhbWJhcmthbiBiaWF5YSB5YW5nIGRpa2VsdWFya2FuIHVudHVrIHNldGlhcCB1bml0IGJhcmFuZyB5YW5nIGRpa2lyaW0gZGFsYW0gc2V0aWFwIGphbSkuDQoNClJ1bXVzIHVudHVrIG1lbmdoaXR1bmcgKipiaWF5YSBwZXIgdW5pdCBwZXIgamFtIHBlbmdpcmltYW4qKiBhZGFsYWg6DQoNClxbDQpcdGV4dHtFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0NClxdDQoNCiMjIyMgTGFuZ2thaC1sYW5na2FoIHBlcmhpdHVuZ2FuOg0KDQoqKjEuIE1lbmdoaXR1bmcgRWZpc2llbnNpIHVudHVrIFNldGlhcCBEYXRhOioqDQoNCktpdGEgYWthbiBtZW5naGl0dW5nIGVmaXNpZW5zaSB1bnR1ayBzZXRpYXAgYmFyaXMgZGF0YSBkZW5nYW4gbWVuZ2d1bmFrYW4gcnVtdXMgZGkgYXRhcy4NCg0KLSBVdGFyYSwgRWxla3Ryb25payAoMTUsMDAwIC8gNSkgPSAqKjMsMDAwKioNCi0gU2VsYXRhbiwgUGFrYWlhbiAoOCwwMDAgLyA4KSA9ICoqMSwwMDAqKg0KLSBUaW11ciwgTWFrYW5hbiAoMTAsMDAwIC8gNikgPSAqKjEsNjY3KioNCi0gQmFyYXQsIFBlcmFsYXRhbiAoMTIsMDAwIC8gNykgPSAqKjEsNzE0KioNCi0gVGVuZ2FoLCBFbGVrdHJvbmlrICgxNCwwMDAgLyA0KSA9ICoqMyw1MDAqKg0KLSBVdGFyYSwgUGFrYWlhbiAoOCw1MDAgLyA5KSA9ICoqOTQ0LjQ0KioNCi0gU2VsYXRhbiwgTWFrYW5hbiAoOSw1MDAgLyA3KSA9ICoqMSwzNTcuMTQqKg0KLSBUaW11ciwgUGVyYWxhdGFuICgxMSwwMDAgLyA1KSA9ICoqMiwyMDAqKg0KLSBCYXJhdCwgRWxla3Ryb25payAoMTQsNTAwIC8gNikgPSAqKjIsNDE3KioNCi0gVGVuZ2FoLCBQYWthaWFuICg3LDgwMCAvIDgpID0gKio5NzUqKg0KLSBVdGFyYSwgUGVyYWxhdGFuICgxMiwwMDAgLyA0KSA9ICoqMywwMDAqKg0KLSBTZWxhdGFuLCBFbGVrdHJvbmlrICgxNiwwMDAgLyA2KSA9ICoqMiw2NjcqKg0KLSBUaW11ciwgUGFrYWlhbiAoOCwyMDAgLyA3KSA9ICoqMSwxNzEuNDMqKg0KLSBCYXJhdCwgTWFrYW5hbiAoMTAsNTAwIC8gNSkgPSAqKjIsMTAwKioNCi0gVGVuZ2FoLCBQZXJhbGF0YW4gKDExLDUwMCAvIDUpID0gKioyLDMwMCoqDQoNCioqMi4gTWVuZ2hpdHVuZyBSYXRhLVJhdGEgRWZpc2llbnNpIHVudHVrIFNldGlhcCBXaWxheWFoOioqDQoNClNldGVsYWggbWVuZ2hpdHVuZyBlZmlzaWVuc2kgdW50dWsgc2V0aWFwIGJhcmlzLCBraXRhIGhpdHVuZyAqKnJhdGEtcmF0YSBlZmlzaWVuc2kqKiB1bnR1ayBzZXRpYXAgd2lsYXlhaC4NCg0KLSAqKlV0YXJhKio6ICgzLDAwMCArIDk0NC40NCArIDMsMDAwKSAvIDMgPSAyLDMxNC44MQ0KLSAqKlNlbGF0YW4qKjogKDEsMDAwICsgMSwzNTcuMTQgKyAyLDY2NykgLyAzID0gMSw2NzQuNzENCi0gKipUaW11cioqOiAoMSw2NjcgKyAyLDIwMCArIDEsMTcxLjQzKSAvIDMgPSAxLDY3OS44MQ0KLSAqKkJhcmF0Kio6ICgxLDcxNCArIDIsNDE3ICsgMiwxMDApIC8gMyA9IDIsMDc3LjAwDQotICoqVGVuZ2FoKio6ICgzLDUwMCArIDk3NSArIDIsMzAwKSAvIDMgPSAyLDI1OC4zMw0KDQoqKjMuIE1lbmVudHVrYW4gV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoOioqDQoNCkRhcmkgcGVyaGl0dW5nYW4gcmF0YS1yYXRhIGVmaXNpZW5zaSBkaSBhdGFzLCB3aWxheWFoIGRlbmdhbiAqKmVmaXNpZW5zaSB0ZXJlbmRhaCoqIGFkYWxhaCAqKlNlbGF0YW4qKiwgZGVuZ2FuIHJhdGEtcmF0YSBlZmlzaWVuc2kgKioxLDY3NC43MSoqLg0KDQojIyMgMi4xLjMgS2VzaW1wdWxhbjoNCg0KV2lsYXlhaCAqKlNlbGF0YW4qKiBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbiwgeWFuZyBtZW51bmp1a2thbiBiYWh3YSBwZW5naXJpbWFuIGJhcmFuZyBkaSB3aWxheWFoIGluaSByZWxhdGlmIGt1cmFuZyBvcHRpbWFsIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWluLg0KDQpXaWxheWFoIGRlbmdhbiAqKm5pbGFpIGVmaXNpZW5zaSB0ZXJlbmRhaCoqIGFrYW4gbWVudW5qdWtrYW4gd2lsYXlhaCBkZW5nYW4gYmlheWEgdGluZ2dpIGRhbiB3YWt0dSBwZW5naXJpbWFuIGxhbWEsIHlhbmcgYmVyYXJ0aSBlZmlzaWVuc2kgcGVuZ2lyaW1hbm55YSByZW5kYWguDQoNCi0tLQ0KDQojIyAyLjIgUmVrb21lbmRhc2kgT3BlcmFzaW9uYWwNCg0KIyMjIDIuMi4xIFdpbGF5YWggWWFuZyBNZW1lcmx1a2FuIFBlcmhhdGlhbiBLaHVzdXMgdW50dWsgTWVuaW5na2F0a2FuIEVmaXNpZW5zaSBQZW5naXJpbWFuDQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzIGVmaXNpZW5zaSBwZW5naXJpbWFuLCB3aWxheWFoIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBhZGFsYWggKipXaWxheWFoIFNlbGF0YW4qKiwga2FyZW5hIHdpbGF5YWggaW5pIG1lbWlsaWtpICoqcmF0YS1yYXRhIGVmaXNpZW5zaSB0ZXJlbmRhaCoqICgxLDY3NC43MSkuIEVmaXNpZW5zaSBwZW5naXJpbWFuIHlhbmcgbGViaWggcmVuZGFoIG1lbnVuanVra2FuIGJhaHdhIGRpIHdpbGF5YWggdGVyc2VidXQsIGtvbWJpbmFzaSBhbnRhcmEgYmlheWEgcGVyIHVuaXQgeWFuZyByZWxhdGlmIHRpbmdnaSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGxhbWEgYmVya29udHJpYnVzaSBwYWRhIHBlbmdpcmltYW4geWFuZyBrdXJhbmcgb3B0aW1hbC4NCg0KVW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIGRpIFdpbGF5YWggU2VsYXRhbiwgYmViZXJhcGEgbGFuZ2thaCB5YW5nIGRhcGF0IGRpcGVydGltYmFuZ2thbiBhZGFsYWg6DQoNCjEuICoqT3B0aW1hbGthbiBXYWt0dSBQZW5naXJpbWFuKioNCjIuICoqTmVnb3NpYXNpIEJpYXlhIGRlbmdhbiBQZW1hc29rKioNCjMuICoqQW5hbGlzaXMgUGVuZ2lyaW1hbiBCZXJ1bGFuZyoqDQo0LiAqKlBlbmluZ2thdGFuIEluZnJhc3RydWt0dXIgZGFuIFRla25vbG9naSoqDQo1LiAqKkV2YWx1YXNpIFByb3NlcyBPcGVyYXNpb25hbCoqDQoNCiMjIyAyLjIuMiBSZWtvbWVuZGFzaSB1bnR1ayBNZW5ndXJhbmdpIEJpYXlhIGRhbiBXYWt0dSBQZW5naXJpbWFuIGRpIFdpbGF5YWggU2VsYXRhbg0KDQpVbnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gZGkgKipXaWxheWFoIFNlbGF0YW4qKiwgYmVyaWt1dCBhZGFsYWggbGFuZ2thaC1sYW5na2FoIHlhbmcgZGFwYXQgZGlhbWJpbDoNCg0KMS4gKipPcHRpbWFzaSBSdXRlIFBlbmdpcmltYW4qKjogR3VuYWthbiB0ZWtub2xvZ2kgdW50dWsgbWVyZW5jYW5ha2FuIHJ1dGUgdGVyY2VwYXQgZGFuIHRlcm11cmFoIHNlcnRhIGF0dXIgamFkd2FsIHBlbmdpcmltYW4gbGViaWggZWZpc2llbi4NCjIuICoqTmVnb3NpYXNpIGRlbmdhbiBQZW1hc29rIGRhbiBQZW55ZWRpYSBMb2dpc3RpayoqOiBEYXBhdGthbiBkaXNrb24gdm9sdW1lIGRhbiBwaWxpaCBwZW55ZWRpYSBsb2dpc3RpayBkZW5nYW4gdGFyaWYga29tcGV0aXRpZi4NCjMuICoqUGVyYmFpa2FuIEluZnJhc3RydWt0dXIqKjogQmFuZ3VuIGd1ZGFuZyB5YW5nIGxlYmloIGRla2F0IGRlbmdhbiB0dWp1YW4gZGFuIGd1bmFrYW4ga2VuZGFyYWFuIGxlYmloIGVmaXNpZW4uDQo0LiAqKlBlbWFuZmFhdGFuIFRla25vbG9naSoqOiBJbXBsZW1lbnRhc2lrYW4gc2lzdGVtIG1hbmFqZW1lbiByYW50YWkgcGFzb2thbiBkYW4gcGVsYWNha2FuIHJlYWwtdGltZSB1bnR1ayBtZW1wZXJjZXBhdCBwcm9zZXMuDQo1LiAqKlBlbmdpcmltYW4gVGVycGFkdSoqOiBHYWJ1bmdrYW4gYmViZXJhcGEgcGVuZ2lyaW1hbiB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIG9wZXJhc2lvbmFsLg0KNi4gKipNYW5hamVtZW4gUGVyc2VkaWFhbioqOiBUZXJhcGthbiBzaXN0ZW0gSnVzdC1pbi1UaW1lIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgZGFuIG1lbXBlcmNlcGF0IHBlbmdpcmltYW4uDQo3LiAqKlBlbGF0aWhhbiBUaW0gTG9naXN0aWsqKjogTGF0aWggdGltIGxvZ2lzdGlrIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgZGFuIHBlbmdlbG9sYWFuIHN1bWJlciBkYXlhLg0KDQpVbnR1ayBXaWxheWFoIFNlbGF0YW4sIGxhbmdrYWgtbGFuZ2thaCBzdHJhdGVnaXMgc2VwZXJ0aSBvcHRpbWFzaSBydXRlIHBlbmdpcmltYW4sIG5lZ29zaWFzaSBiaWF5YSBkZW5nYW4gcGVtYXNvaywgcGVtYW5mYWF0YW4gdGVrbm9sb2dpIGxvZ2lzdGlrLCBzZXJ0YSBwZXJiYWlrYW4gaW5mcmFzdHJ1a3R1ciBkaXN0cmlidXNpIGFrYW4gc2FuZ2F0IG1lbWJhbnR1IGRhbGFtIG1lbmd1cmFuZ2kgYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4uIEZva3VzIHBhZGEgcGVuaW5na2F0YW4gZWZpc2llbnNpIG9wZXJhc2lvbmFsIGRhbiBwZW5nZ3VuYWFuIHRla25vbG9naSBkYXBhdCBtZW5naGFzaWxrYW4gcGVuZ2hlbWF0YW4gYmlheWEgeWFuZyBzaWduaWZpa2FuIGRhbiB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggY2VwYXQuDQoNCi0tLQ0KDQojIyAyLjMgS2luZXJqYSBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcNCg0KQmVyaWt1dCBhZGFsYWggKiphbmFsaXNpcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gamVuaXMgYmFyYW5nIGRhbiB3aWxheWFoKiogbWVuZ2d1bmFrYW4gZGF0YSB5YW5nIGRpYmVyaWthbjoNCg0KIyMjIDIuMy4xIEFuYWxpc2lzIFdha3R1IFBlbmdpcmltYW4NCg0KKipSYXRhLXJhdGEgd2FrdHUgcGVuZ2lyaW1hbiBwZXIgd2lsYXlhaDoqKg0KDQogIC0gKipVdGFyYSoqOiAoNSArIDkgKyA0KSAvIDMgPSA2IGphbQ0KICAtICoqU2VsYXRhbioqOiAoOCArIDcgKyA2KSAvIDMgPSA3IGphbQ0KICAtICoqVGltdXIqKjogKDYgKyA1ICsgNykgLyAzID0gNiBqYW0NCiAgLSAqKkJhcmF0Kio6ICg3ICsgNiArIDUpIC8gMyA9IDYgamFtDQogIC0gKipUZW5nYWgqKjogKDQgKyA4ICsgNSkgLyAzID0gNS42NyBqYW0NCg0KKipXaWxheWFoIGRlbmdhbiB3YWt0dSBwZW5naXJpbWFuIHRlcmNlcGF0Kio6ICoqVGVuZ2FoKiogKDUuNjcgamFtKS4NCg0KIyMjIDIuMy4yIEFuYWxpc2lzIEJpYXlhIHBlciBVbml0DQoNCioqUmF0YS1yYXRhIGJpYXlhIHBlciB1bml0IHBlciB3aWxheWFoOioqDQoNCiAgLSAqKlV0YXJhKio6ICgxNSwwMDAgKyA4LDUwMCArIDEyLDAwMCkgLyAzID0gMTEsODMzLjMzDQogIC0gKipTZWxhdGFuKio6ICg4LDAwMCArIDksNTAwICsgMTYsMDAwKSAvIDMgPSAxMSwxNjYuNjcNCiAgLSAqKlRpbXVyKio6ICgxMCwwMDAgKyAxMSwwMDAgKyA4LDIwMCkgLyAzID0gOSw3MzMuMzMNCiAgLSAqKkJhcmF0Kio6ICgxMiwwMDAgKyAxNCw1MDAgKyAxMCw1MDApIC8gMyA9IDEyLDMzMy4zMw0KICAtICoqVGVuZ2FoKio6ICgxNCwwMDAgKyA3LDgwMCArIDExLDUwMCkgLyAzID0gMTEsNzY2LjY3DQoNCioqV2lsYXlhaCBkZW5nYW4gYmlheWEgcGVyIHVuaXQgdGVyZW5kYWgqKjogKipUaW11cioqICg5LDczMy4zMykuDQoNCiMjIyAyLjMuMyBBbmFsaXNpcyBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcNCg0KKipXYWt0dSBQZW5naXJpbWFuIFRlcmNlcGF0IHBlciBKZW5pcyBCYXJhbmc6KioNCg0KICAtICoqRWxla3Ryb25payoqOiBVdGFyYSAoNSBqYW0pLg0KICAtICoqUGFrYWlhbioqOiBUaW11ciAoNyBqYW0pLg0KICAtICoqTWFrYW5hbioqOiBCYXJhdCAoNSBqYW0pLg0KICAtICoqUGVyYWxhdGFuKio6IFRlbmdhaCAoNSBqYW0pLg0KDQoqKkJpYXlhIHBlciBVbml0IFRlcmVuZGFoIHBlciBKZW5pcyBCYXJhbmc6KioNCg0KICAtICoqRWxla3Ryb25payoqOiBUZW5nYWggKDE0LDAwMCBScCkuDQogIC0gKipQYWthaWFuKio6IFRlbmdhaCAoNyw4MDAgUnApLg0KICAtICoqTWFrYW5hbioqOiBUaW11ciAoMTAsMDAwIFJwKS4NCiAgLSAqKlBlcmFsYXRhbioqOiBUaW11ciAoMTEsMDAwIFJwKS4NCg0KIyMjIDIuMy40IEtlc2ltcHVsYW4NCg0KMS4gKipXaWxheWFoIGRlbmdhbiB3YWt0dSBwZW5naXJpbWFuIHRlcmNlcGF0KiogYWRhbGFoICoqVGVuZ2FoKiogKDUuNjcgamFtKS4NCjIuICoqV2lsYXlhaCBkZW5nYW4gYmlheWEgcGVyIHVuaXQgdGVyZW5kYWgqKiBhZGFsYWggKipUaW11cioqICg5LDczMy4zMyBScCkuDQozLiAqKkplbmlzIGJhcmFuZyBkZW5nYW4ga2luZXJqYSB0ZXJiYWlrKiogKGJpYXlhIGRhbiB3YWt0dSB0ZXJlbmRhaCk6DQogICAtICoqRWxla3Ryb25payoqOiBXaWxheWFoIFV0YXJhIGRhbiBUZW5nYWggdW5nZ3VsLg0KICAgLSAqKlBha2FpYW4qKjogV2lsYXlhaCBUZW5nYWggdW5nZ3VsLg0KICAgLSAqKk1ha2FuYW4qKjogV2lsYXlhaCBUaW11ciB1bmdndWwuDQogICAtICoqUGVyYWxhdGFuKio6IFdpbGF5YWggVGVuZ2FoIHVuZ2d1bC4gDQogDQotLS0NCg0KIyBSRUZFUkVOU0kNCg0KMS4gWXVzdWYsIEwuIE0uLCBTdW5hcnlhLCBFLiwgJiBTYW1zdWRpbiwgQS4gKDIwMjIpLiBPcHRpbWFsaXNhc2kgc3RyYXRlZ2kgc2VnbWVudGluZywgdGFyZ2V0aW5nLCBkYW4gcG9zaXRpb25pbmcgZGFsYW0gbWVuaW5na2F0a2FuIHBlbmp1YWxhbi4gKkJ1c2luZXNzIE1hbmFnZW1lbnQgYW5kIEVudHJlcHJlbmV1cnNoaXAgSm91cm5hbCosIDQoMSkuIFJldHJpZXZlZCBmcm9tIFtodHRwczovL2p1cm5hbC51bmlnYWwuYWMuaWQvYm1lai9hcnRpY2xlL3ZpZXcvNDM0MV0oaHR0cHM6Ly9qdXJuYWwudW5pZ2FsLmFjLmlkL2JtZWovYXJ0aWNsZS92aWV3LzQzNDEpDQoNCjIuIEthcnlhIEFudWdlcmFoIEpheWEuICgyMDIzKS4gU3RyYXRlZ2kgZWtzcGFuc2kgc2FsZXMgdGVycml0b3J5IG1hbmFnZW1lbnQgZGFsYW0gbWVuaW5na2F0a2FuIHBlcnR1bWJ1aGFuIHBlbmp1YWxhbjogU3R1ZGkga2FzdXMgcGFkYSBQVC4gS2FyeWEgQW51Z2VyYWggSmF5YSBDYWJhbmcgTGFtcHVuZy4gKkp1cm5hbCBTYWJ1cmFpKi4gUmV0cmlldmVkIGZyb20gW2h0dHBzOi8vanVybmFsLnNhYnVyYWkuYWMuaWRdKGh0dHBzOi8vanVybmFsLnNhYnVyYWkuYWMuaWQpDQoNCjMuIFN5bnRheCBMaXRlcmF0ZS4gKDIwMjMpLiBBbmFsaXNpcyBzdHJhdGVnaSBwZW1hc2FyYW4gcGFkYSBtaW5pbWFya2V0IEFsZmFtYXJ0IHVudHVrIG1lbmluZ2thdGthbiB2b2x1bWUgcGVuanVhbGFuLiAqU3ludGF4IExpdGVyYXRlOiBKdXJuYWwgSWxtaWFoIEluZG9uZXNpYSouIFJldHJpZXZlZCBmcm9tIFtodHRwczovL21lZGlhLm5lbGl0aS5jb21dKGh0dHBzOi8vbWVkaWEubmVsaXRpLmNvbSkNCg0KNC4gWnVsa2lmbHksIEYuICgyMDIzKS4gKipQZW5lcmFwYW4gTGVhbiBTZXJ2aWNlIHVudHVrIE1lcmVkdWtzaSBXYXN0ZSBwYWRhIExheWFuYW4gUGVuZ2lyaW1hbiBCYXJhbmcgZGkgUGVydXNhaGFhbiBMb2dpc3RpayoqLiAqVGhlc2lzKi4gSW5zdGl0dXQgVGVrbm9sb2dpIFNlcHVsdWggTm9wZW1iZXIuIERpYWtzZXMgZGFyaSBbcmVwb3NpdG9yeS5pdHMuYWMuaWRdKGh0dHBzOi8vcmVwb3NpdG9yeS5pdHMuYWMuaWQpLg0KDQo1LiBBcml5YW50aSwgRC4gKDIwMjEpLiAqKlBlbmluZ2thdGFuIEVmaXNpZW5zaSBMb2dpc3RpayBkaSBOZWdhcmEgS2VwdWxhdWFuKiouICpKdXJuYWwgVHJhbnNwb3J0YXNpICYgTG9naXN0aWsgSW5kb25lc2lhKi4gRGlha3NlcyBkYXJpIFtyZXBvc2l0b3J5LnVuYWlyLmFjLmlkXShodHRwczovL3JlcG9zaXRvcnkudW5haXIuYWMuaWQpLg0KDQo2LiBSYWhheXUsIFMuLCAmIEhhcnlhbnRvLCBBLiAoMjAyMCkuICoqRWZpc2llbnNpIERpc3RyaWJ1c2kgQmFyYW5nIHBhZGEgUGVydXNhaGFhbiBMb2dpc3RpayoqLiAqSnVybmFsIE1hbmFqZW1lbiBMb2dpc3RpayBJbmRvbmVzaWEqLCAxMigzKSwgMTAxLTExNS4gRGlha3NlcyBkYXJpIFtqdXJuYWwudW5zLmFjLmlkXShodHRwczovL2p1cm5hbC51bnMuYWMuaWQpLg0KDQo=