Tugas Menghitung Mean, Median dan Standar Deviasi

Statistika Dasar

Logo

Tugas Statistika Dasar Bab VI

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

Dari soal di atas, pertama kita akan melakukan perhitungan Rata-rata, Median, dan Standar Deviasi dari masing-masing cabang.

Perhitungan Rata-rata, Median, dan Standar Deviasi

Untuk menghitung rata-rata, median, dan standar deviasi dari masing-masing cabang (A, B, C, dan D), mari kita lakukan satu per satu.

A. Cabang A: 50, 55, 60, 65, 70

1. Rata-rata
\[ \text{Rata-rata} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \]

2. Median
Karena data sudah diurutkan, median itu kan nilai yang berada di posisi tengah. Karena ada 5 data, mediannya berada di urutan ke-3, yaitu \(60\).

3. Standar Deviasi
- Langkah 1: Hitung selisih kuadrat dari setiap data rata-rata:
\[ (50-60)^2 = (-10)^2 = 100 (55-60)^2 = (-5)^2 = 25 (60-60)^2 = (0)^2 = 0 (65-60)^2 = (5)^2 = 25 (70-60)^2 = (10)^2 = 100 \]

  • Langkah 2: Jumlahkan hasil kuadratnya:
    \[ 100 + 25 + 0 + 25 + 100 = 250 \]

  • Langkah 3: Varians (sebab ini data sampel):
    \[ \text{Varians} = \frac{250}{5-1} = \frac{250}{4} = 62.5 \]

  • Langkah 4: Standar deviasi:
    \[ \sigma = \sqrt{62.5} \approx 7.91 \]

Hasil Cabang A:
Rata-rata = \(60\), Median = \(60\), Standar Deviasi ≈ \(7.91\)


B. Cabang B: 40, 50, 60, 70, 80

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

2. Median
Median nya \(60\)

3. Standar Deviasi
- Langkah 1: Hitung selisih kuadrat: \[ (40-60)^2 = (-20)^2 = 400 (50-60)^2 = (-10)^2 = 100 (60-60)^2 = (0)^2 = 0 (70-60)^2 = (10)^2 = 100 (80-60)^2 = (20)^2 = 400 \]

  • Langkah 2: Jumlahkan:
    \[ 400 + 100 + 0 + 100 + 400 = 1000 \]

  • Langkah 3: Varians:
    \[ \text{Varians} = \frac{1000}{5-1} = \frac{1000}{4} = 250 \]

  • Langkah 4: Standar deviasi:
    \[ \sigma = \sqrt{250} \approx 15.81 \]

Hasil Cabang B:
Rata-rata = \(60\), Median = \(60\), Standar Deviasi ≈ \(15.81\)


C. Cabang C: 30, 30, 35, 40, 45

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

2. Median
Median \(35\).

3. Standar Deviasi
- Langkah 1: Hitung selisih kuadrat: \[ (30-36)^2 = (-6)^2 = 36 (30-36)^2 = (-6)^2 = 36 (35-36)^2 = (-1)^2 = 1 (40-36)^2 = (4)^2 = 16 (45-36)^2 = (9)^2 = 81 \]

  • Langkah 2: Jumlahkan hasil kuadratnya:
    \[ 36 + 36 + 1 + 16 + 81 = 170 \]

  • Langkah 3: Varians:
    \[ \text{Varians} = \frac{170}{5-1} = \frac{170}{4} = 42.5 \]

  • Langkah 4: Standar deviasi:
    \[ \sigma = \sqrt{42.5} \approx 6.52 \]

Hasil Cabang C:
Rata-rata = \(36\), Median = \(35\), Standar Deviasi ≈ \(6.52\)


C. Cabang D: 70, 75, 80, 85, 90

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

2. Median
Median \(80\)

3. Standar Deviasi
- Langkah 1: Hitung selisih kuadrat:
\[ (70-80)^2 = (-10)^2 = 100 (75-80)^2 = (-5)^2 = 25 (80-80)^2 = (0)^2 = 0 (85-80)^2 = (5)^2 = 25 (90-80)^2 = (10)^2 = 100 \]

  • Langkah 2: Jumlahkan hasil kuadratnya:
    \[ 100 + 25 + 0 + 25 + 100 = 250 \]

  • Langkah 3: Varians:
    \[ \text{Varians} = \frac{250}{5-1} = \frac{250}{4} = 62.5 \]

  • Langkah 4: Standar deviasi:
    \[ \sigma = \sqrt{62.5} \approx 7.91 \]

Hasil Cabang D:
Rata-rata = \(80\), Median = \(80\), Standar Deviasi ≈ \(7.91\)


Ringkasan Hasil

Cabang Rata-rata Median Standar Deviasi
A 60 60 7.91
B 60 60 15.81
C 36 35 6.52
D 80 80 7.91

Penyebaran Paling Kecil

Cabang yang punya penyebaran data paling kecil itu adalah Cabang C, karena standar deviasinya yang paling kecil, yaitu \(6.52\).

Karena di Cabang C, hasil penjualannya lebih konsisten dibandingkan cabang lain, meskipun rata-ratanya lebih kecil dibanding cabang lainnya.

Cabang Yang Gagal

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

Cabang A: Semua data di atas 50 juta, tidak gagal.

Cabang B: Ada satu data di bawah 50 juta (yaitu 40), tetapi tidak semuanya di bawah target. Tidak gagal.

Cabang C: Semua data di bawah 50 juta (30, 30, 35, 40, 45). Gagal mencapai target penjualan.

Cabang D: Semua data di atas 50 juta, tidak gagal.

Kesimpulan: Cabang C adalah satu-satunya cabang yang gagal mencapai target minimum penjualan sebesar 50 juta rupiah di semua data.

Penjelasan tambahan: Cabang C menunjukkan konsistensi dalam penjualan, tetapi nilai konsisten ini berada di bawah target perusahaan. Hal ini menunjukkan perlunya upaya strategis untuk meningkatkan performa cabang ini.

Visualisasi Cabang

Strategi Peningkatan

Jika saya jadi manajer perusahaan, ini strategi peningkatan yang bakal saya ambil:

Cabang C → Penjualannya konsisten tapi selalu di bawah target. Disii saya bakal fokus kasih promo atau diskon untuk menarik lebih banyak pelanggan, supaya penjualannya naik sampai bisa menyentuh target minimal 50 juta.

Cabang B → Penjualannya sangat fluktuatif, artinya ada beberapa faktor yang mempengaruhi. Saya bakal cari tahu kenapa, apakah karena musim atau promosi tertentu. Setelah itu, saya bakal coba menstabilkan penjualannya dengan strategi yang lebih matang, misalnya dengan meningkatkan hubungan dengan pelanggan setia.

Cabang A & D → Penjualannya stabil, jadi saya bakal pertahankan strategi yang udah jalan, tapi juga coba cari cara untuk sedikit tingkatin penjualan, seperti dengan menambahkan produk terkait atau upselling.

Mungkin dengan cara seperti ini, saya bisa menyesuaikan strategi di setiap cabang untuk mencapai target penjualan yang lebih tinggi.

Latihan 2

Perusahaan XYZ mengelola pengiriman 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 pengiriman barang berdasarkan wilayah dan jenis barang :

Analisis Efisiensi Pengiriman

Berikut adalah data terkait pengiriman barang berdasarkan wilayah dan jenis barang:

Wilayah Jenis Barang Jumlah Barang (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

1. Visualisasi 3D (Jumlah Barang, Waktu, dan Biaya)

Visualisasi ini digunakan untuk memahami hubungan antara jumlah barang, waktu pengiriman, dan biaya per unit berdasarkan wilayah.

Menentukan Wilayah dengan Efisiensi Pengiriman Terendah Berdasarkan Biaya Per Unit dan Waktu Pengiriman

Langkah 1: Rasio Efisiensi

Rasio efisiensi dihitung dengan membagi biaya per unit dengan waktu pengiriman. Semakin kecil rasio ini, semakin efisien pengirimannya (biaya lebih rendah dan waktu lebih singkat).

Formula Rasio Efisiensi: \[ \text{Rasio Efisiensi} = \dfrac{\text{Biaya Per Unit}}{\text{Waktu Pengiriman}} \]

Langkah 2: Data Awal

Berikut adalah data yang digunakan dalam analisis ini:

\[ \begin{array}{|c|c|c|} \hline \textbf{Wilayah} & \textbf{Biaya Per Unit (Rp)} & \textbf{Waktu Pengiriman (jam)} \\ \hline \text{Barat} & 12,000 & 7 \\ \text{Selatan} & 8,500 & 8 \\ \text{Tengah} & 14,000 & 4 \\ \text{Timur} & 11,500 & 5 \\ \text{Utara} & 15,000 & 6 \\ \hline \end{array} \]

Langkah 3: Menghitung Rasio Efisiensi untuk Setiap Wilayah

Sekarang, kita akan menghitung rasio efisiensi untuk setiap wilayah.

\[ \text{Rasio Efisiensi (Barat)} = \dfrac{12,000}{7} = 1,714.29 \] \[ \text{Rasio Efisiensi (Selatan)} = \dfrac{8,500}{8} = 1,062.50 \] \[ \text{Rasio Efisiensi (Tengah)} = \dfrac{14,000}{4} = 3,500.00 \] \[ \text{Rasio Efisiensi (Timur)} = \dfrac{11,500}{5} = 2,300.00 \] \[ \text{Rasio Efisiensi (Utara)} = \dfrac{15,000}{6} = 2,500.00 \]

Langkah 4: Mengelompokkan dan Menyimpulkan

Berikut adalah perbandingan rasio efisiensi untuk masing-masing wilayah.

\[ \begin{array}{|c|c|c|c|} \hline \textbf{Wilayah} & \textbf{Biaya Per Unit (Rp)} & \textbf{Waktu Pengiriman (jam)} & \textbf{Rasio Efisiensi (Rp/jam)} \\ \hline \text{Barat} & 12,000 & 7 & 1,714.29 \\ \text{Selatan} & 8,500 & 8 & 1,062.50 \\ \text{Tengah} & 14,000 & 4 & 3,500.00 \\ \text{Timur} & 11,500 & 5 & 2,300.00 \\ \text{Utara} & 15,000 & 6 & 2,500.00 \\ \hline \end{array} \]

Peringkat Efisiensi:

  • Tengah memiliki rasio efisiensi tertinggi: 3,500.00 (paling tidak efisien).
  • Barat memiliki rasio efisiensi kedua tertinggi: 1,714.29.
  • Utara memiliki rasio efisiensi ketiga tertinggi: 2,500.00.
  • Timur memiliki rasio efisiensi keempat tertinggi: 2,300.00.
  • Selatan memiliki rasio efisiensi terendah: 1,062.50 (paling efisien).

Kesimpulan:

Dari perhitungan di atas, kita dapat menarik kesimpulan sebagai berikut:

  1. Wilayah dengan efisiensi pengiriman terendah (biaya tertinggi per unit dan waktu pengiriman lebih lama) adalah Tengah dengan rasio efisiensi 3,500.00.
  2. Wilayah dengan efisiensi pengiriman tertinggi (biaya lebih rendah dan waktu lebih cepat) adalah Selatan dengan rasio efisiensi 1,062.50.

Rekomendasi:

Berdasarkan hasil analisis ini, wilayah Tengah yang memiliki rasio efisiensi tertinggi perlu mendapatkan perhatian lebih untuk meningkatkan efisiensi pengiriman, misalnya dengan mengoptimalkan proses pengiriman dan mengurangi biaya.

Untuk wilayah Selatan, yang memiliki efisiensi pengiriman tertinggi, bisa dijadikan model untuk wilayah lain dalam hal pengurangan biaya dan waktu pengiriman.

Rekomendasi Operasional

Berdasarkan hasil analisis, wilayah mana yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman?

Berdasarkan hasil analisis terhadap data Total Biaya dan Efisiensi Biaya per wilayah, dapat disimpulkan bahwa wilayah yang memerlukan perhatian lebih untuk meningkatkan efisiensi pengiriman adalah:

Wilayah Barat

Alasan:

  1. Efisiensi Biaya Tertinggi:
    • Wilayah Barat memiliki efisiensi biaya sebesar \(12,593.023\) Rp/unit, yang merupakan nilai tertinggi dibandingkan dengan wilayah lainnya.
    • Hal ini menunjukkan bahwa biaya pengiriman per unit di wilayah tersebut lebih tinggi dibandingkan dengan wilayah lainnya, yang mengindikasikan adanya inefisiensi.
  2. Total Biaya yang Tinggi:
    • Total biaya pengiriman di wilayah Barat adalah Rp \(5,415,000\), meskipun jumlah barang yang dikirim lebih sedikit dibandingkan dengan wilayah lainnya. Ini menunjukkan bahwa meskipun volume barang relatif lebih rendah, biaya pengiriman tetap signifikan.

Rekomendasi untuk Wilayah Barat:

Untuk meningkatkan efisiensi pengiriman di wilayah Barat, berikut beberapa langkah yang dapat diambil:

  1. Optimalkan rute dan jadwal pengiriman untuk mengurangi waktu pengiriman.
  2. Gunakan jenis transportasi yang lebih efisien dan hemat biaya.
  3. Evaluasi kembali proses logistik untuk menemukan titik-titik inefisiensi yang dapat diperbaiki.
  4. Negosiasi ulang biaya pengiriman dengan penyedia jasa transportasi untuk mendapatkan tarif yang lebih kompetitif.
  5. Konsolidasi pengiriman barang untuk memaksimalkan kapasitas angkut dan mengurangi biaya per unit.

Dengan langkah-langkah tersebut, diharapkan efisiensi biaya pengiriman di wilayah Barat dapat meningkat secara signifikan.

Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah tersebut?

Berikut adalah beberapa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah Barat:

  1. Optimalkan Rute dan Jadwal Pengiriman:
    • Identifikasi rute tercepat dan paling efisien menggunakan teknologi seperti sistem manajemen transportasi (TMS) atau aplikasi pemetaan digital.
    • Hindari rute dengan kemacetan atau kondisi jalan yang buruk untuk mempercepat waktu pengiriman.
    • Konsolidasi pengiriman berdasarkan wilayah tujuan untuk memungkinkan pengiriman dilakukan dalam satu perjalanan.
  2. Gunakan Jenis Transportasi yang Lebih Efisien:
    • Evaluasi jenis kendaraan yang digunakan untuk pengiriman dan pertimbangkan untuk menggunakan kendaraan dengan kapasitas angkut lebih besar atau yang lebih hemat bahan bakar.
    • Pertimbangkan opsi transportasi alternatif seperti kereta api atau kapal untuk jarak jauh jika lebih ekonomis.
  3. Negosiasi Tarif dengan Penyedia Layanan Logistik:
    • Lakukan negosiasi ulang dengan penyedia jasa pengiriman untuk memperoleh tarif yang lebih kompetitif.
    • Pertimbangkan untuk bekerja sama dengan beberapa penyedia layanan guna membandingkan biaya dan memilih yang paling efisien.
  4. Konsolidasi Pengiriman Barang:
    • Gabungkan pengiriman dari berbagai pesanan untuk memaksimalkan kapasitas angkut dalam satu kali perjalanan.
    • Hindari pengiriman dengan muatan kecil yang menyebabkan biaya per unit menjadi tinggi.
  5. Implementasi Teknologi dan Automasi:
    • Gunakan sistem pelacakan pengiriman secara real-time untuk memantau pergerakan barang dan mengidentifikasi hambatan.
    • Terapkan automasi dalam manajemen gudang dan proses pemuatan barang untuk meningkatkan efisiensi operasional.
  6. Kurangi Waktu Bongkar Muat:
    • Tingkatkan efisiensi proses bongkar muat barang dengan memperbaiki sistem operasional di gudang.
    • Pastikan staf gudang memiliki prosedur kerja yang jelas untuk mempercepat proses ini.
  7. Evaluasi dan Analisis Berkala:
    • Lakukan evaluasi kinerja pengiriman secara berkala untuk menemukan titik-titik inefisiensi.
    • Terapkan metrik kinerja seperti rata-rata waktu pengiriman dan biaya per unit untuk memantau perkembangan efisiensi.

Analisis Kinerja Berdasarkan Jenis Barang dan Wilayah


Kita mulai dari data yang diberikan, mencakup wilayah, jenis barang, jumlah barang, waktu pengiriman, dan biaya per unit.

Wilayah Jenis Barang Jumlah Barang (unit) Waktu Pengiriman (jam) Biaya per Unit (Rp)
Utara Elektronik 200 5 15,000
Selatan Pakaian 150 8 8,000
Timur Makanan 180 6 10,000
Barat Peralatan 120 7 12,000
Tengah Elektronik 250 4 14,000
Utara Pakaian 300 9 8,500
Selatan Makanan 220 7 9,500
Timur Peralatan 140 5 11,000
Barat Elektronik 180 6 14,500
Tengah Pakaian 350 8 7,800
Utara Peralatan 170 4 12,000
Selatan Elektronik 250 6 16,000
Timur Pakaian 190 7 8,200
Barat Makanan 130 5 10,500
Tengah Peralatan 180 5 11,500

Pengelompokkan Data Berdasarkan Jenis Barang

Kita hitung rata-rata waktu pengiriman dan rata-rata biaya per unit untuk setiap jenis barang.

Langkah Perhitungan:

  1. Elektronik
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{5 + 4 + 6 + 6}{4} = \frac{21}{4} = 5,25 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{15,000 + 14,000 + 14,500 + 16,000}{4} = \frac{59,500}{4} = 14,875 \, \text{Rp/unit} \]
  2. Pakaian
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{8 + 9 + 8 + 7}{4} = \frac{32}{4} = 8 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{8,000 + 8,500 + 7,800 + 8,200}{4} = \frac{32,500}{4} = 8,125 \, \text{Rp/unit} \]
  3. Makanan
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{6 + 7 + 5}{3} = \frac{18}{3} = 6 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{10,000 + 9,500 + 10,500}{3} = \frac{30,000}{3} = 10,000 \, \text{Rp/unit} \]
  4. Peralatan
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{7 + 5 + 5 + 4}{4} = \frac{21}{4} = 5,25 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{12,000 + 11,000 + 11,500 + 12,000}{4} = \frac{46,500}{4} = 11,375 \, \text{Rp/unit} \]
Jenis Barang Waktu Rata-rata (jam) Biaya Rata-rata (Rp)
Elektronik 5,25 14,875
Pakaian 8 8,125
Makanan 6 10,000
Peralatan 5,25 11,375

Kesimpulan untuk Jenis Barang:

  • Waktu Pengiriman Tercepat: Elektronik dan Peralatan (5,25 jam).
  • Biaya per Unit Terendah: Pakaian (Rp 8,125).

Pengelompokkan Data Berdasarkan Wilayah

Kita hitung rata-rata waktu pengiriman dan rata-rata biaya per unit untuk setiap wilayah.

Langkah Perhitungan:

  1. Utara
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{5 + 9 + 4}{3} = \frac{18}{3} = 6 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{15,000 + 8,500 + 12,000}{3} = \frac{35,500}{3} = 11,833.33 \, \text{Rp/unit} \]
  2. Selatan
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{8 + 7 + 6}{3} = \frac{21}{3} = 7 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{8,000 + 9,500 + 16,000}{3} = \frac{33,500}{3} = 11,833.33 \, \text{Rp/unit} \]
  3. Timur
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{6 + 5 + 7}{3} = \frac{18}{3} = 6 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{10,000 + 11,000 + 8,200}{3} = \frac{29,200}{3} = 9,733.33 \, \text{Rp/unit} \]
  4. Barat
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{7 + 6 + 5}{3} = \frac{18}{3} = 6 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{12,000 + 14,500 + 10,500}{3} = \frac{37,000}{3} = 12,166.67 \, \text{Rp/unit} \]
  5. Tengah
    • Waktu rata-rata:
      \[ \text{Rata-rata waktu} = \frac{4 + 8 + 5}{3} = \frac{17}{3} = 5,67 \, \text{jam} \]
    • Biaya rata-rata:
      \[ \text{Rata-rata biaya} = \frac{14,000 + 7,800 + 11,500}{3} = \frac{33,300}{3} = 11,100 \, \text{Rp/unit} \]
Wilayah Waktu Rata-rata (jam) Biaya Rata-rata (Rp)
Utara 6 11,833.33
Selatan 7 11,833.33
Timur 6 9,733.33
Barat 6 12,166.67
Tengah 5,67 11,100

Waktu Pengiriman Tercepat: Tengah (5,67 jam).
- Biaya per Unit Terendah: Timur (Rp 9,733.33).


Kesimpulan Akhir

  1. Wilayah dengan Waktu Pengiriman Tercepat: Tengah (5,67 jam).
  2. Wilayah dengan Biaya per Unit Terendah: Timur (Rp 9,733.33).

Referensi

  1. Bab 6 Ukuran Penyebaran Data | Pengantar Statistik untuk Sains Data. (2024, December 2). https://bookdown.org/dsciencelabs/statistika_dasar/_book/Ukuran_Penyebaran_Data.html#latihan-1

  2. Sullivan, M. (2019). Statistics. 6th Edition. Pearson.

LS0tDQp0aXRsZTogIlR1Z2FzIE1lbmdoaXR1bmcgTWVhbiwgTWVkaWFuIGRhbiBTdGFuZGFyIERldmlhc2kiDQpzdWJ0aXRsZTogIlN0YXRpc3Rpa2EgRGFzYXIiDQphdXRob3I6ICJNdWhhbW1hZCBOYWJpbCBQcmF0YW1hIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIGlkPSJpc2lfbmFtYSIgc3JjPSJDOi9Vc2Vycy9NIE5hYmlsIFByYXRhbWEvUGljdHVyZXMvU2NyZWVuc2hvdHMvR2FtYmFyIFdoYXRzQXBwIDIwMjQtMTItMDYgcHVrdWwgMTMuMzMuMTVfYzNmZDBmYzcuanBnIiBhbHQ9IkxvZ28iIHN0eWxlPSJ3aWR0aDoyMDBweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiPg0KDQojIFR1Z2FzIFN0YXRpc3Rpa2EgRGFzYXIgQmFiIFZJDQoNCiMgTGF0aWhhbiAxDQoNClNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcGVueWViYXJhbiBkYXRhIGhhc2lsDQpwZW5qdWFsYW4gZGFyaSBlbXBhdCBjYWJhbmcgKEEsIEIsIEMsIGRhbiBEKSBzZWxhbWEgc2F0dSBidWxhbiB0ZXJha2hpci4NCkRhdGEgcGVuanVhbGFuIChkYWxhbSBqdXRhIHJ1cGlhaCkgZGFyaSBrZWVtcGF0IGNhYmFuZyB0ZXJzZWJ1dCBhZGFsYWgNCnNlYmFnYWkgYmVyaWt1dCA6DQoNCi0gICBDYWJhbmcgQTogNTAsIDU1LCA2MCwgNjUsIDcwDQoNCi0gICBDYWJhbmcgQjogNDAsIDUwLCA2MCwgNzAsIDgwDQoNCi0gICBDYWJhbmcgQzogMzAsIDMwLCAzNSwgNDAsIDQ1DQoNCi0gICBDYWJhbmcgRDogNzAsIDc1LCA4MCwgODUsIDkwDQoNCkRhcmkgc29hbCBkaSBhdGFzLCBwZXJ0YW1hIGtpdGEgYWthbiBtZWxha3VrYW4gcGVyaGl0dW5nYW4gUmF0YS1yYXRhLA0KTWVkaWFuLCBkYW4gU3RhbmRhciBEZXZpYXNpIGRhcmkgbWFzaW5nLW1hc2luZyBjYWJhbmcuDQoNCiMjIFBlcmhpdHVuZ2FuIFJhdGEtcmF0YSwgTWVkaWFuLCBkYW4gU3RhbmRhciBEZXZpYXNpDQoNClVudHVrIG1lbmdoaXR1bmcgcmF0YS1yYXRhLCBtZWRpYW4sIGRhbiBzdGFuZGFyIGRldmlhc2kgZGFyaQ0KbWFzaW5nLW1hc2luZyBjYWJhbmcgKEEsIEIsIEMsIGRhbiBEKSwgbWFyaSBraXRhIGxha3VrYW4gc2F0dSBwZXIgc2F0dS4NCg0KKipBLiBDYWJhbmcgQTogNTAsIDU1LCA2MCwgNjUsIDcwKioNCg0KKioxLiBSYXRhLXJhdGEqKlwNCiQkDQpcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANCiQkDQoNCioqMi4gTWVkaWFuKipcDQpLYXJlbmEgZGF0YSBzdWRhaCBkaXVydXRrYW4sIG1lZGlhbiBpdHUga2FuIG5pbGFpIHlhbmcgYmVyYWRhIGRpIHBvc2lzaQ0KdGVuZ2FoLiBLYXJlbmEgYWRhIDUgZGF0YSwgbWVkaWFubnlhIGJlcmFkYSBkaSB1cnV0YW4ga2UtMywgeWFpdHUgJDYwJC4NCg0KKiozLiBTdGFuZGFyIERldmlhc2kqKlwNCi0gKipMYW5na2FoIDE6KiogSGl0dW5nIHNlbGlzaWgga3VhZHJhdCBkYXJpIHNldGlhcCBkYXRhIHJhdGEtcmF0YTpcDQokJA0KKDUwLTYwKV4yID0gKC0xMCleMiA9IDEwMCAgDQooNTUtNjApXjIgPSAoLTUpXjIgPSAyNSAgDQooNjAtNjApXjIgPSAoMCleMiA9IDAgIA0KKDY1LTYwKV4yID0gKDUpXjIgPSAyNSAgDQooNzAtNjApXjIgPSAoMTApXjIgPSAxMDAgIA0KJCQNCg0KLSAgICoqTGFuZ2thaCAyOioqIEp1bWxhaGthbiBoYXNpbCBrdWFkcmF0bnlhOlwNCiAgICAkJA0KICAgIDEwMCArIDI1ICsgMCArIDI1ICsgMTAwID0gMjUwDQogICAgJCQNCg0KLSAgICoqTGFuZ2thaCAzOioqIFZhcmlhbnMgKHNlYmFiIGluaSBkYXRhIHNhbXBlbCk6XA0KICAgICQkDQogICAgXHRleHR7VmFyaWFuc30gPSBcZnJhY3syNTB9ezUtMX0gPSBcZnJhY3syNTB9ezR9ID0gNjIuNQ0KICAgICQkDQoNCi0gICAqKkxhbmdrYWggNDoqKiBTdGFuZGFyIGRldmlhc2k6XA0KICAgICQkDQogICAgXHNpZ21hID0gXHNxcnR7NjIuNX0gXGFwcHJveCA3LjkxDQogICAgJCQNCg0KKipIYXNpbCBDYWJhbmcgQToqKlwNClJhdGEtcmF0YSA9ICQ2MCQsIE1lZGlhbiA9ICQ2MCQsIFN0YW5kYXIgRGV2aWFzaSDiiYggJDcuOTEkDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqKkIuIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODAqKg0KDQoqKjEuIFJhdGEtcmF0YSoqXA0KJCQNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3s0MCArIDUwICsgNjAgKyA3MCArIDgwfXs1fSA9IFxmcmFjezMwMH17NX0gPSA2MA0KJCQNCg0KKioyLiBNZWRpYW4qKlwNCk1lZGlhbiBueWEgJDYwJA0KDQoqKjMuIFN0YW5kYXIgRGV2aWFzaSoqXA0KLSAqKkxhbmdrYWggMToqKiBIaXR1bmcgc2VsaXNpaCBrdWFkcmF0OiAkJA0KKDQwLTYwKV4yID0gKC0yMCleMiA9IDQwMCAgDQooNTAtNjApXjIgPSAoLTEwKV4yID0gMTAwICANCig2MC02MCleMiA9ICgwKV4yID0gMCAgDQooNzAtNjApXjIgPSAoMTApXjIgPSAxMDAgIA0KKDgwLTYwKV4yID0gKDIwKV4yID0gNDAwICANCiQkDQoNCi0gICAqKkxhbmdrYWggMjoqKiBKdW1sYWhrYW46XA0KICAgICQkDQogICAgNDAwICsgMTAwICsgMCArIDEwMCArIDQwMCA9IDEwMDANCiAgICAkJA0KDQotICAgKipMYW5na2FoIDM6KiogVmFyaWFuczpcDQogICAgJCQNCiAgICBcdGV4dHtWYXJpYW5zfSA9IFxmcmFjezEwMDB9ezUtMX0gPSBcZnJhY3sxMDAwfXs0fSA9IDI1MA0KICAgICQkDQoNCi0gICAqKkxhbmdrYWggNDoqKiBTdGFuZGFyIGRldmlhc2k6XA0KICAgICQkDQogICAgXHNpZ21hID0gXHNxcnR7MjUwfSBcYXBwcm94IDE1LjgxDQogICAgJCQNCg0KKipIYXNpbCBDYWJhbmcgQjoqKlwNClJhdGEtcmF0YSA9ICQ2MCQsIE1lZGlhbiA9ICQ2MCQsIFN0YW5kYXIgRGV2aWFzaSDiiYggJDE1LjgxJA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KKipDLiBDYWJhbmcgQzogMzAsIDMwLCAzNSwgNDAsIDQ1KioNCg0KKioxLiBSYXRhLXJhdGEqKlwNCiQkDQpcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7MzAgKyAzMCArIDM1ICsgNDAgKyA0NX17NX0gPSBcZnJhY3sxODB9ezV9ID0gMzYNCiQkDQoNCioqMi4gTWVkaWFuKipcDQpNZWRpYW4gJDM1JC4NCg0KKiozLiBTdGFuZGFyIERldmlhc2kqKlwNCi0gKipMYW5na2FoIDE6KiogSGl0dW5nIHNlbGlzaWgga3VhZHJhdDogJCQNCigzMC0zNileMiA9ICgtNileMiA9IDM2ICANCigzMC0zNileMiA9ICgtNileMiA9IDM2ICANCigzNS0zNileMiA9ICgtMSleMiA9IDEgIA0KKDQwLTM2KV4yID0gKDQpXjIgPSAxNiAgDQooNDUtMzYpXjIgPSAoOSleMiA9IDgxICANCiQkDQoNCi0gICAqKkxhbmdrYWggMjoqKiBKdW1sYWhrYW4gaGFzaWwga3VhZHJhdG55YTpcDQogICAgJCQNCiAgICAzNiArIDM2ICsgMSArIDE2ICsgODEgPSAxNzANCiAgICAkJA0KDQotICAgKipMYW5na2FoIDM6KiogVmFyaWFuczpcDQogICAgJCQNCiAgICBcdGV4dHtWYXJpYW5zfSA9IFxmcmFjezE3MH17NS0xfSA9IFxmcmFjezE3MH17NH0gPSA0Mi41DQogICAgJCQNCg0KLSAgICoqTGFuZ2thaCA0OioqIFN0YW5kYXIgZGV2aWFzaTpcDQogICAgJCQNCiAgICBcc2lnbWEgPSBcc3FydHs0Mi41fSBcYXBwcm94IDYuNTINCiAgICAkJA0KDQoqKkhhc2lsIENhYmFuZyBDOioqXA0KUmF0YS1yYXRhID0gJDM2JCwgTWVkaWFuID0gJDM1JCwgU3RhbmRhciBEZXZpYXNpIOKJiCAkNi41MiQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCioqQy4gQ2FiYW5nIEQ6IDcwLCA3NSwgODAsIDg1LCA5MCoqDQoNCioqMS4gUmF0YS1yYXRhKipcDQokJA0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NDAwfXs1fSA9IDgwDQokJA0KDQoqKjIuIE1lZGlhbioqXA0KTWVkaWFuICQ4MCQNCg0KKiozLiBTdGFuZGFyIERldmlhc2kqKlwNCi0gKipMYW5na2FoIDE6KiogSGl0dW5nIHNlbGlzaWgga3VhZHJhdDpcDQokJA0KKDcwLTgwKV4yID0gKC0xMCleMiA9IDEwMCAgDQooNzUtODApXjIgPSAoLTUpXjIgPSAyNSAgDQooODAtODApXjIgPSAoMCleMiA9IDAgIA0KKDg1LTgwKV4yID0gKDUpXjIgPSAyNSAgDQooOTAtODApXjIgPSAoMTApXjIgPSAxMDAgIA0KJCQNCg0KLSAgICoqTGFuZ2thaCAyOioqIEp1bWxhaGthbiBoYXNpbCBrdWFkcmF0bnlhOlwNCiAgICAkJA0KICAgIDEwMCArIDI1ICsgMCArIDI1ICsgMTAwID0gMjUwDQogICAgJCQNCg0KLSAgICoqTGFuZ2thaCAzOioqIFZhcmlhbnM6XA0KICAgICQkDQogICAgXHRleHR7VmFyaWFuc30gPSBcZnJhY3syNTB9ezUtMX0gPSBcZnJhY3syNTB9ezR9ID0gNjIuNQ0KICAgICQkDQoNCi0gICAqKkxhbmdrYWggNDoqKiBTdGFuZGFyIGRldmlhc2k6XA0KICAgICQkDQogICAgXHNpZ21hID0gXHNxcnR7NjIuNX0gXGFwcHJveCA3LjkxDQogICAgJCQNCg0KKipIYXNpbCBDYWJhbmcgRDoqKlwNClJhdGEtcmF0YSA9ICQ4MCQsIE1lZGlhbiA9ICQ4MCQsIFN0YW5kYXIgRGV2aWFzaSDiiYggJDcuOTEkDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqKlJpbmdrYXNhbiBIYXNpbCoqDQoNCnwgQ2FiYW5nIHwgUmF0YS1yYXRhIHwgTWVkaWFuIHwgU3RhbmRhciBEZXZpYXNpIHwNCnwtLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgQSAgICAgIHwgNjAgICAgICAgIHwgNjAgICAgIHwgNy45MSAgICAgICAgICAgIHwNCnwgQiAgICAgIHwgNjAgICAgICAgIHwgNjAgICAgIHwgMTUuODEgICAgICAgICAgIHwNCnwgQyAgICAgIHwgMzYgICAgICAgIHwgMzUgICAgIHwgNi41MiAgICAgICAgICAgIHwNCnwgRCAgICAgIHwgODAgICAgICAgIHwgODAgICAgIHwgNy45MSAgICAgICAgICAgIHwNCg0KIyMgUGVueWViYXJhbiBQYWxpbmcgS2VjaWwNCg0KQ2FiYW5nIHlhbmcgcHVueWEgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbCBpdHUgYWRhbGFoICoqQ2FiYW5nIEMqKiwNCmthcmVuYSBzdGFuZGFyIGRldmlhc2lueWEgeWFuZyBwYWxpbmcga2VjaWwsIHlhaXR1ICQ2LjUyJC4NCg0KS2FyZW5hIGRpIENhYmFuZyBDLCBoYXNpbCBwZW5qdWFsYW5ueWEgbGViaWgga29uc2lzdGVuIGRpYmFuZGluZ2thbg0KY2FiYW5nIGxhaW4sIG1lc2tpcHVuIHJhdGEtcmF0YW55YSBsZWJpaCBrZWNpbCBkaWJhbmRpbmcgY2FiYW5nIGxhaW5ueWEuDQoNCiMjIENhYmFuZyBZYW5nIEdhZ2FsDQoNCioqSmlrYSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gYWRhbGFoIDUwIGp1dGEgcnVwaWFoLCBjYWJhbmcgbWFuYSBzYWphDQp5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBkaSBzZW11YSBkYXRhbnlhPyoqDQoNCkNhYmFuZyBBOiBTZW11YSBkYXRhIGRpIGF0YXMgNTAganV0YSwgdGlkYWsgZ2FnYWwuDQoNCkNhYmFuZyBCOiBBZGEgc2F0dSBkYXRhIGRpIGJhd2FoIDUwIGp1dGEgKHlhaXR1IDQwKSwgdGV0YXBpIHRpZGFrDQpzZW11YW55YSBkaSBiYXdhaCB0YXJnZXQuIFRpZGFrIGdhZ2FsLg0KDQpDYWJhbmcgQzogU2VtdWEgZGF0YSBkaSBiYXdhaCA1MCBqdXRhICgzMCwgMzAsIDM1LCA0MCwgNDUpLiBHYWdhbA0KbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbi4NCg0KQ2FiYW5nIEQ6IFNlbXVhIGRhdGEgZGkgYXRhcyA1MCBqdXRhLCB0aWRhayBnYWdhbC4NCg0KKipLZXNpbXB1bGFuOiBDYWJhbmcgQyBhZGFsYWggc2F0dS1zYXR1bnlhIGNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpDQp0YXJnZXQgbWluaW11bSBwZW5qdWFsYW4gc2ViZXNhciA1MCBqdXRhIHJ1cGlhaCBkaSBzZW11YSBkYXRhLioqDQoNClBlbmplbGFzYW4gdGFtYmFoYW46IENhYmFuZyBDIG1lbnVuanVra2FuIGtvbnNpc3RlbnNpIGRhbGFtIHBlbmp1YWxhbiwNCnRldGFwaSBuaWxhaSBrb25zaXN0ZW4gaW5pIGJlcmFkYSBkaSBiYXdhaCB0YXJnZXQgcGVydXNhaGFhbi4gSGFsIGluaQ0KbWVudW5qdWtrYW4gcGVybHVueWEgdXBheWEgc3RyYXRlZ2lzIHVudHVrIG1lbmluZ2thdGthbiBwZXJmb3JtYSBjYWJhbmcNCmluaS4NCg0KIyMgVmlzdWFsaXNhc2kgQ2FiYW5nDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gdW50dWsgc2V0aWFwIGNhYmFuZw0KcGVuanVhbGFuX0EgPC0gYyg1MCwgNTUsIDYwLCA2NSwgNzApDQpwZW5qdWFsYW5fQiA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCnBlbmp1YWxhbl9DIDwtIGMoMzAsIDMwLCAzNSwgNDAsIDQ1KQ0KcGVuanVhbGFuX0QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBib3hwbG90IHVudHVrIHNldGlhcCBjYWJhbmcNCnBsb3RfbHkoKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBwZW5qdWFsYW5fQSwgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBBIiwgDQogICAgYm94bWVhbiA9IFRSVUUsDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdza3libHVlJykNCiAgKSAlPiUgICMgQm94cGxvdCB1bnR1ayBDYWJhbmcgQQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IHBlbmp1YWxhbl9CLCANCiAgICB0eXBlID0gImJveCIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEIiLCANCiAgICBib3htZWFuID0gVFJVRSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2xpZ2h0Z3JlZW4nKQ0KICApICU+JSAgIyBCb3hwbG90IHVudHVrIENhYmFuZyBCDQogIGFkZF90cmFjZSgNCiAgICB5ID0gcGVuanVhbGFuX0MsIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgQyIsIA0KICAgIGJveG1lYW4gPSBUUlVFLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnc2FsbW9uJykNCiAgKSAlPiUgICMgQm94cGxvdCB1bnR1ayBDYWJhbmcgQw0KICBhZGRfdHJhY2UoDQogICAgeSA9IHBlbmp1YWxhbl9ELCANCiAgICB0eXBlID0gImJveCIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEQiLCANCiAgICBib3htZWFuID0gVFJVRSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2dvbGQnKQ0KICApICU+JSAgIyBCb3hwbG90IHVudHVrIENhYmFuZyBEDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3ggUGxvdCBQZW5qdWFsYW4gcGVyIENhYmFuZyIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoSnV0YSBSdXBpYWgpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyIpDQogICkNCmBgYA0KDQojIyBTdHJhdGVnaSBQZW5pbmdrYXRhbg0KDQpKaWthIHNheWEgamFkaSBtYW5hamVyIHBlcnVzYWhhYW4sIGluaSBzdHJhdGVnaSBwZW5pbmdrYXRhbiB5YW5nIGJha2FsDQpzYXlhIGFtYmlsOg0KDQoqKkNhYmFuZyBDKiog4oaSIFBlbmp1YWxhbm55YSBrb25zaXN0ZW4gdGFwaSBzZWxhbHUgZGkgYmF3YWggdGFyZ2V0LiBEaXNpaQ0Kc2F5YSBiYWthbCBmb2t1cyBrYXNpaCBwcm9tbyBhdGF1IGRpc2tvbiB1bnR1ayBtZW5hcmlrIGxlYmloIGJhbnlhaw0KcGVsYW5nZ2FuLCBzdXBheWEgcGVuanVhbGFubnlhIG5haWsgc2FtcGFpIGJpc2EgbWVueWVudHVoIHRhcmdldCBtaW5pbWFsDQo1MCBqdXRhLg0KDQoqKkNhYmFuZyBCKiog4oaSIFBlbmp1YWxhbm55YSBzYW5nYXQgZmx1a3R1YXRpZiwgYXJ0aW55YSBhZGEgYmViZXJhcGENCmZha3RvciB5YW5nIG1lbXBlbmdhcnVoaS4gU2F5YSBiYWthbCBjYXJpIHRhaHUga2VuYXBhLCBhcGFrYWgga2FyZW5hDQptdXNpbSBhdGF1IHByb21vc2kgdGVydGVudHUuIFNldGVsYWggaXR1LCBzYXlhIGJha2FsIGNvYmEgbWVuc3RhYmlsa2FuDQpwZW5qdWFsYW5ueWEgZGVuZ2FuIHN0cmF0ZWdpIHlhbmcgbGViaWggbWF0YW5nLCBtaXNhbG55YSBkZW5nYW4NCm1lbmluZ2thdGthbiBodWJ1bmdhbiBkZW5nYW4gcGVsYW5nZ2FuIHNldGlhLg0KDQoqKkNhYmFuZyBBICYgRCoqIOKGkiBQZW5qdWFsYW5ueWEgc3RhYmlsLCBqYWRpIHNheWEgYmFrYWwgcGVydGFoYW5rYW4NCnN0cmF0ZWdpIHlhbmcgdWRhaCBqYWxhbiwgdGFwaSBqdWdhIGNvYmEgY2FyaSBjYXJhIHVudHVrIHNlZGlraXQNCnRpbmdrYXRpbiBwZW5qdWFsYW4sIHNlcGVydGkgZGVuZ2FuIG1lbmFtYmFoa2FuIHByb2R1ayB0ZXJrYWl0IGF0YXUNCnVwc2VsbGluZy4NCg0KTXVuZ2tpbiBkZW5nYW4gY2FyYSBzZXBlcnRpIGluaSwgc2F5YSBiaXNhIG1lbnllc3VhaWthbiBzdHJhdGVnaSBkaQ0Kc2V0aWFwIGNhYmFuZyB1bnR1ayBtZW5jYXBhaSB0YXJnZXQgcGVuanVhbGFuIHlhbmcgbGViaWggdGluZ2dpLg0KDQojIExhdGloYW4gMg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2lyaW1hbiBiYXJhbmcga2UgYmVyYmFnYWkgd2lsYXlhaCBkZW5nYW4NCm1lbmdndW5ha2FuIGJlcmJhZ2FpIGplbmlzIHRyYW5zcG9ydGFzaS4gU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbg0KYmlheWEgdHJhbnNwb3J0YXNpLCB3YWt0dSB5YW5nIGRpYnV0dWhrYW4sIGRhbiBqdW1sYWggYmFyYW5nIHlhbmcNCmRpa2lyaW0uIEJlcmlrdXQgYWRhbGFoIGRhdGEgdGVya2FpdCBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbg0Kd2lsYXlhaCBkYW4gamVuaXMgYmFyYW5nIDoNCg0KIyMgQW5hbGlzaXMgRWZpc2llbnNpIFBlbmdpcmltYW4NCg0KQmVyaWt1dCBhZGFsYWggZGF0YSB0ZXJrYWl0IHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIHdpbGF5YWggZGFuDQpqZW5pcyBiYXJhbmc6DQoNCnwgV2lsYXlhaCB8IEplbmlzIEJhcmFuZyB8IEp1bWxhaCBCYXJhbmcgKHVuaXQpIHwgV2FrdHUgUGVuZ2lyaW1hbiAoamFtKSB8IEJpYXlhIHBlciBVbml0IChScCkgfA0KfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18DQp8IFV0YXJhIHwgRWxla3Ryb25payB8IDIwMCB8IDUgfCAxNTAwMCB8DQp8IFNlbGF0YW4gfCBQYWthaWFuIHwgMTUwIHwgOCB8IDgwMDAgfA0KfCBUaW11ciB8IE1ha2FuYW4gfCAxODAgfCA2IHwgMTAwMDAgfA0KfCBCYXJhdCB8IFBlcmFsYXRhbiB8IDEyMCB8IDcgfCAxMjAwMCB8DQp8IFRlbmdhaCB8IEVsZWt0cm9uaWsgfCAyNTAgfCA0IHwgMTQwMDAgfA0KfCBVdGFyYSB8IFBha2FpYW4gfCAzMDAgfCA5IHwgODUwMCB8DQp8IFNlbGF0YW4gfCBNYWthbmFuIHwgMjIwIHwgNyB8IDk1MDAgfA0KfCBUaW11ciB8IFBlcmFsYXRhbiB8IDE0MCB8IDUgfCAxMTAwMCB8DQp8IEJhcmF0IHwgRWxla3Ryb25payB8IDE4MCB8IDYgfCAxNDUwMCB8DQp8IFRlbmdhaCB8IFBha2FpYW4gfCAzNTAgfCA4IHwgNzgwMCB8DQp8IFV0YXJhIHwgUGVyYWxhdGFuIHwgMTcwIHwgNCB8IDEyMDAwIHwNCnwgU2VsYXRhbiB8IEVsZWt0cm9uaWsgfCAyNTAgfCA2IHwgMTYwMDAgfA0KfCBUaW11ciB8IFBha2FpYW4gfCAxOTAgfCA3IHwgODIwMCB8DQp8IEJhcmF0IHwgTWFrYW5hbiB8IDEzMCB8IDUgfCAxMDUwMCB8DQp8IFRlbmdhaCB8IFBlcmFsYXRhbiB8IDE4MCB8IDUgfCAxMTUwMCB8DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqKjEuIFZpc3VhbGlzYXNpIDNEIChKdW1sYWggQmFyYW5nLCBXYWt0dSwgZGFuIEJpYXlhKSoqDQoNClZpc3VhbGlzYXNpIGluaSBkaWd1bmFrYW4gdW50dWsgbWVtYWhhbWkgaHVidW5nYW4gYW50YXJhIGp1bWxhaCBiYXJhbmcsDQp3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgYmVyZGFzYXJrYW4gd2lsYXlhaC4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5naXJpbWFuDQpwZW5naXJpbWFuIDwtIGRhdGEuZnJhbWUoDQogIFdpbGF5YWggPSBjKCJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIsICJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgDQogICAgICAgICAgICAgICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsIA0KICAgICAgICAgICAgICAgICAgICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCANCiAgICAgICAgICAgICAgICAgICAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHUgPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9wZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgNzgwMCwgDQogICAgICAgICAgICAgICAgICAgICAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBWaXN1YWxpc2FzaSAzRCBkZW5nYW4gd2FybmEgeWFuZyBtZW5jb2xvaw0KcGxvdF9seShkYXRhID0gcGVuZ2lyaW1hbiwgDQogICAgICAgIHggPSB+SnVtbGFoX0JhcmFuZywgDQogICAgICAgIHkgPSB+V2FrdHUsIA0KICAgICAgICB6ID0gfkJpYXlhX3Blcl9Vbml0LCANCiAgICAgICAgdHlwZSA9ICJzY2F0dGVyM2QiLCANCiAgICAgICAgbW9kZSA9ICJtYXJrZXJzIiwgDQogICAgICAgIGNvbG9yID0gfldpbGF5YWgsIA0KICAgICAgICBjb2xvcnMgPSBjKCJyZWQiLCAiYmx1ZSIsICJncmVlbiIsICJvcmFuZ2UiLCAicHVycGxlIiksDQogICAgICAgIHRleHQgPSB+cGFzdGUoIldpbGF5YWg6IiwgV2lsYXlhaCwgDQogICAgICAgICAgICAgICAgICAgICAgIjxicj5KZW5pcyBCYXJhbmc6IiwgSmVuaXNfQmFyYW5nLA0KICAgICAgICAgICAgICAgICAgICAgICI8YnI+QmlheWEgcGVyIFVuaXQ6IiwgQmlheWFfcGVyX1VuaXQsIA0KICAgICAgICAgICAgICAgICAgICAgICI8YnI+V2FrdHU6IiwgV2FrdHUsIA0KICAgICAgICAgICAgICAgICAgICAgICI8YnI+SnVtbGFoIEJhcmFuZzoiLCBKdW1sYWhfQmFyYW5nKSkgJT4lIA0KICBsYXlvdXQodGl0bGUgPSAiVmlzdWFsaXNhc2kgUGVuZ2lyaW1hbiBCYXJhbmcgKDNEIFZpc3VhbGl6YXRpb24pIiwNCiAgICAgICAgIHNjZW5lID0gbGlzdCgNCiAgICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkp1bWxhaCBCYXJhbmciKSwNCiAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIldha3R1IFBlbmdpcmltYW4gKEphbSkiKSwNCiAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gIkJpYXlhIHBlciBVbml0IChScCkiKQ0KICAgICAgICAgKSkNCmBgYA0KDQoNCiMjIyBNZW5lbnR1a2FuIFdpbGF5YWggZGVuZ2FuIEVmaXNpZW5zaSBQZW5naXJpbWFuIFRlcmVuZGFoIEJlcmRhc2Fya2FuIEJpYXlhIFBlciBVbml0IGRhbiBXYWt0dSBQZW5naXJpbWFuDQoNCiMjIyBMYW5na2FoIDE6IFJhc2lvIEVmaXNpZW5zaQ0KUmFzaW8gZWZpc2llbnNpIGRpaGl0dW5nIGRlbmdhbiBtZW1iYWdpICoqYmlheWEgcGVyIHVuaXQqKiBkZW5nYW4gKip3YWt0dSBwZW5naXJpbWFuKiouIFNlbWFraW4ga2VjaWwgcmFzaW8gaW5pLCBzZW1ha2luIGVmaXNpZW4gcGVuZ2lyaW1hbm55YSAoYmlheWEgbGViaWggcmVuZGFoIGRhbiB3YWt0dSBsZWJpaCBzaW5na2F0KS4NCg0KKipGb3JtdWxhIFJhc2lvIEVmaXNpZW5zaToqKg0KXFsNClx0ZXh0e1Jhc2lvIEVmaXNpZW5zaX0gPSBcZGZyYWN7XHRleHR7QmlheWEgUGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0NClxdDQoNCiMjIyBMYW5na2FoIDI6IERhdGEgQXdhbA0KDQpCZXJpa3V0IGFkYWxhaCBkYXRhIHlhbmcgZGlndW5ha2FuIGRhbGFtIGFuYWxpc2lzIGluaToNCg0KXFsNClxiZWdpbnthcnJheX17fGN8Y3xjfH0NClxobGluZQ0KXHRleHRiZntXaWxheWFofSAmIFx0ZXh0YmZ7QmlheWEgUGVyIFVuaXQgKFJwKX0gJiBcdGV4dGJme1dha3R1IFBlbmdpcmltYW4gKGphbSl9IFxcDQpcaGxpbmUNClx0ZXh0e0JhcmF0fSAmIDEyLDAwMCAmIDcgXFwNClx0ZXh0e1NlbGF0YW59ICYgOCw1MDAgJiA4IFxcDQpcdGV4dHtUZW5nYWh9ICYgMTQsMDAwICYgNCBcXA0KXHRleHR7VGltdXJ9ICYgMTEsNTAwICYgNSBcXA0KXHRleHR7VXRhcmF9ICYgMTUsMDAwICYgNiBcXA0KXGhsaW5lDQpcZW5ke2FycmF5fQ0KXF0NCg0KIyMjIExhbmdrYWggMzogTWVuZ2hpdHVuZyBSYXNpbyBFZmlzaWVuc2kgdW50dWsgU2V0aWFwIFdpbGF5YWgNClNla2FyYW5nLCBraXRhIGFrYW4gbWVuZ2hpdHVuZyByYXNpbyBlZmlzaWVuc2kgdW50dWsgc2V0aWFwIHdpbGF5YWguDQoNClxbDQpcdGV4dHtSYXNpbyBFZmlzaWVuc2kgKEJhcmF0KX0gPSBcZGZyYWN7MTIsMDAwfXs3fSA9IDEsNzE0LjI5DQpcXQ0KXFsNClx0ZXh0e1Jhc2lvIEVmaXNpZW5zaSAoU2VsYXRhbil9ID0gXGRmcmFjezgsNTAwfXs4fSA9IDEsMDYyLjUwDQpcXQ0KXFsNClx0ZXh0e1Jhc2lvIEVmaXNpZW5zaSAoVGVuZ2FoKX0gPSBcZGZyYWN7MTQsMDAwfXs0fSA9IDMsNTAwLjAwDQpcXQ0KXFsNClx0ZXh0e1Jhc2lvIEVmaXNpZW5zaSAoVGltdXIpfSA9IFxkZnJhY3sxMSw1MDB9ezV9ID0gMiwzMDAuMDANClxdDQpcWw0KXHRleHR7UmFzaW8gRWZpc2llbnNpIChVdGFyYSl9ID0gXGRmcmFjezE1LDAwMH17Nn0gPSAyLDUwMC4wMA0KXF0NCg0KIyMjIExhbmdrYWggNDogTWVuZ2Vsb21wb2trYW4gZGFuIE1lbnlpbXB1bGthbg0KQmVyaWt1dCBhZGFsYWggcGVyYmFuZGluZ2FuIHJhc2lvIGVmaXNpZW5zaSB1bnR1ayBtYXNpbmctbWFzaW5nIHdpbGF5YWguDQoNClxbDQpcYmVnaW57YXJyYXl9e3xjfGN8Y3xjfH0NClxobGluZQ0KXHRleHRiZntXaWxheWFofSAmIFx0ZXh0YmZ7QmlheWEgUGVyIFVuaXQgKFJwKX0gJiBcdGV4dGJme1dha3R1IFBlbmdpcmltYW4gKGphbSl9ICYgXHRleHRiZntSYXNpbyBFZmlzaWVuc2kgKFJwL2phbSl9IFxcDQpcaGxpbmUNClx0ZXh0e0JhcmF0fSAmIDEyLDAwMCAmIDcgJiAxLDcxNC4yOSBcXA0KXHRleHR7U2VsYXRhbn0gJiA4LDUwMCAmIDggJiAxLDA2Mi41MCBcXA0KXHRleHR7VGVuZ2FofSAmIDE0LDAwMCAmIDQgJiAzLDUwMC4wMCBcXA0KXHRleHR7VGltdXJ9ICYgMTEsNTAwICYgNSAmIDIsMzAwLjAwIFxcDQpcdGV4dHtVdGFyYX0gJiAxNSwwMDAgJiA2ICYgMiw1MDAuMDAgXFwNClxobGluZQ0KXGVuZHthcnJheX0NClxdDQoNCiMjIyBQZXJpbmdrYXQgRWZpc2llbnNpOg0KLSAqKlRlbmdhaCoqIG1lbWlsaWtpIHJhc2lvIGVmaXNpZW5zaSB0ZXJ0aW5nZ2k6IDMsNTAwLjAwIChwYWxpbmcgdGlkYWsgZWZpc2llbikuDQotICoqQmFyYXQqKiBtZW1pbGlraSByYXNpbyBlZmlzaWVuc2kga2VkdWEgdGVydGluZ2dpOiAxLDcxNC4yOS4NCi0gKipVdGFyYSoqIG1lbWlsaWtpIHJhc2lvIGVmaXNpZW5zaSBrZXRpZ2EgdGVydGluZ2dpOiAyLDUwMC4wMC4NCi0gKipUaW11cioqIG1lbWlsaWtpIHJhc2lvIGVmaXNpZW5zaSBrZWVtcGF0IHRlcnRpbmdnaTogMiwzMDAuMDAuDQotICoqU2VsYXRhbioqIG1lbWlsaWtpIHJhc2lvIGVmaXNpZW5zaSB0ZXJlbmRhaDogMSwwNjIuNTAgKHBhbGluZyBlZmlzaWVuKS4NCg0KIyMjIEtlc2ltcHVsYW46DQoNCkRhcmkgcGVyaGl0dW5nYW4gZGkgYXRhcywga2l0YSBkYXBhdCBtZW5hcmlrIGtlc2ltcHVsYW4gc2ViYWdhaSBiZXJpa3V0Og0KDQoxLiAqKldpbGF5YWggZGVuZ2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoKiogKGJpYXlhIHRlcnRpbmdnaSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBsZWJpaCBsYW1hKSBhZGFsYWggKipUZW5nYWgqKiBkZW5nYW4gcmFzaW8gZWZpc2llbnNpIDMsNTAwLjAwLg0KMi4gKipXaWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJ0aW5nZ2kqKiAoYmlheWEgbGViaWggcmVuZGFoIGRhbiB3YWt0dSBsZWJpaCBjZXBhdCkgYWRhbGFoICoqU2VsYXRhbioqIGRlbmdhbiByYXNpbyBlZmlzaWVuc2kgMSwwNjIuNTAuDQoNCiMjIyBSZWtvbWVuZGFzaToNCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzIGluaSwgd2lsYXlhaCAqKlRlbmdhaCoqIHlhbmcgbWVtaWxpa2kgcmFzaW8gZWZpc2llbnNpIHRlcnRpbmdnaSBwZXJsdSBtZW5kYXBhdGthbiBwZXJoYXRpYW4gbGViaWggdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuLCBtaXNhbG55YSBkZW5nYW4gbWVuZ29wdGltYWxrYW4gcHJvc2VzIHBlbmdpcmltYW4gZGFuIG1lbmd1cmFuZ2kgYmlheWEuDQoNClVudHVrIHdpbGF5YWggKipTZWxhdGFuKiosIHlhbmcgbWVtaWxpa2kgZWZpc2llbnNpIHBlbmdpcmltYW4gdGVydGluZ2dpLCBiaXNhIGRpamFkaWthbiBtb2RlbCB1bnR1ayB3aWxheWFoIGxhaW4gZGFsYW0gaGFsIHBlbmd1cmFuZ2FuIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuLg0KDQojIyBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbA0KDQojIyMgQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMsIHdpbGF5YWggbWFuYSB5YW5nIG1lbWVybHVrYW4gcGVyaGF0aWFuIGtodXN1cyB1bnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4/DQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzIHRlcmhhZGFwIGRhdGEgKipUb3RhbCBCaWF5YSoqIGRhbiAqKkVmaXNpZW5zaSBCaWF5YSoqIHBlciB3aWxheWFoLCBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YSB3aWxheWFoIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4gbGViaWggdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIGFkYWxhaDoNCg0KKipXaWxheWFoIEJhcmF0KioNCg0KIyMjIyBBbGFzYW46DQoNCjEuICoqRWZpc2llbnNpIEJpYXlhIFRlcnRpbmdnaToqKg0KICAgLSBXaWxheWFoIEJhcmF0IG1lbWlsaWtpIGVmaXNpZW5zaSBiaWF5YSBzZWJlc2FyIFwoIDEyLDU5My4wMjMgXCkgUnAvdW5pdCwgeWFuZyBtZXJ1cGFrYW4gbmlsYWkgdGVydGluZ2dpIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWlubnlhLg0KICAgLSBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIGJpYXlhIHBlbmdpcmltYW4gcGVyIHVuaXQgZGkgd2lsYXlhaCB0ZXJzZWJ1dCBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIGRlbmdhbiB3aWxheWFoIGxhaW5ueWEsIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGFkYW55YSBpbmVmaXNpZW5zaS4NCg0KMi4gKipUb3RhbCBCaWF5YSB5YW5nIFRpbmdnaToqKg0KICAgLSBUb3RhbCBiaWF5YSBwZW5naXJpbWFuIGRpIHdpbGF5YWggQmFyYXQgYWRhbGFoIFJwIFwoIDUsNDE1LDAwMCBcKSwgbWVza2lwdW4ganVtbGFoIGJhcmFuZyB5YW5nIGRpa2lyaW0gbGViaWggc2VkaWtpdCBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdpbGF5YWggbGFpbm55YS4gSW5pIG1lbnVuanVra2FuIGJhaHdhIG1lc2tpcHVuIHZvbHVtZSBiYXJhbmcgcmVsYXRpZiBsZWJpaCByZW5kYWgsIGJpYXlhIHBlbmdpcmltYW4gdGV0YXAgc2lnbmlmaWthbi4NCg0KIyMjIyBSZWtvbWVuZGFzaSB1bnR1ayBXaWxheWFoIEJhcmF0Og0KDQpVbnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gZGkgd2lsYXlhaCBCYXJhdCwgYmVyaWt1dCBiZWJlcmFwYSBsYW5na2FoIHlhbmcgZGFwYXQgZGlhbWJpbDoNCg0KMS4gKipPcHRpbWFsa2FuIHJ1dGUgZGFuIGphZHdhbCBwZW5naXJpbWFuKiogdW50dWsgbWVuZ3VyYW5naSB3YWt0dSBwZW5naXJpbWFuLg0KMi4gKipHdW5ha2FuIGplbmlzIHRyYW5zcG9ydGFzaSB5YW5nIGxlYmloIGVmaXNpZW4gZGFuIGhlbWF0IGJpYXlhLioqDQozLiAqKkV2YWx1YXNpIGtlbWJhbGkgcHJvc2VzIGxvZ2lzdGlrKiogdW50dWsgbWVuZW11a2FuIHRpdGlrLXRpdGlrIGluZWZpc2llbnNpIHlhbmcgZGFwYXQgZGlwZXJiYWlraS4NCjQuICoqTmVnb3NpYXNpIHVsYW5nIGJpYXlhIHBlbmdpcmltYW4qKiBkZW5nYW4gcGVueWVkaWEgamFzYSB0cmFuc3BvcnRhc2kgdW50dWsgbWVuZGFwYXRrYW4gdGFyaWYgeWFuZyBsZWJpaCBrb21wZXRpdGlmLg0KNS4gKipLb25zb2xpZGFzaSBwZW5naXJpbWFuIGJhcmFuZyoqIHVudHVrIG1lbWFrc2ltYWxrYW4ga2FwYXNpdGFzIGFuZ2t1dCBkYW4gbWVuZ3VyYW5naSBiaWF5YSBwZXIgdW5pdC4NCg0KRGVuZ2FuIGxhbmdrYWgtbGFuZ2thaCB0ZXJzZWJ1dCwgZGloYXJhcGthbiBlZmlzaWVuc2kgYmlheWEgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIEJhcmF0IGRhcGF0IG1lbmluZ2thdCBzZWNhcmEgc2lnbmlmaWthbi4NCg0KIyMjIEFwYSByZWtvbWVuZGFzaSB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQ/DQoNCkJlcmlrdXQgYWRhbGFoIGJlYmVyYXBhIHJla29tZW5kYXNpIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4gZGkgd2lsYXlhaCBCYXJhdDoNCg0KMS4gKipPcHRpbWFsa2FuIFJ1dGUgZGFuIEphZHdhbCBQZW5naXJpbWFuOioqDQogICAtIElkZW50aWZpa2FzaSBydXRlIHRlcmNlcGF0IGRhbiBwYWxpbmcgZWZpc2llbiBtZW5nZ3VuYWthbiB0ZWtub2xvZ2kgc2VwZXJ0aSBzaXN0ZW0gbWFuYWplbWVuIHRyYW5zcG9ydGFzaSAoVE1TKSBhdGF1IGFwbGlrYXNpIHBlbWV0YWFuIGRpZ2l0YWwuDQogICAtIEhpbmRhcmkgcnV0ZSBkZW5nYW4ga2VtYWNldGFuIGF0YXUga29uZGlzaSBqYWxhbiB5YW5nIGJ1cnVrIHVudHVrIG1lbXBlcmNlcGF0IHdha3R1IHBlbmdpcmltYW4uDQogICAtIEtvbnNvbGlkYXNpIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gd2lsYXlhaCB0dWp1YW4gdW50dWsgbWVtdW5na2lua2FuIHBlbmdpcmltYW4gZGlsYWt1a2FuIGRhbGFtIHNhdHUgcGVyamFsYW5hbi4NCg0KMi4gKipHdW5ha2FuIEplbmlzIFRyYW5zcG9ydGFzaSB5YW5nIExlYmloIEVmaXNpZW46KioNCiAgIC0gRXZhbHVhc2kgamVuaXMga2VuZGFyYWFuIHlhbmcgZGlndW5ha2FuIHVudHVrIHBlbmdpcmltYW4gZGFuIHBlcnRpbWJhbmdrYW4gdW50dWsgbWVuZ2d1bmFrYW4ga2VuZGFyYWFuIGRlbmdhbiBrYXBhc2l0YXMgYW5na3V0IGxlYmloIGJlc2FyIGF0YXUgeWFuZyBsZWJpaCBoZW1hdCBiYWhhbiBiYWthci4NCiAgIC0gUGVydGltYmFuZ2thbiBvcHNpIHRyYW5zcG9ydGFzaSBhbHRlcm5hdGlmIHNlcGVydGkga2VyZXRhIGFwaSBhdGF1IGthcGFsIHVudHVrIGphcmFrIGphdWggamlrYSBsZWJpaCBla29ub21pcy4NCg0KMy4gKipOZWdvc2lhc2kgVGFyaWYgZGVuZ2FuIFBlbnllZGlhIExheWFuYW4gTG9naXN0aWs6KioNCiAgIC0gTGFrdWthbiBuZWdvc2lhc2kgdWxhbmcgZGVuZ2FuIHBlbnllZGlhIGphc2EgcGVuZ2lyaW1hbiB1bnR1ayBtZW1wZXJvbGVoIHRhcmlmIHlhbmcgbGViaWgga29tcGV0aXRpZi4NCiAgIC0gUGVydGltYmFuZ2thbiB1bnR1ayBiZWtlcmphIHNhbWEgZGVuZ2FuIGJlYmVyYXBhIHBlbnllZGlhIGxheWFuYW4gZ3VuYSBtZW1iYW5kaW5na2FuIGJpYXlhIGRhbiBtZW1pbGloIHlhbmcgcGFsaW5nIGVmaXNpZW4uDQoNCjQuICoqS29uc29saWRhc2kgUGVuZ2lyaW1hbiBCYXJhbmc6KioNCiAgIC0gR2FidW5na2FuIHBlbmdpcmltYW4gZGFyaSBiZXJiYWdhaSBwZXNhbmFuIHVudHVrIG1lbWFrc2ltYWxrYW4ga2FwYXNpdGFzIGFuZ2t1dCBkYWxhbSBzYXR1IGthbGkgcGVyamFsYW5hbi4NCiAgIC0gSGluZGFyaSBwZW5naXJpbWFuIGRlbmdhbiBtdWF0YW4ga2VjaWwgeWFuZyBtZW55ZWJhYmthbiBiaWF5YSBwZXIgdW5pdCBtZW5qYWRpIHRpbmdnaS4NCg0KNS4gKipJbXBsZW1lbnRhc2kgVGVrbm9sb2dpIGRhbiBBdXRvbWFzaToqKg0KICAgLSBHdW5ha2FuIHNpc3RlbSBwZWxhY2FrYW4gcGVuZ2lyaW1hbiBzZWNhcmEgcmVhbC10aW1lIHVudHVrIG1lbWFudGF1IHBlcmdlcmFrYW4gYmFyYW5nIGRhbiBtZW5naWRlbnRpZmlrYXNpIGhhbWJhdGFuLg0KICAgLSBUZXJhcGthbiBhdXRvbWFzaSBkYWxhbSBtYW5hamVtZW4gZ3VkYW5nIGRhbiBwcm9zZXMgcGVtdWF0YW4gYmFyYW5nIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgb3BlcmFzaW9uYWwuDQoNCjYuICoqS3VyYW5naSBXYWt0dSBCb25na2FyIE11YXQ6KioNCiAgIC0gVGluZ2thdGthbiBlZmlzaWVuc2kgcHJvc2VzIGJvbmdrYXIgbXVhdCBiYXJhbmcgZGVuZ2FuIG1lbXBlcmJhaWtpIHNpc3RlbSBvcGVyYXNpb25hbCBkaSBndWRhbmcuDQogICAtIFBhc3Rpa2FuIHN0YWYgZ3VkYW5nIG1lbWlsaWtpIHByb3NlZHVyIGtlcmphIHlhbmcgamVsYXMgdW50dWsgbWVtcGVyY2VwYXQgcHJvc2VzIGluaS4NCg0KNy4gKipFdmFsdWFzaSBkYW4gQW5hbGlzaXMgQmVya2FsYToqKg0KICAgLSBMYWt1a2FuIGV2YWx1YXNpIGtpbmVyamEgcGVuZ2lyaW1hbiBzZWNhcmEgYmVya2FsYSB1bnR1ayBtZW5lbXVrYW4gdGl0aWstdGl0aWsgaW5lZmlzaWVuc2kuDQogICAtIFRlcmFwa2FuIG1ldHJpayBraW5lcmphIHNlcGVydGkgcmF0YS1yYXRhIHdha3R1IHBlbmdpcmltYW4gZGFuIGJpYXlhIHBlciB1bml0IHVudHVrIG1lbWFudGF1IHBlcmtlbWJhbmdhbiBlZmlzaWVuc2kuDQoNCg0KDQojIyAqKkFuYWxpc2lzIEtpbmVyamEgQmVyZGFzYXJrYW4gSmVuaXMgQmFyYW5nIGRhbiBXaWxheWFoKioNCg0KLS0tDQoNCktpdGEgbXVsYWkgZGFyaSBkYXRhIHlhbmcgZGliZXJpa2FuLCBtZW5jYWt1cCB3aWxheWFoLCBqZW5pcyBiYXJhbmcsIGp1bWxhaCBiYXJhbmcsIHdha3R1IHBlbmdpcmltYW4sIGRhbiBiaWF5YSBwZXIgdW5pdC4NCg0KfCAqKldpbGF5YWgqKiB8ICoqSmVuaXMgQmFyYW5nKiogfCAqKkp1bWxhaCBCYXJhbmcgKHVuaXQpKiogfCAqKldha3R1IFBlbmdpcmltYW4gKGphbSkqKiB8ICoqQmlheWEgcGVyIFVuaXQgKFJwKSoqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IEVsZWt0cm9uaWsgICAgICAgfCAyMDAgICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LDAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgTWFrYW5hbiAgICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNCwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgUGFrYWlhbiAgICAgICAgICB8IDMwMCAgICAgICAgICAgICAgICAgICAgICB8IDkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCw1MDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IE1ha2FuYW4gICAgICAgICAgfCAyMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTQwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMSwwMDAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgRWxla3Ryb25payAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQsNTAwICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IFBha2FpYW4gICAgICAgICAgfCAzNTAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTcwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgRWxla3Ryb25payAgICAgICB8IDI1MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IFBha2FpYW4gICAgICAgICAgfCAxOTAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTMwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCw1MDAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgUGVyYWxhdGFuICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEsNTAwICAgICAgICAgICAgICAgICAgfA0KDQotLS0NCg0KIyMjICoqUGVuZ2Vsb21wb2trYW4gRGF0YSBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcqKg0KDQpLaXRhIGhpdHVuZyAqKnJhdGEtcmF0YSB3YWt0dSBwZW5naXJpbWFuKiogZGFuICoqcmF0YS1yYXRhIGJpYXlhIHBlciB1bml0KiogdW50dWsgc2V0aWFwIGplbmlzIGJhcmFuZy4NCg0KIyMjIyAqKkxhbmdrYWggUGVyaGl0dW5nYW46KioNCg0KMS4gKipFbGVrdHJvbmlrKioNCiAgIC0gKipXYWt0dSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgd2FrdHV9ID0gXGZyYWN7NSArIDQgKyA2ICsgNn17NH0gPSBcZnJhY3syMX17NH0gPSA1LDI1IFwsIFx0ZXh0e2phbX0NCiAgICAgXF0NCiAgIC0gKipCaWF5YSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgYmlheWF9ID0gXGZyYWN7MTUsMDAwICsgMTQsMDAwICsgMTQsNTAwICsgMTYsMDAwfXs0fSA9IFxmcmFjezU5LDUwMH17NH0gPSAxNCw4NzUgXCwgXHRleHR7UnAvdW5pdH0NCiAgICAgXF0NCg0KMi4gKipQYWthaWFuKioNCiAgIC0gKipXYWt0dSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgd2FrdHV9ID0gXGZyYWN7OCArIDkgKyA4ICsgN317NH0gPSBcZnJhY3szMn17NH0gPSA4IFwsIFx0ZXh0e2phbX0NCiAgICAgXF0NCiAgIC0gKipCaWF5YSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgYmlheWF9ID0gXGZyYWN7OCwwMDAgKyA4LDUwMCArIDcsODAwICsgOCwyMDB9ezR9ID0gXGZyYWN7MzIsNTAwfXs0fSA9IDgsMTI1IFwsIFx0ZXh0e1JwL3VuaXR9DQogICAgIFxdDQoNCjMuICoqTWFrYW5hbioqDQogICAtICoqV2FrdHUgcmF0YS1yYXRhOioqICANCiAgICAgXFsNCiAgICAgXHRleHR7UmF0YS1yYXRhIHdha3R1fSA9IFxmcmFjezYgKyA3ICsgNX17M30gPSBcZnJhY3sxOH17M30gPSA2IFwsIFx0ZXh0e2phbX0NCiAgICAgXF0NCiAgIC0gKipCaWF5YSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgYmlheWF9ID0gXGZyYWN7MTAsMDAwICsgOSw1MDAgKyAxMCw1MDB9ezN9ID0gXGZyYWN7MzAsMDAwfXszfSA9IDEwLDAwMCBcLCBcdGV4dHtScC91bml0fQ0KICAgICBcXQ0KDQo0LiAqKlBlcmFsYXRhbioqDQogICAtICoqV2FrdHUgcmF0YS1yYXRhOioqICANCiAgICAgXFsNCiAgICAgXHRleHR7UmF0YS1yYXRhIHdha3R1fSA9IFxmcmFjezcgKyA1ICsgNSArIDR9ezR9ID0gXGZyYWN7MjF9ezR9ID0gNSwyNSBcLCBcdGV4dHtqYW19DQogICAgIFxdDQogICAtICoqQmlheWEgcmF0YS1yYXRhOioqICANCiAgICAgXFsNCiAgICAgXHRleHR7UmF0YS1yYXRhIGJpYXlhfSA9IFxmcmFjezEyLDAwMCArIDExLDAwMCArIDExLDUwMCArIDEyLDAwMH17NH0gPSBcZnJhY3s0Niw1MDB9ezR9ID0gMTEsMzc1IFwsIFx0ZXh0e1JwL3VuaXR9DQogICAgIFxdDQoNCnwgKipKZW5pcyBCYXJhbmcqKiB8ICoqV2FrdHUgUmF0YS1yYXRhIChqYW0pKiogfCAqKkJpYXlhIFJhdGEtcmF0YSAoUnApKiogfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBFbGVrdHJvbmlrICAgICAgICB8IDUsMjUgICAgICAgICAgICAgICAgICAgICB8IDE0LDg3NSAgICAgICAgICAgICAgICAgIHwNCnwgUGFrYWlhbiAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgfCA4LDEyNSAgICAgICAgICAgICAgICAgICB8DQp8IE1ha2FuYW4gICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBQZXJhbGF0YW4gICAgICAgICB8IDUsMjUgICAgICAgICAgICAgICAgICAgICB8IDExLDM3NSAgICAgICAgICAgICAgICAgIHwNCg0KIyMjIyAqKktlc2ltcHVsYW4gdW50dWsgSmVuaXMgQmFyYW5nOioqDQotICoqV2FrdHUgUGVuZ2lyaW1hbiBUZXJjZXBhdDoqKiBFbGVrdHJvbmlrIGRhbiBQZXJhbGF0YW4gKCoqNSwyNSBqYW0qKikuICANCi0gKipCaWF5YSBwZXIgVW5pdCBUZXJlbmRhaDoqKiBQYWthaWFuICgqKlJwIDgsMTI1KiopLg0KDQotLS0NCg0KIyMjICoqUGVuZ2Vsb21wb2trYW4gRGF0YSBCZXJkYXNhcmthbiBXaWxheWFoKioNCg0KS2l0YSBoaXR1bmcgKipyYXRhLXJhdGEgd2FrdHUgcGVuZ2lyaW1hbioqIGRhbiAqKnJhdGEtcmF0YSBiaWF5YSBwZXIgdW5pdCoqIHVudHVrIHNldGlhcCB3aWxheWFoLg0KDQojIyMjICoqTGFuZ2thaCBQZXJoaXR1bmdhbjoqKg0KDQoxLiAqKlV0YXJhKioNCiAgIC0gKipXYWt0dSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgd2FrdHV9ID0gXGZyYWN7NSArIDkgKyA0fXszfSA9IFxmcmFjezE4fXszfSA9IDYgXCwgXHRleHR7amFtfQ0KICAgICBcXQ0KICAgLSAqKkJpYXlhIHJhdGEtcmF0YToqKiAgDQogICAgIFxbDQogICAgIFx0ZXh0e1JhdGEtcmF0YSBiaWF5YX0gPSBcZnJhY3sxNSwwMDAgKyA4LDUwMCArIDEyLDAwMH17M30gPSBcZnJhY3szNSw1MDB9ezN9ID0gMTEsODMzLjMzIFwsIFx0ZXh0e1JwL3VuaXR9DQogICAgIFxdDQoNCjIuICoqU2VsYXRhbioqDQogICAtICoqV2FrdHUgcmF0YS1yYXRhOioqICANCiAgICAgXFsNCiAgICAgXHRleHR7UmF0YS1yYXRhIHdha3R1fSA9IFxmcmFjezggKyA3ICsgNn17M30gPSBcZnJhY3syMX17M30gPSA3IFwsIFx0ZXh0e2phbX0NCiAgICAgXF0NCiAgIC0gKipCaWF5YSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgYmlheWF9ID0gXGZyYWN7OCwwMDAgKyA5LDUwMCArIDE2LDAwMH17M30gPSBcZnJhY3szMyw1MDB9ezN9ID0gMTEsODMzLjMzIFwsIFx0ZXh0e1JwL3VuaXR9DQogICAgIFxdDQoNCjMuICoqVGltdXIqKg0KICAgLSAqKldha3R1IHJhdGEtcmF0YToqKiAgDQogICAgIFxbDQogICAgIFx0ZXh0e1JhdGEtcmF0YSB3YWt0dX0gPSBcZnJhY3s2ICsgNSArIDd9ezN9ID0gXGZyYWN7MTh9ezN9ID0gNiBcLCBcdGV4dHtqYW19DQogICAgIFxdDQogICAtICoqQmlheWEgcmF0YS1yYXRhOioqICANCiAgICAgXFsNCiAgICAgXHRleHR7UmF0YS1yYXRhIGJpYXlhfSA9IFxmcmFjezEwLDAwMCArIDExLDAwMCArIDgsMjAwfXszfSA9IFxmcmFjezI5LDIwMH17M30gPSA5LDczMy4zMyBcLCBcdGV4dHtScC91bml0fQ0KICAgICBcXQ0KDQo0LiAqKkJhcmF0KioNCiAgIC0gKipXYWt0dSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgd2FrdHV9ID0gXGZyYWN7NyArIDYgKyA1fXszfSA9IFxmcmFjezE4fXszfSA9IDYgXCwgXHRleHR7amFtfQ0KICAgICBcXQ0KICAgLSAqKkJpYXlhIHJhdGEtcmF0YToqKiAgDQogICAgIFxbDQogICAgIFx0ZXh0e1JhdGEtcmF0YSBiaWF5YX0gPSBcZnJhY3sxMiwwMDAgKyAxNCw1MDAgKyAxMCw1MDB9ezN9ID0gXGZyYWN7MzcsMDAwfXszfSA9IDEyLDE2Ni42NyBcLCBcdGV4dHtScC91bml0fQ0KICAgICBcXQ0KDQo1LiAqKlRlbmdhaCoqDQogICAtICoqV2FrdHUgcmF0YS1yYXRhOioqICANCiAgICAgXFsNCiAgICAgXHRleHR7UmF0YS1yYXRhIHdha3R1fSA9IFxmcmFjezQgKyA4ICsgNX17M30gPSBcZnJhY3sxN317M30gPSA1LDY3IFwsIFx0ZXh0e2phbX0NCiAgICAgXF0NCiAgIC0gKipCaWF5YSByYXRhLXJhdGE6KiogIA0KICAgICBcWw0KICAgICBcdGV4dHtSYXRhLXJhdGEgYmlheWF9ID0gXGZyYWN7MTQsMDAwICsgNyw4MDAgKyAxMSw1MDB9ezN9ID0gXGZyYWN7MzMsMzAwfXszfSA9IDExLDEwMCBcLCBcdGV4dHtScC91bml0fQ0KICAgICBcXQ0KDQp8ICoqV2lsYXlhaCoqIHwgKipXYWt0dSBSYXRhLXJhdGEgKGphbSkqKiB8ICoqQmlheWEgUmF0YS1yYXRhIChScCkqKiB8DQp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IFV0YXJhICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLDgzMy4zMyAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEsODMzLjMzICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LDczMy4zMyAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyLDE2Ni42NyAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCA1LDY3ICAgICAgICAgICAgICAgICAgICAgIHwgMTEsMTAwICAgICAgICAgICAgICAgICAgfA0KDQoNCg0KICoqV2FrdHUgUGVuZ2lyaW1hbiBUZXJjZXBhdDoqKiBUZW5nYWggKCoqNSw2NyBqYW0qKikuICANCi0gKipCaWF5YSBwZXIgVW5pdCBUZXJlbmRhaDoqKiBUaW11ciAoKipScCA5LDczMy4zMyoqKS4NCg0KLS0tDQoNCiMjIyAqKktlc2ltcHVsYW4gQWtoaXIqKg0KIA0KMS4gKipXaWxheWFoIGRlbmdhbiBXYWt0dSBQZW5naXJpbWFuIFRlcmNlcGF0OioqIFRlbmdhaCAoKio1LDY3IGphbSoqKS4gIA0KMi4gKipXaWxheWFoIGRlbmdhbiBCaWF5YSBwZXIgVW5pdCBUZXJlbmRhaDoqKiBUaW11ciAoKipScCA5LDczMy4zMyoqKS4gIA0KDQoNCg0KIyBSZWZlcmVuc2kNCg0KMS4gQmFiIDYgVWt1cmFuIFBlbnllYmFyYW4gRGF0YSB8IFBlbmdhbnRhciBTdGF0aXN0aWsgdW50dWsgU2FpbnMgRGF0YS4gKDIwMjQsIERlY2VtYmVyIDIpLiBodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay9Va3VyYW5fUGVueWViYXJhbl9EYXRhLmh0bWwjbGF0aWhhbi0xDQoNCjIuIFN1bGxpdmFuLCBNLiAoMjAxOSkuIFN0YXRpc3RpY3MuIDZ0aCBFZGl0aW9uLiBQZWFyc29uLg0KDQoNCg==