Tugas Pertemuan 9

Menghitung Mean, median, modus untuk data kelompok

Logo

1 Studi Kasus 1: Data kelompok Berat badan Mahasiswa

Berat Badan(kg) Frekuensi
40-49 5
50-59 12
60-69 20
70-79 8
80-89 5

1.1 Menghitung Mean

untuk mencari Mean dari data diatas diperlukan rumus seperti dibawah ini : \[\bar{x} = \frac{\sum f \cdot x_i}{\sum f}\] - \[x_i\] adalah titik tengah \[x_i = \frac{\text{batas bawah} + \text{batas atas}}{2}\]

Berat Badan (kg) Frekuensi (f) Titik Tengah (xi) f * xi
40 - 49 5 44.5 222.5
50 - 59 12 54.5 654
60 - 69 20 64.5 1290
70 - 79 8 74.5 596
80 - 89 5 84.5 422.5
Total 50 3185

\[\bar{x} = \frac{\sum f \cdot x_i}{\sum f} = \frac{3185}{50} = 63.7\] Hasil Mean adalah 63.7

1.2 Menghitung Median

Dengan rumus median sebagai berikut : \[Median = L_m + \frac{(\frac{N}{2}) - f)}{F_m}\cdot c\]

  • Lm : Batas kelas bawah median
  • N: total frekuensi(∑f = 50)
  • Fm : frekuensi kelas median
  • c : panjang interval kelas
  1. Langkah Langkah : \[\frac{N}{2} = \frac{50}{2} = 25\]
  2. tentukan kelas Median :
  • frekuensi kumulatif
  • kelas 40-49:5
  • kelas 50-59:5+12=17
  • kelas 60-69:17+20=37 kelas median adalah 60-69
  1. substitusi nilai Lm=60, F=17,Fm=20, c=10 \[Median = 60 + \frac{(25 - 17)}{20}\cdot 10 = 64\] Median yang didapatkan adalah 64

1.3 Menghitung Modus

Dengan Rumus Modus sebagai berikut : \[Modus = L_m + (\frac{d_1}{d_1 + d_2})\cdot c\] 1. Langkah - Langkah

  • Kelas modus adalah Frekuensi kelas Tertinggi yaitu 60-69

  • Substitusi nilai :Lm=60, Fm-1 = 12, Fm+1 = 8, c =10, d1 =20-12=8, d2 =20-8 =12

\[Modus = 60 + (\frac{8}{8 + 12})\cdot 10 = 64\] Hasil Modus yang di dapatkan adalah 64

1.4 Mean dalam boxplot

1.5 Mean dalam histogram

1.6 Median dalam boxplot

1.7 Median dalam Histogram

1.8 Modus dalam Boxplot

1.9 Modus dalam Histogram

2 Studi Kasus 2 : Data Kelompok Tentang bisnis

Interval Pendapatan (juta) Frekuensi (Jumlah Toko)
10 - 19 6
20 - 29 8
30 - 39 14
40 - 49 10
50 - 59 7
60 - 69 5

(Mulai Dari Studi Kasus Ke 2 Perhitungan dibuat lebih singkat, Untuk penjelasan Rumusnya sudah Terdapat di Studi Kasus 1)

2.1 Menghitung Mean

\[\bar{x} = \frac{\sum f \cdot x_i}{\sum f}\]

Interval Pendapatan (juta) Frekuensi (Jumlah Toko) Titik Tengah (xi)
10 - 19 6 14.5
20 - 29 8 24.5
30 - 39 14 34.5
40 - 49 10 44.5
50 - 59 7 54.5
60 - 69 5 64.5
Total 50

\[\bar{x} = \frac{\sum f \cdot x_i}{\sum f} = \frac{1874}{50} = 37.48\] Hasil Mean Adalah 37.48

2.2 Mengitung Median

\[Median = L_m + \frac{(\frac{N}{2}) - f)}{F_m}\cdot c\] \[N = 50, \frac{50}{2} = 25\] \[Median = 30 + \frac{(25 - 14)}{14}\cdot 10 = 30 + 7.86 = 37.86\] Hasil Median adalah 37.86

2.3 Menghitung modus

\[Modus = L_m + (\frac{d_1}{d_1 + d_2})\cdot c\] \[Modus = 30 + (\frac{6}{6 + 14})\cdot 10 = 30 + 6 = 36\] Nilai Modus adalah 36

3 Data Kelompok Tentang Kesehatan

Interval IMT (Indeks Massa Tubuh) Frekuensi Titik Tengah (xi)
18.5 - 24.9 6 21.7
25 - 29.9 8 27.45
30 - 34.9 14 32.45
35 - 39.9 10 37.45
40 - 44.9 7 42.45
Total 30

3.1 Menghitung Mean

\[\bar{x} = \frac{\sum f \cdot x_i}{\sum f} = \frac{852.5}{30} = 28.42\] Hasil Mean Adalah 28.42

3.2 Menghitung Median

\[Median = L_m + \frac{(\frac{N}{2}) - f)}{F_m}\cdot c\] \[N = 30, \frac{30}{2} = 15\] \[Median = 25 + \frac{(15 - 8)}{12}\cdot 5 = 25 + 2.92 = 28.92\] Hasil Median adalah 28.92

3.3 Menghitung Modus

\[Modus = L_m + (\frac{d_1}{d_1 + d_2})\cdot c\] \[Modus = 25 + (\frac{4}{8 + 6})\cdot 5 = 25 + 1.43 = 26.43\] Hasil Modus 26.43

3.4 Persentase

Interval IMT (Indeks Massa Tubuh) Persentase Risiko penyakit
18.5 - 24.9 6/30 x 100 = 20% Risiko Rendah
25 - 29.9 8/30 x 100 = 26.7% Risiko Meningkat
30 - 34.9 14/30 x 100 = 46.67% Risiko Sedang
35 - 39.9 10/30 x 100 = 33.33% Risiko Tinggi
40 - 44.9 7/30 x 100 = 23.33% Risiko Sangat Tinggi

Kesimpulan

  • Risiko Rendah : 20% dari Populasi

  • Risiko Meningkat : 26.7% dari Populasi

  • Risiko Sedang : 46.67% dari Populasi

  • Risiko Tinggi : 33.33% dari Populasi

  • Risiko Sangat Tinggi : 23.33% dari Populasi

Mayoritas populasi memiliki IMT 30-39 atau obesitas kelas i dengan persentase 46.67%. Hal ini menunjukkan bahwa sebagian besar orang dalam data ini memiliki risiko sedang terhadap beberapa penyakit, seperti diabetes tipe 2, hipertensi, dan penyakit kardiovaskular.

4 Data Kelompok tentang Pendidikan

(Frekuensi pedidikan seseorang berdasarkan rentang usia mereka)

Interval Usia (Tahun) Frekuensi Titik Tengah (xi)
0 - 5 10 2.5
6 - 10 15 8
11 - 15 25 13
16 - 20 30 18
21 - 25 20 23
26 - 30 10 28
31 - 35 5 33
Total 115

4.1 Menghitung Mean

\[\bar{x} = \frac{\sum f \cdot x_i}{\sum f} = \frac{1915}{115} = 16.7\] Hasil Mean adalah 16.7

4.2 Menghitung Median

\[Median = L_m + \frac{(\frac{N}{2}) - f)}{F_m}\cdot c\] \[Median = L_m + \frac{(\frac{N}{2}) - f)}{F_m}\cdot c\] \[N = 115, \frac{115}{2} = 57.5\] \[Median = 16 + \frac{(57.5 - 50)}{30}\cdot 5 = 16 + 1.25 = 17.25\] Hasil Median adalah 17.25

4.3 Menghitung Modus

\[Modus = L_m + (\frac{d_1}{d_1 + d_2})\cdot c\] \[Modus = 16 + (\frac{6}{35 + 20})\cdot 15 = 15 + 1.67 = 16.67\] Hasil Modus adalah 16.67

LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiA5Ig0Kc3VidGl0bGU6ICJNZW5naGl0dW5nIE1lYW4sIG1lZGlhbiwgbW9kdXMgdW50dWsgZGF0YSBrZWxvbXBvayAiDQphdXRob3I6IA0KICAtICJNLiBSYWdpbCBSaXpraSBNdWx5YSg1MjI0MDAyNykgIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCg0KLS0tDQo8aW1nIGlkPSJsb2dvLXV0YW1hIiBzcmM9IkNvdmVyLmpwZWc/cmF3PXRydWUiIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjIwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQoNCiMgU3R1ZGkgS2FzdXMgMTogRGF0YSBrZWxvbXBvayBCZXJhdCBiYWRhbiBNYWhhc2lzd2ENCnwgIEJlcmF0IEJhZGFuKGtnKSAgICAgIHwgICAgRnJla3VlbnNpICAgICANCnw6LS0tLS0tLS0tLS0tLS0tOiAgICAgIHw6LS0tLS0tLS0tLS0tLS0tOnwNCnwgNDAtNDkgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgIHwNCnwgNTAtNTkgICAgICAgICAgICAgICAgIHwgMTIgICAgICAgICAgICAgIHwNCnwgNjAtNjkgICAgICAgICAgICAgICAgIHwgMjAgICAgICAgICAgICAgIHwNCnwgNzAtNzkgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgIHwNCnwgODAtODkgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgIHwNCg0KIyMgTWVuZ2hpdHVuZyBNZWFuDQp1bnR1ayBtZW5jYXJpIE1lYW4gZGFyaSBkYXRhIGRpYXRhcyBkaXBlcmx1a2FuIHJ1bXVzIHNlcGVydGkgZGliYXdhaCBpbmkgOg0KJCRcYmFye3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhfaX17XHN1bSBmfSQkDQotICQkeF9pJCQgYWRhbGFoIHRpdGlrIHRlbmdhaA0KJCR4X2kgPSBcZnJhY3tcdGV4dHtiYXRhcyBiYXdhaH0gKyBcdGV4dHtiYXRhcyBhdGFzfX17Mn0kJA0KDQoNCnwgQmVyYXQgQmFkYW4gKGtnKXwgRnJla3VlbnNpIChmKSB8IFRpdGlrIFRlbmdhaCAoeGkpIHwgZiAqIHhpICB8DQp8LS0tLS0tLS0tLS0tLS0tLSB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfA0KfCA0MCAtIDQ5ICAgICAgICAgfCA1ICAgICAgICAgICAgIHwgNDQuNSAgICAgICAgICAgICAgfCAyMjIuNSAgIHwNCnwgNTAgLSA1OSAgICAgICAgIHwgMTIgICAgICAgICAgICB8IDU0LjUgICAgICAgICAgICAgIHwgNjU0ICAgICB8DQp8IDYwIC0gNjkgICAgICAgICB8IDIwICAgICAgICAgICAgfCA2NC41ICAgICAgICAgICAgICB8IDEyOTAgICAgfA0KfCA3MCAtIDc5ICAgICAgICAgfCA4ICAgICAgICAgICAgIHwgNzQuNSAgICAgICAgICAgICAgfCA1OTYgICAgIHwNCnwgODAgLSA4OSAgICAgICAgIHwgNSAgICAgICAgICAgICB8IDg0LjUgICAgICAgICAgICAgIHwgNDIyLjUgICB8DQp8IFRvdGFsICAgICAgICAgICB8IDUwICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IDMxODUgICAgfA0KJCRcYmFye3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhfaX17XHN1bSBmfSA9IFxmcmFjezMxODV9ezUwfSA9IDYzLjckJA0KSGFzaWwgTWVhbiBhZGFsYWggNjMuNw0KDQojIyBNZW5naGl0dW5nIE1lZGlhbg0KRGVuZ2FuIHJ1bXVzIG1lZGlhbiBzZWJhZ2FpIGJlcmlrdXQgOg0KJCRNZWRpYW4gPSBMX20gKyBcZnJhY3soXGZyYWN7Tn17Mn0pIC0gZil9e0ZfbX1cY2RvdCBjJCQNCg0KDQotIExtIDogQmF0YXMga2VsYXMgYmF3YWggbWVkaWFuDQotIE46IHRvdGFsIGZyZWt1ZW5zaSjiiJFmID0gNTApDQotIEZtIDogZnJla3VlbnNpIGtlbGFzIG1lZGlhbg0KLSBjIDogcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KDQoxLiBMYW5na2FoIExhbmdrYWggOg0KJCRcZnJhY3tOfXsyfSA9IFxmcmFjezUwfXsyfSA9IDI1JCQNCjIuIHRlbnR1a2FuIGtlbGFzIE1lZGlhbiA6DQotIGZyZWt1ZW5zaSBrdW11bGF0aWYNCi0ga2VsYXMgNDAtNDk6NQ0KLSBrZWxhcyA1MC01OTo1KzEyPTE3DQotIGtlbGFzIDYwLTY5OjE3KzIwPTM3DQprZWxhcyBtZWRpYW4gYWRhbGFoIDYwLTY5DQoNCjMuIHN1YnN0aXR1c2kgbmlsYWkNCkxtPTYwLCBGPTE3LEZtPTIwLCBjPTEwDQokJE1lZGlhbiA9IDYwICsgXGZyYWN7KDI1IC0gMTcpfXsyMH1cY2RvdCAxMCA9IDY0JCQNCk1lZGlhbiB5YW5nIGRpZGFwYXRrYW4gYWRhbGFoIDY0DQoNCiMjIE1lbmdoaXR1bmcgTW9kdXMNCkRlbmdhbiBSdW11cyBNb2R1cyBzZWJhZ2FpIGJlcmlrdXQgOg0KJCRNb2R1cyA9IExfbSArIChcZnJhY3tkXzF9e2RfMSArIGRfMn0pXGNkb3QgYyQkDQoxLiBMYW5na2FoIC0gTGFuZ2thaA0KDQotIEtlbGFzIG1vZHVzIGFkYWxhaCBGcmVrdWVuc2kga2VsYXMgVGVydGluZ2dpIHlhaXR1IDYwLTY5DQoNCi0gU3Vic3RpdHVzaSBuaWxhaSA6TG09NjAsIEZtLTEgPSAxMiwgRm0rMSA9IDgsIGMgPTEwLCBkMSA9MjAtMTI9OCwgZDIgPTIwLTggPTEyDQoNCiQkTW9kdXMgPSA2MCArIChcZnJhY3s4fXs4ICsgMTJ9KVxjZG90IDEwID0gNjQkJA0KSGFzaWwgTW9kdXMgeWFuZyBkaSBkYXBhdGthbiBhZGFsYWggNjQNCg0KDQoNCiMjIE1lYW4gZGFsYW0gYm94cGxvdA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMjIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyMgRGF0YSBiZXJhdCBiYWRhbiBtYWhhc2lzd2EgKGRpc3RyaWJ1c2kga2Vsb21wb2sgZGFuIGZyZWt1ZW5zaSkNCmludGVydmFsIDwtIGMoIjQwLTQ5IiwgIjUwLTU5IiwgIjYwLTY5IiwgIjcwLTc5IiwgIjgwLTg5IikNCmZyZWt1ZW5zaSA8LSBjKDUsIDEyLCAyMCwgOCwgNSkNCnRpdGlrX3RlbmdhaCA8LSBjKDQ0LjUsIDU0LjUsIDY0LjUsIDc0LjUsIDg0LjUpICAjIyBUaXRpayB0ZW5nYWgga2VsYXMNCmRhdGFfcmVwbGlrYXNpIDwtIHJlcCh0aXRpa190ZW5nYWgsIGZyZWt1ZW5zaSkgICAjIyBNZXJlcGxpa2FzaSBkYXRhIHNlc3VhaSBmcmVrdWVuc2kNCg0KIyMgTWVuZ2hpdHVuZyByYXRhLXJhdGEgKG1lYW4pIGRhcmkgZGF0YSBiZXJhdCBiYWRhbiBtYWhhc2lzd2ENCm1lYW5fYmVyYXRfYmFkYW4gPC0gbWVhbihkYXRhX3JlcGxpa2FzaSkNCg0KIyMgRGF0YSBzaW11bGFzaSBkZW5nYW4gb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIGMoZGF0YV9yZXBsaWthc2ksIDE1MCkgICMjIE1lbmFtYmFoa2FuIG91dGxpZXIgKG1pc2FsbnlhIDE1MCkNCm1lYW5fZGVuZ2FuX291dGxpZXJzIDwtIG1lYW4oZGF0YV9kZW5nYW5fb3V0bGllcnMpDQoNCiMjIE1lbmdnYWJ1bmdrYW4gZGF0YSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGMoZGF0YV9yZXBsaWthc2ksIGRhdGFfZGVuZ2FuX291dGxpZXJzKSwNCiAgS2Vsb21wb2sgPSByZXAoYygiVGFucGEgT3V0bGllcnMiLCAiRGVuZ2FuIE91dGxpZXJzIiksIA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfcmVwbGlrYXNpKSwgbGVuZ3RoKGRhdGFfZGVuZ2FuX291dGxpZXJzKSkpDQopDQoNCiMjIE1lbWJ1YXQgYm94cGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCg0KcGxvdCA8LSBwbG90X2x5KA0KICBkYXRhLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gIm91dGxpZXJzIiAgIyMgTWVuYW1waWxrYW4gdGl0aWsgb3V0bGllcnMNCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWFuIEJlcmF0IEJhZGFuIE1haGFzaXN3YSIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkJlcmF0IEJhZGFuIChrZykiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiS2Vsb21wb2siKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fYmVyYXRfYmFkYW4sDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCByb3VuZChtZWFuX2JlcmF0X2JhZGFuLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWFuX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICkNCiAgICApDQogICkNCg0KIyMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KYGBgDQoNCiMjIE1lYW4gZGFsYW0gaGlzdG9ncmFtDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YTogYmVyYXQgYmFkYW4gbWFoYXNpc3dhDQpkYXRhX2JlcmF0X21haGFzaXN3YSA8LSBjKDUwLCA1NSwgNjAsIDY1LCA3MCwgNzUsIDgwKSAgIyBOaWxhaSB0ZW5nYWggc2V0aWFwIGtlbGFzDQpmcmVrdWVuc2kgPC0gYyg0LCA4LCAxMiwgMTYsIDEwLCA2LCA0KSAgICAgICAgICAgICAgICAjIEZyZWt1ZW5zaSBtYXNpbmctbWFzaW5nIGtlbGFzDQoNCiMgTWVtYnVhdCBkYXRhIGJlcmF0IGJhZGFuIG1haGFzaXN3YSAodGFucGEgb3V0bGllcnMpDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIHJlcChkYXRhX2JlcmF0X21haGFzaXN3YSwgZnJla3VlbnNpKQ0KDQojIE1lbmFtYmFoa2FuIGRhdGEgb3V0bGllcnMga2UgZGFsYW0gZGF0YXNldA0Kb3V0bGllcnMgPC0gYygzMCwgMTAwKSAgIyBPdXRsaWVycyBiZXJhdCBiYWRhbg0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gYyhkYXRhX3RhbnBhX291dGxpZXJzLCBvdXRsaWVycykNCg0KIyBNZW5naGl0dW5nIG1lYW4gdW50dWsga2VkdWEgZGF0YXNldA0KbWVhbl90YW5wYV9vdXRsaWVycyA8LSBtZWFuKGRhdGFfdGFucGFfb3V0bGllcnMpDQptZWFuX2Rlbmdhbl9vdXRsaWVycyA8LSBtZWFuKGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KDQojIE1lbWJ1YXQgZGVuc2l0eSBwbG90IHVudHVrIGtlZHVhIGRhdGFzZXQNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMgPC0gZGVuc2l0eShkYXRhX3RhbnBhX291dGxpZXJzKQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMgPC0gZGVuc2l0eShkYXRhX2Rlbmdhbl9vdXRsaWVycykNCg0KIyBQbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyByYXRhLXJhdGEgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVhbl90YW5wYV9vdXRsaWVycywgbWVhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgcmF0YS1yYXRhIHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX2Rlbmdhbl9vdXRsaWVycywgbWVhbl9kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIlJhdGEtcmF0YSAoRGVuZ2FuIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBEZW5zaXR5IFBsb3QgZGFuIE1lYW4iLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJCZXJhdCBCYWRhbiAoa2cpIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIktlcGFkYXRhbiIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWFuIHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl90YW5wYV9vdXRsaWVycywgMiksICJrZyIpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWFuIGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpLCAia2ciKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCg0KIyMgTWVkaWFuIGRhbGFtIGJveHBsb3QNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIyBEYXRhIGJlcmF0IGJhZGFuIG1haGFzaXN3YSAoZGlzdHJpYnVzaSBrZWxvbXBvayBkYW4gZnJla3VlbnNpKQ0KaW50ZXJ2YWwgPC0gYygiNDAtNDkiLCAiNTAtNTkiLCAiNjAtNjkiLCAiNzAtNzkiLCAiODAtODkiKQ0KZnJla3VlbnNpIDwtIGMoNSwgMTIsIDIwLCA4LCA1KQ0KdGl0aWtfdGVuZ2FoIDwtIGMoNDQuNSwgNTQuNSwgNjQuNSwgNzQuNSwgODQuNSkgICMjIFRpdGlrIHRlbmdhaCBrZWxhcw0KZGF0YV9yZXBsaWthc2kgPC0gcmVwKHRpdGlrX3RlbmdhaCwgZnJla3VlbnNpKSAgICMjIE1lcmVwbGlrYXNpIGRhdGEgc2VzdWFpIGZyZWt1ZW5zaQ0KDQojIyBNZW5naGl0dW5nIG1lZGlhbiBkYXJpIGRhdGEgYmVyYXQgYmFkYW4gbWFoYXNpc3dhDQptZWRpYW5fYmVyYXRfYmFkYW4gPC0gbWVkaWFuKGRhdGFfcmVwbGlrYXNpKQ0KDQojIyBEYXRhIHNpbXVsYXNpIGRlbmdhbiBvdXRsaWVycw0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gYyhkYXRhX3JlcGxpa2FzaSwgMTUwKSAgIyMgTWVuYW1iYWhrYW4gb3V0bGllciAobWlzYWxueWEgMTUwKQ0KbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyA8LSBtZWRpYW4oZGF0YV9kZW5nYW5fb3V0bGllcnMpDQoNCiMjIE1lbmdnYWJ1bmdrYW4gZGF0YSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGMoZGF0YV9yZXBsaWthc2ksIGRhdGFfZGVuZ2FuX291dGxpZXJzKSwNCiAgS2Vsb21wb2sgPSByZXAoYygiVGFucGEgT3V0bGllcnMiLCAiRGVuZ2FuIE91dGxpZXJzIiksIA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfcmVwbGlrYXNpKSwgbGVuZ3RoKGRhdGFfZGVuZ2FuX291dGxpZXJzKSkpDQopDQoNCiMjIE1lbWJ1YXQgYm94cGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywgDQogIHR5cGUgPSAiYm94IiwgDQogIGJveHBvaW50cyA9ICJvdXRsaWVycyIgICMjIE1lbmFtcGlsa2FuIHRpdGlrIG91dGxpZXJzDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVkaWFuIEJlcmF0IEJhZGFuIE1haGFzaXN3YSIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkJlcmF0IEJhZGFuIChrZykiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiS2Vsb21wb2siKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl9iZXJhdF9iYWRhbiwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX2JlcmF0X2JhZGFuLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWRpYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICkNCiAgICApDQogICkNCg0KIyMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KDQpgYGANCg0KIyMgTWVkaWFuIGRhbGFtIEhpc3RvZ3JhbQ0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhOiBiZXJhdCBiYWRhbiBtYWhhc2lzd2ENCmRhdGFfYmVyYXRfbWFoYXNpc3dhIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwLCA3NSwgODApICAjIE5pbGFpIHRlbmdhaCBzZXRpYXAga2VsYXMNCmZyZWt1ZW5zaSA8LSBjKDQsIDgsIDEyLCAxNiwgMTAsIDYsIDQpICAgICAgICAgICAgICAgICMgRnJla3VlbnNpIG1hc2luZy1tYXNpbmcga2VsYXMNCg0KIyBNZW1idWF0IGRhdGEgYmVyYXQgYmFkYW4gbWFoYXNpc3dhICh0YW5wYSBvdXRsaWVycykNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKGRhdGFfYmVyYXRfbWFoYXNpc3dhLCBmcmVrdWVuc2kpDQoNCiMgTWVuYW1iYWhrYW4gZGF0YSBvdXRsaWVycyBrZSBkYWxhbSBkYXRhc2V0DQpvdXRsaWVycyA8LSBjKDMwLCAxMDApICAjIE91dGxpZXJzIGJlcmF0IGJhZGFuDQpkYXRhX2Rlbmdhbl9vdXRsaWVycyA8LSBjKGRhdGFfdGFucGFfb3V0bGllcnMsIG91dGxpZXJzKQ0KDQojIE1lbmdoaXR1bmcgbWVkaWFuIHVudHVrIGtlZHVhIGRhdGFzZXQNCm1lZGlhbl90YW5wYV9vdXRsaWVycyA8LSBtZWRpYW4oZGF0YV90YW5wYV9vdXRsaWVycykNCm1lZGlhbl9kZW5nYW5fb3V0bGllcnMgPC0gbWVkaWFuKGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KDQojIE1lbWJ1YXQgZGVuc2l0eSBwbG90IHVudHVrIGtlZHVhIGRhdGFzZXQNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMgPC0gZGVuc2l0eShkYXRhX3RhbnBhX291dGxpZXJzKQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMgPC0gZGVuc2l0eShkYXRhX2Rlbmdhbl9vdXRsaWVycykNCg0KIyBQbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtZWRpYW4gdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVkaWFuX3RhbnBhX291dGxpZXJzLCBtZWRpYW5fdGFucGFfb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiTWVkaWFuIChUYW5wYSBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lZGlhbiB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVkaWFuX2Rlbmdhbl9vdXRsaWVycywgbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiTWVkaWFuIChEZW5nYW4gT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIERlbnNpdHkgUGxvdCBkYW4gTWVkaWFuIiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQmVyYXQgQmFkYW4gKGtnKSIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJLZXBhZGF0YW4iKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVkaWFuIHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl90YW5wYV9vdXRsaWVycywgMiksICJrZyIpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWRpYW4gZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX2Rlbmdhbl9vdXRsaWVycywgMiksICJrZyIpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQojIyBNb2R1cyBkYWxhbSBCb3hwbG90DQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIyBEYXRhIGJlcmF0IGJhZGFuIG1haGFzaXN3YSAoZGlzdHJpYnVzaSBrZWxvbXBvayBkYW4gZnJla3VlbnNpKQ0KaW50ZXJ2YWwgPC0gYygiNDAtNDkiLCAiNTAtNTkiLCAiNjAtNjkiLCAiNzAtNzkiLCAiODAtODkiKQ0KZnJla3VlbnNpIDwtIGMoNSwgMTIsIDIwLCA4LCA1KQ0KdGl0aWtfdGVuZ2FoIDwtIGMoNDQuNSwgNTQuNSwgNjQuNSwgNzQuNSwgODQuNSkgICMjIFRpdGlrIHRlbmdhaCBrZWxhcw0KZGF0YV9yZXBsaWthc2kgPC0gcmVwKHRpdGlrX3RlbmdhaCwgZnJla3VlbnNpKSAgICMjIE1lcmVwbGlrYXNpIGRhdGEgc2VzdWFpIGZyZWt1ZW5zaQ0KDQojIyBNZW5naGl0dW5nIG1vZHVzIGRhcmkgZGF0YSBiZXJhdCBiYWRhbiBtYWhhc2lzd2ENCiMgTWVuZW50dWthbiBrZWxhcyBtb2R1cyAoZnJla3VlbnNpIHRlcnRpbmdnaSkNCmtlbGFzX21vZHVzX2luZGV4IDwtIHdoaWNoLm1heChmcmVrdWVuc2kpDQpMIDwtIHRpdGlrX3RlbmdhaFtrZWxhc19tb2R1c19pbmRleF0gLSA1ICAjIEJhdGFzIGJhd2FoIGtlbGFzIG1vZHVzDQpmX21vZHVzIDwtIGZyZWt1ZW5zaVtrZWxhc19tb2R1c19pbmRleF0gICMgRnJla3VlbnNpIGtlbGFzIG1vZHVzDQpmX3NlYmVsdW0gPC0gaWZlbHNlKGtlbGFzX21vZHVzX2luZGV4ID4gMSwgZnJla3VlbnNpW2tlbGFzX21vZHVzX2luZGV4IC0gMV0sIDApICAjIEZyZWt1ZW5zaSBzZWJlbHVtIGtlbGFzIG1vZHVzDQpmX3NldGVsYWggPC0gaWZlbHNlKGtlbGFzX21vZHVzX2luZGV4IDwgbGVuZ3RoKGZyZWt1ZW5zaSksIGZyZWt1ZW5zaVtrZWxhc19tb2R1c19pbmRleCArIDFdLCAwKSAgIyBGcmVrdWVuc2kgc2V0ZWxhaCBrZWxhcyBtb2R1cw0KaSA8LSAxMCAgIyBQYW5qYW5nIGludGVydmFsIGtlbGFzDQoNCiMgTWVuZ2hpdHVuZyBtb2R1cw0KbW9kdXNfdGFucGFfb3V0bGllcnMgPC0gTCArICgoZl9tb2R1cyAtIGZfc2ViZWx1bSkgLyAoKGZfbW9kdXMgLSBmX3NlYmVsdW0pICsgKGZfbW9kdXMgLSBmX3NldGVsYWgpKSkgKiBpDQoNCiMjIERhdGEgc2ltdWxhc2kgZGVuZ2FuIG91dGxpZXJzDQpkYXRhX2Rlbmdhbl9vdXRsaWVycyA8LSBjKGRhdGFfcmVwbGlrYXNpLCAxNTApICAjIyBNZW5hbWJhaGthbiBvdXRsaWVyIChtaXNhbG55YSAxNTApDQptb2R1c19kZW5nYW5fb3V0bGllcnMgPC0gbW9kdXNfdGFucGFfb3V0bGllcnMgICMgTW9kdXMgdGlkYWsgYmVydWJhaCBrYXJlbmEgZGF0YSBrZWxvbXBvaw0KDQojIyBNZW5nZ2FidW5na2FuIGRhdGEgdW50dWsgdmlzdWFsaXNhc2kNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfcmVwbGlrYXNpLCBkYXRhX2Rlbmdhbl9vdXRsaWVycyksDQogIEtlbG9tcG9rID0gcmVwKGMoIlRhbnBhIE91dGxpZXJzIiwgIkRlbmdhbiBPdXRsaWVycyIpLCANCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhX3JlcGxpa2FzaSksIGxlbmd0aChkYXRhX2Rlbmdhbl9vdXRsaWVycykpKQ0KKQ0KDQojIyBNZW1idWF0IGJveHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQoNCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywgDQogIHR5cGUgPSAiYm94IiwgDQogIGJveHBvaW50cyA9ICJvdXRsaWVycyIgICMjIE1lbmFtcGlsa2FuIHRpdGlrIG91dGxpZXJzDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTW9kdXMgQmVyYXQgQmFkYW4gTWFoYXNpc3dhIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiQmVyYXQgQmFkYW4gKGtnKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbW9kdXNfdGFucGFfb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtb2R1c19kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtMzAsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApDQogICAgKQ0KICApDQoNCiMjIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQoNCiMjIE1vZHVzIGRhbGFtIEhpc3RvZ3JhbQ0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyMgRGF0YSBiZXJhdCBiYWRhbiBtYWhhc2lzd2EgKGRpc3RyaWJ1c2kga2Vsb21wb2sgZGFuIGZyZWt1ZW5zaSkNCmludGVydmFsIDwtIGMoIjQwLTQ5IiwgIjUwLTU5IiwgIjYwLTY5IiwgIjcwLTc5IiwgIjgwLTg5IikNCmZyZWt1ZW5zaSA8LSBjKDUsIDEyLCAyMCwgOCwgNSkNCnRpdGlrX3RlbmdhaCA8LSBjKDQ0LjUsIDU0LjUsIDY0LjUsIDc0LjUsIDg0LjUpICAjIyBUaXRpayB0ZW5nYWgga2VsYXMNCg0KIyMgTWVuZ2hpdHVuZyBtb2R1cyB1bnR1ayBkYXRhIGJlcmF0IGJhZGFuIG1haGFzaXN3YQ0KIyBNZW5lbnR1a2FuIGtlbGFzIG1vZHVzIChmcmVrdWVuc2kgdGVydGluZ2dpKQ0Ka2VsYXNfbW9kdXNfaW5kZXggPC0gd2hpY2gubWF4KGZyZWt1ZW5zaSkNCkwgPC0gdGl0aWtfdGVuZ2FoW2tlbGFzX21vZHVzX2luZGV4XSAtIDUgICMgQmF0YXMgYmF3YWgga2VsYXMgbW9kdXMNCmZfbW9kdXMgPC0gZnJla3VlbnNpW2tlbGFzX21vZHVzX2luZGV4XSAgIyBGcmVrdWVuc2kga2VsYXMgbW9kdXMNCmZfc2ViZWx1bSA8LSBpZmVsc2Uoa2VsYXNfbW9kdXNfaW5kZXggPiAxLCBmcmVrdWVuc2lba2VsYXNfbW9kdXNfaW5kZXggLSAxXSwgMCkgICMgRnJla3VlbnNpIHNlYmVsdW0ga2VsYXMgbW9kdXMNCmZfc2V0ZWxhaCA8LSBpZmVsc2Uoa2VsYXNfbW9kdXNfaW5kZXggPCBsZW5ndGgoZnJla3VlbnNpKSwgZnJla3VlbnNpW2tlbGFzX21vZHVzX2luZGV4ICsgMV0sIDApICAjIEZyZWt1ZW5zaSBzZXRlbGFoIGtlbGFzIG1vZHVzDQppIDwtIDEwICAjIFBhbmphbmcgaW50ZXJ2YWwga2VsYXMNCg0KIyBNZW5naGl0dW5nIG1vZHVzDQptb2R1c190YW5wYV9vdXRsaWVycyA8LSBMICsgKChmX21vZHVzIC0gZl9zZWJlbHVtKSAvICgoZl9tb2R1cyAtIGZfc2ViZWx1bSkgKyAoZl9tb2R1cyAtIGZfc2V0ZWxhaCkpKSAqIGkNCg0KIyMgRGF0YSBzaW11bGFzaSBkZW5nYW4gb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIGMocmVwKHRpdGlrX3RlbmdhaCwgZnJla3VlbnNpKSwgMTUwKSAgIyMgTWVuYW1iYWhrYW4gb3V0bGllcg0KbW9kdXNfZGVuZ2FuX291dGxpZXJzIDwtIG1vZHVzX3RhbnBhX291dGxpZXJzICAjIE1vZHVzIHRpZGFrIGJlcnViYWgga2FyZW5hIGRhdGEga2Vsb21wb2sNCg0KIyMgTWVtYnVhdCBkZW5zaXR5IHBsb3QgdW50dWsga2VkdWEgZGF0YXNldA0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KHJlcCh0aXRpa190ZW5nYWgsIGZyZWt1ZW5zaSkpDQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KDQojIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1vZHVzIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1vZHVzX3RhbnBhX291dGxpZXJzLCBtb2R1c190YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNb2R1cyAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtb2R1cyB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kdXNfZGVuZ2FuX291dGxpZXJzLCBtb2R1c19kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1vZHVzIChEZW5nYW4gT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIERlbnNpdHkgUGxvdCBkYW4gTW9kdXMiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJCZXJhdCBCYWRhbiAoa2cpIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIktlcGFkYXRhbiIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtb2R1cyB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1vZHVzX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpLCAia2ciKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbW9kdXMgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbW9kdXNfZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIHJvdW5kKG1vZHVzX2Rlbmdhbl9vdXRsaWVycywgMiksICJrZyIpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCg0KDQojIFN0dWRpIEthc3VzIDIgOiBEYXRhIEtlbG9tcG9rIFRlbnRhbmcgYmlzbmlzDQoNCnwgSW50ZXJ2YWwgUGVuZGFwYXRhbiAoanV0YSkgfCBGcmVrdWVuc2kgKEp1bWxhaCBUb2tvKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxMCAtIDE5ICAgICAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAyMCAtIDI5ICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAzMCAtIDM5ICAgICAgICAgICAgICAgICAgIHwgMTQgICAgICAgICAgICAgICAgICAgICAgfA0KfCA0MCAtIDQ5ICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA2MCAtIDY5ICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgfA0KDQooTXVsYWkgRGFyaSBTdHVkaSBLYXN1cyBLZSAyIFBlcmhpdHVuZ2FuIGRpYnVhdCBsZWJpaCBzaW5na2F0LCBVbnR1ayBwZW5qZWxhc2FuIFJ1bXVzbnlhIHN1ZGFoIFRlcmRhcGF0IGRpIFN0dWRpIEthc3VzIDEpDQoNCiMjIE1lbmdoaXR1bmcgTWVhbg0KDQokJFxiYXJ7eH0gPSBcZnJhY3tcc3VtIGYgXGNkb3QgeF9pfXtcc3VtIGZ9JCQNCg0KfCBJbnRlcnZhbCBQZW5kYXBhdGFuIChqdXRhKSB8IEZyZWt1ZW5zaSAoSnVtbGFoIFRva28pIHwgVGl0aWsgVGVuZ2FoICh4aSkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxMCAtIDE5ICAgICAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgfCAxNC41ICAgICAgICAgICAgICAgIHwgDQp8IDIwIC0gMjkgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICB8IDI0LjUgICAgICAgICAgICAgICAgfA0KfCAzMCAtIDM5ICAgICAgICAgICAgICAgICAgIHwgMTQgICAgICAgICAgICAgICAgICAgICAgfCAzNC41ICAgICAgICAgICAgICAgIHwNCnwgNDAgLSA0OSAgICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgICAgIHwgNDQuNSAgICAgICAgICAgICAgICB8IA0KfCA1MCAtIDU5ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgICAgICAgfCA1NC41ICAgICAgICAgICAgICAgIHwNCnwgNjAgLSA2OSAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgIHwgNjQuNSAgICAgICAgICAgICAgICB8DQp8IFRvdGFsICAgICAgICAgICAgICAgICAgICAgfCA1MA0KJCRcYmFye3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhfaX17XHN1bSBmfSA9IFxmcmFjezE4NzR9ezUwfSA9IDM3LjQ4JCQNCkhhc2lsIE1lYW4gQWRhbGFoIDM3LjQ4DQoNCg0KIyMgTWVuZ2l0dW5nIE1lZGlhbg0KJCRNZWRpYW4gPSBMX20gKyBcZnJhY3soXGZyYWN7Tn17Mn0pIC0gZil9e0ZfbX1cY2RvdCBjJCQNCiQkTiA9IDUwLCBcZnJhY3s1MH17Mn0gPSAyNSQkDQokJE1lZGlhbiA9IDMwICsgXGZyYWN7KDI1IC0gMTQpfXsxNH1cY2RvdCAxMCA9IDMwICsgNy44NiA9IDM3Ljg2JCQNCkhhc2lsIE1lZGlhbiBhZGFsYWggMzcuODYNCg0KIyMgTWVuZ2hpdHVuZyBtb2R1cw0KJCRNb2R1cyA9IExfbSArIChcZnJhY3tkXzF9e2RfMSArIGRfMn0pXGNkb3QgYyQkDQokJE1vZHVzID0gMzAgKyAoXGZyYWN7Nn17NiArIDE0fSlcY2RvdCAxMCA9IDMwICsgNiA9IDM2JCQNCk5pbGFpIE1vZHVzIGFkYWxhaCAzNg0KDQoNCiMgRGF0YSBLZWxvbXBvayBUZW50YW5nIEtlc2VoYXRhbg0KfCBJbnRlcnZhbCBJTVQgKEluZGVrcyBNYXNzYSBUdWJ1aCkgfCBGcmVrdWVuc2kgICAgICAgIHwgVGl0aWsgVGVuZ2FoICh4aSkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxOC41IC0gMjQuOSAgICAgICAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICB8IDIxLjcgICAgICAgICAgICAgfCANCnwgMjUgLSAyOS45ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgfCAyNy40NSAgICAgICAgICAgIHwNCnwgMzAgLSAzNC45ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQgICAgICAgICAgICAgICAgICAgICAgfCAzMi40NSAgICAgICAgICAgIHwNCnwgMzUgLSAzOS45ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgICAgICAgICAgfCAzNy40NSAgICAgICAgICAgIHwgDQp8IDQwIC0gNDQuOSAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgICAgICAgICAgICAgICAgICAgIHwgNDIuNDUgICAgICAgICAgICB8DQp8IFRvdGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMwICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8DQoNCiMjIE1lbmdoaXR1bmcgTWVhbg0KJCRcYmFye3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhfaX17XHN1bSBmfSA9IFxmcmFjezg1Mi41fXszMH0gPSAyOC40MiQkDQpIYXNpbCBNZWFuIEFkYWxhaCAyOC40Mg0KDQojIyBNZW5naGl0dW5nIE1lZGlhbg0KJCRNZWRpYW4gPSBMX20gKyBcZnJhY3soXGZyYWN7Tn17Mn0pIC0gZil9e0ZfbX1cY2RvdCBjJCQNCiQkTiA9IDMwLCBcZnJhY3szMH17Mn0gPSAxNSQkDQokJE1lZGlhbiA9IDI1ICsgXGZyYWN7KDE1IC0gOCl9ezEyfVxjZG90IDUgPSAyNSArIDIuOTIgPSAyOC45MiQkDQpIYXNpbCBNZWRpYW4gYWRhbGFoIDI4LjkyDQoNCiMjIE1lbmdoaXR1bmcgTW9kdXMNCiQkTW9kdXMgPSBMX20gKyAoXGZyYWN7ZF8xfXtkXzEgKyBkXzJ9KVxjZG90IGMkJA0KJCRNb2R1cyA9IDI1ICsgKFxmcmFjezR9ezggKyA2fSlcY2RvdCA1ID0gMjUgKyAxLjQzID0gMjYuNDMkJA0KSGFzaWwgTW9kdXMgMjYuNDMNCg0KIyMgUGVyc2VudGFzZQ0KDQp8IEludGVydmFsIElNVCAoSW5kZWtzIE1hc3NhIFR1YnVoKSB8IFBlcnNlbnRhc2UgICAgICAgICAgICAgIHwgUmlzaWtvIHBlbnlha2l0ICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMTguNSAtIDI0LjkgICAgICAgICAgICAgICAgICAgICAgIHwgNi8zMCB4IDEwMCA9IDIwJSAgICAgICAgfCBSaXNpa28gUmVuZGFoICAgICAgICB8IA0KfCAyNSAtIDI5LjkgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LzMwIHggMTAwID0gMjYuNyUgICAgICB8IFJpc2lrbyBNZW5pbmdrYXQgICAgIHwNCnwgMzAgLSAzNC45ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQvMzAgeCAxMDAgPSA0Ni42NyUgICAgfCBSaXNpa28gU2VkYW5nICAgICAgICB8DQp8IDM1IC0gMzkuOSAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLzMwIHggMTAwID0gMzMuMzMlICAgIHwgUmlzaWtvIFRpbmdnaSAgICAgICAgfCANCnwgNDAgLSA0NC45ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy8zMCB4IDEwMCA9IDIzLjMzJSAgICAgfCBSaXNpa28gU2FuZ2F0IFRpbmdnaSB8DQoNCktlc2ltcHVsYW4NCg0KLSBSaXNpa28gUmVuZGFoIDogMjAlIGRhcmkgUG9wdWxhc2kNCg0KLSBSaXNpa28gTWVuaW5na2F0IDogMjYuNyUgZGFyaSBQb3B1bGFzaQ0KDQotIFJpc2lrbyBTZWRhbmcgOiA0Ni42NyUgZGFyaSBQb3B1bGFzaQ0KDQotIFJpc2lrbyBUaW5nZ2kgOiAzMy4zMyUgZGFyaSBQb3B1bGFzaQ0KDQotIFJpc2lrbyBTYW5nYXQgVGluZ2dpIDogMjMuMzMlIGRhcmkgUG9wdWxhc2kNCg0KTWF5b3JpdGFzIHBvcHVsYXNpIG1lbWlsaWtpIElNVCAzMC0zOSBhdGF1IG9iZXNpdGFzIGtlbGFzIGkgZGVuZ2FuIHBlcnNlbnRhc2UgNDYuNjclLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHNlYmFnaWFuIGJlc2FyIG9yYW5nIGRhbGFtIGRhdGEgaW5pIG1lbWlsaWtpIHJpc2lrbyBzZWRhbmcgdGVyaGFkYXAgYmViZXJhcGEgcGVueWFraXQsIHNlcGVydGkgZGlhYmV0ZXMgdGlwZSAyLCBoaXBlcnRlbnNpLCBkYW4gcGVueWFraXQga2FyZGlvdmFza3VsYXIuDQoNCg0KDQojIERhdGEgS2Vsb21wb2sgdGVudGFuZyBQZW5kaWRpa2FuDQoNCihGcmVrdWVuc2kgcGVkaWRpa2FuIHNlc2VvcmFuZyBiZXJkYXNhcmthbiByZW50YW5nIHVzaWEgbWVyZWthKQ0KDQp8IEludGVydmFsIFVzaWEgKFRhaHVuKSAgICAgICAgICAgICB8IEZyZWt1ZW5zaSAgICAgICAgICAgICAgIHwgVGl0aWsgVGVuZ2FoICh4aSkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMCAtIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgICAgICAgICAgfCAyLjUgICAgICAgICAgICAgICB8IA0KfCA2IC0gMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNSAgICAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICAgIHwNCnwgMTEgLSAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjUgICAgICAgICAgICAgICAgICAgICAgfCAxMyAgICAgICAgICAgICAgICB8DQp8IDE2IC0gMjAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMwICAgICAgICAgICAgICAgICAgICAgIHwgMTggICAgICAgICAgICAgICAgfCANCnwgMjEgLSAyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgICAgICAgICAgICAgICAgICAgICAgfCAyMyAgICAgICAgICAgICAgICB8DQp8IDI2IC0gMzAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgICAgIHwgMjggICAgICAgICAgICAgICAgfA0KfCAzMSAtIDM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICB8IDMzDQp8IFRvdGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExNQ0KDQojIyBNZW5naGl0dW5nIE1lYW4NCg0KJCRcYmFye3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhfaX17XHN1bSBmfSA9IFxmcmFjezE5MTV9ezExNX0gPSAxNi43JCQNCkhhc2lsIE1lYW4gYWRhbGFoIDE2LjcNCg0KIyMgTWVuZ2hpdHVuZyBNZWRpYW4NCg0KJCRNZWRpYW4gPSBMX20gKyBcZnJhY3soXGZyYWN7Tn17Mn0pIC0gZil9e0ZfbX1cY2RvdCBjJCQNCiQkTWVkaWFuID0gTF9tICsgXGZyYWN7KFxmcmFje059ezJ9KSAtIGYpfXtGX219XGNkb3QgYyQkDQokJE4gPSAxMTUsIFxmcmFjezExNX17Mn0gPSA1Ny41JCQNCiQkTWVkaWFuID0gMTYgKyBcZnJhY3soNTcuNSAtIDUwKX17MzB9XGNkb3QgNSA9IDE2ICsgMS4yNSA9IDE3LjI1JCQNCiBIYXNpbCBNZWRpYW4gYWRhbGFoIDE3LjI1DQogDQoNCg0KIyMgTWVuZ2hpdHVuZyBNb2R1cw0KJCRNb2R1cyA9IExfbSArIChcZnJhY3tkXzF9e2RfMSArIGRfMn0pXGNkb3QgYyQkDQokJE1vZHVzID0gMTYgKyAoXGZyYWN7Nn17MzUgKyAyMH0pXGNkb3QgMTUgPSAxNSArIDEuNjcgPSAxNi42NyQkDQpIYXNpbCBNb2R1cyBhZGFsYWggMTYuNjc=