MATERI RANCANGAN PERCOBAAN FAKTORIAL

Konsep Dasar Rancangan Faktorial

Rancangan faktorial adalah rancangan percobaan dimana semua level dari semua faktor dicobakan dalam semua kombinasi yang mungkin. Jika terdapat faktor A dengan a level dan faktor B dengan b level, maka terdapat a × b kombinasi perlakuan.

Keuntungan utama rancangan faktorial:

  1. Efisiensi: Dapat mempelajari pengaruh beberapa faktor dalam satu eksperimen.
  2. Interaksi: Dapat mendeteksi dan mengestimasi interaksi antar faktor.
    Interaksi terjadi ketika pengaruh satu faktor tergantung pada level faktor lainnya.

Rancangan Faktorial 2^k

Rancangan Faktorial 2^k adalah rancangan faktorial khusus yang melibatkan k faktor, masing-masing hanya memiliki 2 level:

  • Level Rendah: - atau -1
  • Level Tinggi: + atau +1

Karakteristik:

* Jumlah total kombinasi perlakuan adalah 2^k.

* Efisien untuk eksplorasi awal penelitian (screening faktor penting).

* Mengasumsikan hubungan respon dan faktor adalah linier dalam rentang level yang dipilih.


Struktur dan Notasi Kombinasi Perlakuan

Kombinasi perlakuan sering ditulis menggunakan notasi huruf kecil.
Keberadaan sebuah huruf menunjukkan bahwa faktor tersebut berada pada level tinggi.

  • Untuk k = 2 (Faktor A dan B):
Kombinasi Keterangan
(1) A rendah, B rendah
a A tinggi, B rendah
b A rendah, B tinggi
ab A tinggi, B tinggi
  • Untuk k = 3 (A, B, C):
    Kombinasi = (1), a, b, ab, c, ac, bc, abc

Model Linier dan Efek yang Diestimasi

Model linier untuk faktorial 2²:

\[ Y_{ijk} = μ + α_i + β_j + (αβ)_{ij} + ε_{ijk} \]

Keterangan: - Y_ijk = Respon pengamatan
- μ = Rataan umum
- α_i, β_j = Pengaruh utama faktor A dan B
- (αβ)_ij = Pengaruh interaksi A dan B
- ε_ijk = Galat percobaan

Efek dihitung sebagai:

\[ Efek = \bar{Y}_{(tinggi)} - \bar{Y}_{(rendah)} \]

Contoh Faktorial 2²:

  • Efek utama A
    \[ A = \frac{(a - (1)) + (ab - b)}{2} \]
  • Efek utama B
    \[ B = \frac{(b - (1)) + (ab - a)}{2} \]
  • Efek interaksi AB
    \[ AB = \frac{(ab - b) - (a - (1))}{2} = \frac{ab - a - b + (1)}{2} \]

Tabel Kontras dan Matriks Desain

Contoh untuk Faktorial 2³:

Kombinasi I A B AB C AC BC ABC Respon (Y)
(1) + - - + - + + - y₁
a + + - - - - + + y₂
b + - + - - + - + y₃
ab + + + + - - - - y₄
c + - - + + - - + y₅
ac + + - - + + - - y₆
bc + - + - + - + - y₇
abc + + + + + + + + y₈

Keterangan:

* Kolom I adalah identitas.

* Tanda + dan - digunakan untuk menghitung kontras.

* Kontras efek = Σ(Tanda × Respon)

* Efek = Kontras / (2^(k-1))

* SS (Sum of Squares) = (Kontras²) / (n × 2^k)


Analisis Data (ANOVA dan Plot)

Langkah-langkah analisis:

  1. Hitung efek utama dan interaksi.
  2. Lakukan ANOVA untuk menguji signifikansi efek.
  3. Buat plot efek normal atau half-normal untuk identifikasi visual efek signifikan.
  4. Buat plot interaksi untuk melihat apakah garis sejajar (interaksi lemah) atau bersilangan (interaksi kuat).

Rancangan Faktorial 2^{k-p} (Fractional Factorial Design)

Rancangan Faktorial 2^{k-p} adalah pecahan (fraksi) dari rancangan faktorial lengkap 2^k.

Alasan penggunaan:

* Jika k besar → jumlah run 2^k terlalu banyak.

* Sumber daya terbatas (waktu, biaya, tenaga).

* Berdasarkan prinsip sparsity of effects, hanya sedikit efek yang signifikan.

Karakteristik:

* Jumlah run = 2^{k-p}

* Misal: 2^7 = 128 run → 2^{7-2} = 32 run (¼ fraksi)


Konsep Resolusi Desain

Resolusi = ukuran tingkat aliasing antar efek.

Resolusi Ciri Contoh Keterangan
III Efek utama alias dengan interaksi 2-faktor A = BC Screening faktor (interaksi diabaikan)
IV Efek utama ≠ interaksi 2-faktor, tapi interaksi 2-faktor saling alias A = BCD Fokus pada efek utama
V Efek utama ≠ interaksi ≤3-faktor, interaksi 2-faktor ≠ lainnya A = BCDE Dapat estimasi interaksi dua faktor

Pemilihan:
Gunakan resolusi tertinggi yang masih efisien dengan sumber daya yang ada.


Pembentukan Desain Fraksi (Generator & Defining Relation)

Langkah:

  1. Desain dasar: Gunakan 2^{k-p} penuh (misal A, B, C).
  2. Pilih generator:
    Misal: D = AB, E = AC
  3. Defining relation:
    • Dari D = ABI = ABD
    • Dari E = ACI = ACE
    • Kalikan → I = ABD = ACE = BCDE
  4. Struktur alias:
Efek Alias
A BD = CE = ABCDE
B AD = CDE = ABCE
C AE = BDE = ABCD
D AB = BCE = ACDE
E AC = BCD = ABDE

Analisis Data pada Desain Fraksi

Analisis sama seperti desain penuh, namun perlu memperhatikan aliasing.

  1. Hitung efek (berisi gabungan beberapa efek alias).
  2. Gunakan plot half-normal untuk deteksi efek signifikan.
  3. Jika efek sulit dibedakan, lakukan foldover design (jalankan fraksi pelengkap) untuk memecahkan alias.

Ringkasan Perbandingan

Aspek Faktorial 2^k (Penuh) Faktorial 2^{k-p} (Fraksi)
Jumlah Run 2^k (banyak) 2^{k-p} (lebih sedikit)
Tujuan Estimasi semua efek & interaksi Screening faktor penting
Informasi Lengkap Sebagian (aliasing)
Biaya & Waktu Tinggi Rendah
Kompleksitas Analisis Lebih mudah Perlu pertimbangan aliasing
Aplikasi Ideal Faktor sedikit (<5) Faktor banyak (>4)

STUDI KASUS: OPTIMASI PRODUKSI IKAN NILA

RANCANGAN FAKTORIAL 2²

Latar Belakang:

Mempelajari pengaruh pakan dan kepadatan tebar terhadap pertumbuhan ikan nila.

  • Faktor A: Jenis Pakan

    • Level -1: Pakan Standar (30% protein)

    • Level +1: Pakan Premium (40% protein)

  • Faktor B: Kepadatan Tebar

    • Level -1: 50 ekor/m³

    • Level +1: 100 ekor/m³

Respon: Berat rata-rata ikan (gram) setelah 60 hari

# Data percobaan
data_2k2 <- data.frame(
  Kepadatan = c(-1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1),
  Frekuensi_Pakan = c(-1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1),
  Bobot = c(85, 78, 92, 82, 88, 76, 95, 84, 87, 79, 90, 83)
)

print("Data Percobaan 2^2:")
## [1] "Data Percobaan 2^2:"
data_2k2
# Analisis ANOVA
model_2k2 <- aov(Bobot ~ Kepadatan * Frekuensi_Pakan, data = data_2k2)
print("Analisis ANOVA 2^2:")
## [1] "Analisis ANOVA 2^2:"
print(summary(model_2k2))
##                           Df Sum Sq Mean Sq F value   Pr(>F)    
## Kepadatan                  1 252.08  252.08  84.028 1.62e-05 ***
## Frekuensi_Pakan            1  90.75   90.75  30.250 0.000574 ***
## Kepadatan:Frekuensi_Pakan  1   0.08    0.08   0.028 0.871768    
## Residuals                  8  24.00    3.00                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Hitung efek manual
cat("\nPerhitungan Efek Manual 2^2:\n")
## 
## Perhitungan Efek Manual 2^2:
# Rataan untuk setiap kombinasi
mean_a0b0 <- mean(data_2k2$Bobot[data_2k2$Kepadatan == -1 & data_2k2$Frekuensi_Pakan == -1]) # (1)
mean_a1b0 <- mean(data_2k2$Bobot[data_2k2$Kepadatan == 1 & data_2k2$Frekuensi_Pakan == -1])  # a
mean_a0b1 <- mean(data_2k2$Bobot[data_2k2$Kepadatan == -1 & data_2k2$Frekuensi_Pakan == 1])  # b
mean_a1b1 <- mean(data_2k2$Bobot[data_2k2$Kepadatan == 1 & data_2k2$Frekuensi_Pakan == 1])   # ab

# Efek utama
efek_A <- (mean_a1b0 + mean_a1b1)/2 - (mean_a0b0 + mean_a0b1)/2
efek_B <- (mean_a0b1 + mean_a1b1)/2 - (mean_a0b0 + mean_a1b0)/2

# Efek interaksi
efek_AB <- (mean_a1b1 - mean_a1b0) - (mean_a0b1 - mean_a0b0)

cat("Efek Utama Kepadatan (A):", efek_A, "\n")
## Efek Utama Kepadatan (A): -9.166667
cat("Efek Utama Frekuensi Pakan (B):", efek_B, "\n")
## Efek Utama Frekuensi Pakan (B): 5.5
cat("Efek Interaksi AB:", efek_AB, "\n")
## Efek Interaksi AB: -0.3333333
# Plot interaksi
interaction.plot(data_2k2$Kepadatan, data_2k2$Frekuensi_Pakan, data_2k2$Bobot,
                 xlab = "Kepadatan Tebar", ylab = "Bobot Rata-rata (gram)",
                 trace.label = "Frekuensi Pakan", col = c("blue", "red"))

# Plot efek
par(mfrow = c(1, 2))
plot(data_2k2$Kepadatan, data_2k2$Bobot, xlab = "Kepadatan Tebar", ylab = "Bobot (gram)", main = "Efek Kepadatan")
plot(data_2k2$Frekuensi_Pakan, data_2k2$Bobot, xlab = "Frekuensi Pakan", ylab = "Bobot (gram)", main = "Efek Frekuensi Pakan")

Berdasarkan hasil analisis ANOVA dan perhitungan efek manual dari desain faktorial 2², dapat disimpulkan bahwa kedua faktor utama, yaitu Kepadatan Tebar (A) dan Frekuensi Pakan (B), memiliki pengaruh yang signifikan terhadap respon yang diamati, sementara interaksi antara keduanya tidak signifikan. Nilai-p untuk Kepadatan (1.62e-05) dan Frekuensi Pakan (0.000574) jauh di bawah tingkat signifikansi 0.05, menunjukkan bahwa variasi dalam kedua faktor ini secara statistik berpengaruh nyata terhadap hasil. Efek utama Kepadatan sebesar -9.17 mengindikasikan bahwa peningkatan level Kepadatan dari rendah ke tinggi justru menurunkan respon rata-rata, sedangkan efek utama Frekuensi Pakan sebesar 5.5 menunjukkan bahwa peningkatan frekuensi pakan memiliki dampak positif. Di sisi lain, efek interaksi AB yang sangat kecil (-0.33) dan tidak signifikan (nilai-p 0.872) mengonfirmasi bahwa pengaruh Kepadatan dan Frekuensi Pakan terhadap respon bersifat aditif, artinya pengaruh satu faktor tidak bergantung pada level faktor lainnya.

RANCANGAN FAKTORIAL 2³

Studi Kasus:
Peneliti menambahkan faktor Jenis Pakan (C) untuk optimisasi lebih lanjut.

  • Faktor A (Kepadatan Tebar): 50 vs 100 ekor/m³

  • Faktor B (Frekuensi Pakan): 2 vs 4 kali/hari

  • Faktor C (Jenis Pakan):

    • Level rendah (-1): Pakan komersial standar

    • Level tinggi (+1): Pakan premium fortifikasi

# Instal dan muat paket
# install.packages("DoE.base")
library(DoE.base)
## Warning: package 'DoE.base' was built under R version 4.5.2
## Loading required package: grid
## Loading required package: conf.design
## Warning: package 'conf.design' was built under R version 4.5.2
## Registered S3 method overwritten by 'DoE.base':
##   method           from       
##   factorize.factor conf.design
## 
## Attaching package: 'DoE.base'
## The following objects are masked from 'package:stats':
## 
##     aov, lm
## The following object is masked from 'package:graphics':
## 
##     plot.design
## The following object is masked from 'package:base':
## 
##     lengths
# Set seed agar hasil reproducible
set.seed(123)

# Buat desain faktorial 2^3 dengan 3 faktor (masing-masing 2 level)
desain_2k3 <- fac.design(
  nfactors = 3,
  nlevels = 2,
  replications = 2,
  randomize = FALSE,
  factor.names = list(
    Kepadatan   = c("Rendah", "Tinggi"),
    Frekuensi   = c("Jarang", "Sering"),
    Jenis_Pakan = c("A", "B")
  )
)
## creating full factorial with 8 runs ...
# Data respon (misal: bobot ikan dalam gram)
respon_2k3 <- c(85, 92, 78, 82, 95, 88, 76, 84,
                87, 90, 79, 83, 93, 89, 77, 81)

# Tambahkan respon ke desain
desain_2k3 <- add.response(desain_2k3, respon_2k3)

# Tampilkan hasil desain
print("Desain Percobaan 2^3:")
## [1] "Desain Percobaan 2^3:"
desain_2k3
# Analisis dengan model linear
model_2k3 <- lm(respon_2k3 ~ Kepadatan * Frekuensi * Jenis_Pakan, data = desain_2k3)
print("Analisis Model 2^3:")
## [1] "Analisis Model 2^3:"
print(summary(model_2k3))
## 
## Call:
## lm.default(formula = respon_2k3 ~ Kepadatan * Frekuensi * Jenis_Pakan, 
##     data = desain_2k3)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -1.500 -0.625  0.000  0.625  1.500 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                         84.9375     0.3125   271.8  < 2e-16 ***
## Kepadatan1                           1.1875     0.3125     3.8  0.00524 ** 
## Frekuensi1                          -4.9375     0.3125   -15.8 2.57e-07 ***
## Jenis_Pakan1                         0.4375     0.3125     1.4  0.19908    
## Kepadatan1:Frekuensi1                1.3125     0.3125     4.2  0.00300 ** 
## Kepadatan1:Jenis_Pakan1             -1.0625     0.3125    -3.4  0.00936 ** 
## Frekuensi1:Jenis_Pakan1             -0.9375     0.3125    -3.0  0.01707 *  
## Kepadatan1:Frekuensi1:Jenis_Pakan1   1.5625     0.3125     5.0  0.00105 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.25 on 8 degrees of freedom
## Multiple R-squared:  0.9763, Adjusted R-squared:  0.9555 
## F-statistic: 47.03 on 7 and 8 DF,  p-value: 7.082e-06
# ANOVA
print("ANOVA 2^3:")
## [1] "ANOVA 2^3:"
print(anova(model_2k3))
## Analysis of Variance Table
## 
## Response: respon_2k3
##                                 Df Sum Sq Mean Sq F value    Pr(>F)    
## Kepadatan                        1  22.56   22.56   14.44  0.005237 ** 
## Frekuensi                        1 390.06  390.06  249.64 2.574e-07 ***
## Jenis_Pakan                      1   3.06    3.06    1.96  0.199079    
## Kepadatan:Frekuensi              1  27.56   27.56   17.64  0.002997 ** 
## Kepadatan:Jenis_Pakan            1  18.06   18.06   11.56  0.009360 ** 
## Frekuensi:Jenis_Pakan            1  14.06   14.06    9.00  0.017072 *  
## Kepadatan:Frekuensi:Jenis_Pakan  1  39.06   39.06   25.00  0.001053 ** 
## Residuals                        8  12.50    1.56                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Plot efek
par(mfrow = c(2, 2))
plot(desain_2k3$Kepadatan, respon_2k3, main = "Efek Kepadatan", 
     xlab = "Kepadatan", ylab = "Bobot (gram)")
plot(desain_2k3$Frekuensi, respon_2k3, main = "Efek Frekuensi Pakan",
     xlab = "Frekuensi", ylab = "Bobot (gram)")
plot(desain_2k3$Jenis_Pakan, respon_2k3, main = "Efek Jenis Pakan",
     xlab = "Jenis Pakan", ylab = "Bobot (gram)")

# Plot interaksi tiga arah
library(gplots)
## Warning: package 'gplots' was built under R version 4.5.2
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess
plotmeans(respon_2k3 ~ interaction(Kepadatan, Frekuensi, Jenis_Pakan), 
          data = desain_2k3, main = "Plot Rataan Kombinasi Perlakuan")

# Normal plot of effects
effects_2k3 <- model_2k3$effects
qqnorm(effects_2k3, main = "Normal Plot of Effects")
qqline(effects_2k3)

Berdasarkan hasil analisis model faktorial 2³, model regresi yang terbentuk memiliki kemampuan penjelas yang sangat baik dengan R-squared sebesar 97.63%, menunjukkan bahwa hampir seluruh variasi respon dapat dijelaskan oleh ketiga faktor dan interaksinya. Hasil ANOVA mengungkapkan bahwa faktor Frekuensi Pakan merupakan variabel paling dominan (F=249.64, p=2.574e-07), diikuti oleh interaksi tiga faktor antara Kepadatan, Frekuensi, dan Jenis Pakan (F=25.00, p=0.001053). Secara individual, Kepadatan dan Frekuensi Pakan menunjukkan pengaruh signifikan, sedangkan Jenis Pakan sendiri tidak signifikan (p=0.199). Namun yang menarik, semua interaksi dua faktor dan tiga faktor terbukti signifikan secara statistik, menunjukkan bahwa pengaruh masing-masing faktor terhadap respon sangat bergantung pada level faktor lainnya. Hal ini mengindikasikan bahwa kombinasi spesifik dari ketiga faktor tersebut menghasilkan efek sinergis yang kompleks dalam mempengaruhi variabel respon.

Latihan

SOAL 1 (Bidang: Perikanan)

Seorang peneliti perikanan ingin mempelajari pengaruh dua faktor terhadap pertumbuhan ikan lele. Faktor A adalah jenis pakan (A1: pakan komersial, A2: pakan fermentasi) dan faktor B adalah kepadatan tebar (B1: 50 ekor/m³, B2: 100 ekor/m³). Percobaan dilakukan dengan 3 replikasi. Respon yang diukur adalah pertambahan berat badan (gram) setelah 60 hari.

  1. Berapa banyak kombinasi perlakuan yang harus diuji?
  2. Berapa total unit percobaan yang diperlukan?
  3. Sebutkan semua kombinasi perlakuan yang mungkin!
  4. Jelaskan apa yang dimaksud dengan interaksi antara jenis pakan dan kepadatan tebar dalam konteks ini!

SOAL 2 (Bidang: Pertanian)

Dalam penelitian pemuliaan tanaman padi, seorang ahli pertanian meneliti pengaruh dosis pupuk nitrogen (N1: 50 kg/ha, N2: 100 kg/ha) dan varietas padi (V1: IR64, V2: Ciherang) terhadap hasil gabah. Percobaan menggunakan rancangan faktorial 2² dengan 4 replikasi.

  1. Buatlah tabel kontras untuk rancangan ini!
  2. Tuliskan model linier yang sesuai untuk analisis data!
  3. Bagaimana cara menghitung efek utama pupuk nitrogen?
  4. Jika terjadi interaksi yang signifikan, apa implikasinya bagi rekomendasi pemupukan?

SOAL 3 (Bidang: Lingkungan)

Peneliti lingkungan ingin mengoptimalkan proses bioremediasi logam berat menggunakan bakteri. Dua faktor yang dipelajari adalah: Faktor C: konsentrasi nutrien (C1: 1 g/L, C2: 3 g/L) dan Faktor D: pH media (D1: 6, D2: 8). Respon yang diukur adalah persentase penurunan konsentrasi logam kadmium setelah 7 hari.

Data yang diperoleh: - C1D1: 45%, 48%, 42% - C1D2: 65%, 68%, 62% - C2D1: 55%, 58%, 52% - C2D2: 85%, 82%, 88%

  1. Hitunglah efek utama untuk masing-masing faktor!
  2. Hitunglah efek interaksi antara konsentrasi nutrien dan pH!
  3. Berdasarkan perhitungan tersebut, faktor manakah yang lebih berpengaruh?
  4. Apa interpretasi dari tanda (positif/negatif) pada efek interaksi?

SOAL 4 (Bidang: Biofisika)

Dalam studi biofisika tentang stabilitas enzim, peneliti mempelajari pengaruh suhu penyimpanan (T1: 4°C, T2: 25°C) dan konsentrasi buffer (B1: 50 mM, B2: 100 mM) terhadap aktivitas enzim amilase setelah 30 hari. Percobaan menggunakan rancangan faktorial 2² lengkap.

  1. Mengapa rancangan faktorial lebih baik dibandingkan mempelajari satu faktor pada satu waktu?
  2. Jelaskan prinsip “sparsity of effects” dalam konteks penelitian ini!
  3. Bagaimana cara menguji signifikansi statistik dari efek-efek yang dihitung?
  4. Jika peneliti ingin menambah faktor ketiga (jenis buffer), berapa banyak kombinasi perlakuan yang diperlukan?

SOAL 5 (Bidang: Perikanan & Lingkungan)

Sebuah penelitian integrated multitrophic aquaculture (IMTA) mempelajari sistem budidaya yang melibatkan ikan, rumput laut, dan kerang. Dua faktor yang diteliti adalah: Faktor E: rasio biomassa ikan-rumput laut (E1: 1:1, E2: 1:2) dan Faktor F: sirkulasi air (F1: statis, F2: mengalir). Respon yang diukur adalah efisiensi pemanfaatan nitrogen.

  1. Rancanglah matriks desain untuk percobaan ini!
  2. Jelaskan bagaimana analisis varians (ANOVA) dapat digunakan untuk menguji pengaruh faktor!
  3. Apa keuntungan menggunakan rancangan faktorial dalam sistem IMTA yang kompleks?
  4. Jika diperoleh interaksi yang signifikan antara rasio biomassa dan sirkulasi air, apa implikasi praktisnya bagi petambak?

SOAL 6 (Bidang: Perikanan & Lingkungan)

Seorang peneliti perikanan ingin mempelajari pengaruh suhu air dan pH terhadap pertumbuhan udang vaname. Faktor yang diteliti:

  • Faktor A: Suhu air (28°C vs 32°C)

  • Faktor B: pH air (7.0 vs 8.0)

Respon yang diukur: Bobot udang (gram) setelah 30 hari.

Data yang diperoleh:

Kombinasi Ulangan 1 Ulangan 2 Ulangan 3
(1) 15.2 14.8 15.5
a 17.3 16.9 17.6
b 16.1 15.7 16.4
ab 18.5 18.1 18.8

Pertanyaan:
a. Hitunglah efek utama faktor A dan faktor B!
b. Hitunglah efek interaksi AB!
c. Buatlah tabel ANOVA lengkap!
d. Interpretasikan hasil yang diperoleh!

LS0tDQp0aXRsZTogIlJhbmNhbmdhbiBGYWt0b3JpYWwiDQphdXRob3I6ICJOZ3VyYWggU2VudGFuYSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0aGVtZTogbHVtZW4NCiAgICBoaWdobGlnaHQ6IGhhZGRvY2sNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgZmlnX3dpZHRoOiA3DQogICAgZmlnX2hlaWdodDogNQ0KICAgIGZpZ19jYXB0aW9uOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KLS0tDQoNCiMgKipNQVRFUkkgUkFOQ0FOR0FOIFBFUkNPQkFBTiBGQUtUT1JJQUwqKg0KDQojIyAqKktvbnNlcCBEYXNhciBSYW5jYW5nYW4gRmFrdG9yaWFsKioNCg0KUmFuY2FuZ2FuIGZha3RvcmlhbCBhZGFsYWggcmFuY2FuZ2FuIHBlcmNvYmFhbiBkaW1hbmEgc2VtdWEgbGV2ZWwgZGFyaSBzZW11YSBmYWt0b3IgZGljb2Jha2FuIGRhbGFtIHNlbXVhIGtvbWJpbmFzaSB5YW5nIG11bmdraW4uIEppa2EgdGVyZGFwYXQgZmFrdG9yIEEgZGVuZ2FuIGBhYCBsZXZlbCBkYW4gZmFrdG9yIEIgZGVuZ2FuIGBiYCBsZXZlbCwgbWFrYSB0ZXJkYXBhdCBgYSDDlyBiYCBrb21iaW5hc2kgcGVybGFrdWFuLg0KDQpLZXVudHVuZ2FuIHV0YW1hIHJhbmNhbmdhbiBmYWt0b3JpYWw6DQoNCjEuICBFZmlzaWVuc2k6IERhcGF0IG1lbXBlbGFqYXJpIHBlbmdhcnVoIGJlYmVyYXBhIGZha3RvciBkYWxhbSBzYXR1IGVrc3BlcmltZW4uDQoyLiAgSW50ZXJha3NpOiBEYXBhdCBtZW5kZXRla3NpIGRhbiBtZW5nZXN0aW1hc2kgaW50ZXJha3NpIGFudGFyIGZha3Rvci5cDQogICAgSW50ZXJha3NpIHRlcmphZGkga2V0aWthIHBlbmdhcnVoIHNhdHUgZmFrdG9yIHRlcmdhbnR1bmcgcGFkYSBsZXZlbCBmYWt0b3IgbGFpbm55YS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjICoqUmFuY2FuZ2FuIEZha3RvcmlhbCAyXF5rKioNCg0KUmFuY2FuZ2FuIEZha3RvcmlhbCAyXF5rIGFkYWxhaCByYW5jYW5nYW4gZmFrdG9yaWFsIGtodXN1cyB5YW5nIG1lbGliYXRrYW4gYGtgIGZha3RvciwgbWFzaW5nLW1hc2luZyBoYW55YSBtZW1pbGlraSAyIGxldmVsOg0KDQotICAgTGV2ZWwgUmVuZGFoOiBgLWAgYXRhdSBgLTFgDQotICAgTGV2ZWwgVGluZ2dpOiBgK2AgYXRhdSBgKzFgDQoNCkthcmFrdGVyaXN0aWs6DQoNClwqIEp1bWxhaCB0b3RhbCBrb21iaW5hc2kgcGVybGFrdWFuIGFkYWxhaCBgMl5rYC4NCg0KXCogRWZpc2llbiB1bnR1ayBla3NwbG9yYXNpIGF3YWwgcGVuZWxpdGlhbiAoc2NyZWVuaW5nIGZha3RvciBwZW50aW5nKS4NCg0KXCogTWVuZ2FzdW1zaWthbiBodWJ1bmdhbiByZXNwb24gZGFuIGZha3RvciBhZGFsYWggbGluaWVyIGRhbGFtIHJlbnRhbmcgbGV2ZWwgeWFuZyBkaXBpbGloLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KKipTdHJ1a3R1ciBkYW4gTm90YXNpIEtvbWJpbmFzaSBQZXJsYWt1YW4qKg0KDQpLb21iaW5hc2kgcGVybGFrdWFuIHNlcmluZyBkaXR1bGlzIG1lbmdndW5ha2FuIG5vdGFzaSBodXJ1ZiBrZWNpbC5cDQpLZWJlcmFkYWFuIHNlYnVhaCBodXJ1ZiBtZW51bmp1a2thbiBiYWh3YSBmYWt0b3IgdGVyc2VidXQgYmVyYWRhIHBhZGEgbGV2ZWwgdGluZ2dpLg0KDQotICAgVW50dWsgYGsgPSAyYCAoRmFrdG9yIEEgZGFuIEIpOg0KDQp8IEtvbWJpbmFzaSB8IEtldGVyYW5nYW4gICAgICAgICB8DQp8Oi0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICgxKSAgICAgICB8IEEgcmVuZGFoLCBCIHJlbmRhaCB8DQp8IGEgICAgICAgICB8IEEgdGluZ2dpLCBCIHJlbmRhaCB8DQp8IGIgICAgICAgICB8IEEgcmVuZGFoLCBCIHRpbmdnaSB8DQp8IGFiICAgICAgICB8IEEgdGluZ2dpLCBCIHRpbmdnaSB8DQoNCi0gICBVbnR1ayBgayA9IDNgIChBLCBCLCBDKTpcDQogICAgS29tYmluYXNpID0gKDEpLCBhLCBiLCBhYiwgYywgYWMsIGJjLCBhYmMNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCioqTW9kZWwgTGluaWVyIGRhbiBFZmVrIHlhbmcgRGllc3RpbWFzaSoqDQoNCioqTW9kZWwgbGluaWVyIHVudHVrIGZha3RvcmlhbCAywrI6KioNCg0KJCQNCllfe2lqa30gPSDOvCArIM6xX2kgKyDOsl9qICsgKM6xzrIpX3tpan0gKyDOtV97aWprfQ0KJCQNCg0KS2V0ZXJhbmdhbjogLSBgWV9pamtgID0gUmVzcG9uIHBlbmdhbWF0YW5cDQotIGDOvGAgPSBSYXRhYW4gdW11bVwNCi0gYM6xX2lgLCBgzrJfamAgPSBQZW5nYXJ1aCB1dGFtYSBmYWt0b3IgQSBkYW4gQlwNCi0gYCjOsc6yKV9pamAgPSBQZW5nYXJ1aCBpbnRlcmFrc2kgQSBkYW4gQlwNCi0gYM61X2lqa2AgPSBHYWxhdCBwZXJjb2JhYW4NCg0KKipFZmVrIGRpaGl0dW5nIHNlYmFnYWk6KioNCg0KJCQNCkVmZWsgPSBcYmFye1l9X3sodGluZ2dpKX0gLSBcYmFye1l9X3socmVuZGFoKX0NCiQkDQoNCioqQ29udG9oIEZha3RvcmlhbCAywrI6KioNCg0KLSAgIEVmZWsgdXRhbWEgQVwNCiAgICAkJA0KICAgIEEgPSBcZnJhY3soYSAtICgxKSkgKyAoYWIgLSBiKX17Mn0NCiAgICAkJA0KLSAgIEVmZWsgdXRhbWEgQlwNCiAgICAkJA0KICAgIEIgPSBcZnJhY3soYiAtICgxKSkgKyAoYWIgLSBhKX17Mn0NCiAgICAkJA0KLSAgIEVmZWsgaW50ZXJha3NpIEFCXA0KICAgICQkDQogICAgQUIgPSBcZnJhY3soYWIgLSBiKSAtIChhIC0gKDEpKX17Mn0gPSBcZnJhY3thYiAtIGEgLSBiICsgKDEpfXsyfQ0KICAgICQkDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqKlRhYmVsIEtvbnRyYXMgZGFuIE1hdHJpa3MgRGVzYWluKioNCg0KKipDb250b2ggdW50dWsgRmFrdG9yaWFsIDLCszoqKg0KDQp8IEtvbWJpbmFzaSB8ICBJICB8ICBBICB8ICBCICB8IEFCICB8ICBDICB8IEFDICB8IEJDICB8IEFCQyB8IFJlc3BvbiAoWSkgfA0KfDotLS0tLS0tLS0tfDotLS06fDotLS06fDotLS06fDotLS06fDotLS06fDotLS06fDotLS06fDotLS06fDotLS0tLS0tLS0tOnwNCnwgKDEpICAgICAgIHwgXCsgIHwgXC0gIHwgXC0gIHwgXCsgIHwgXC0gIHwgXCsgIHwgXCsgIHwgXC0gIHwgICAgIHnigoEgICAgIHwNCnwgYSAgICAgICAgIHwgXCsgIHwgXCsgIHwgXC0gIHwgXC0gIHwgXC0gIHwgXC0gIHwgXCsgIHwgXCsgIHwgICAgIHnigoIgICAgIHwNCnwgYiAgICAgICAgIHwgXCsgIHwgXC0gIHwgXCsgIHwgXC0gIHwgXC0gIHwgXCsgIHwgXC0gIHwgXCsgIHwgICAgIHnigoMgICAgIHwNCnwgYWIgICAgICAgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXC0gIHwgXC0gIHwgXC0gIHwgXC0gIHwgICAgIHnigoQgICAgIHwNCnwgYyAgICAgICAgIHwgXCsgIHwgXC0gIHwgXC0gIHwgXCsgIHwgXCsgIHwgXC0gIHwgXC0gIHwgXCsgIHwgICAgIHnigoUgICAgIHwNCnwgYWMgICAgICAgIHwgXCsgIHwgXCsgIHwgXC0gIHwgXC0gIHwgXCsgIHwgXCsgIHwgXC0gIHwgXC0gIHwgICAgIHnigoYgICAgIHwNCnwgYmMgICAgICAgIHwgXCsgIHwgXC0gIHwgXCsgIHwgXC0gIHwgXCsgIHwgXC0gIHwgXCsgIHwgXC0gIHwgICAgIHnigocgICAgIHwNCnwgYWJjICAgICAgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXCsgIHwgXCsgIHwgICAgIHnigoggICAgIHwNCg0KKipLZXRlcmFuZ2FuOioqDQoNClwqIEtvbG9tIGBJYCBhZGFsYWggaWRlbnRpdGFzLg0KDQpcKiBUYW5kYSBgK2AgZGFuIGAtYCBkaWd1bmFrYW4gdW50dWsgbWVuZ2hpdHVuZyBrb250cmFzLg0KDQpcKiBLb250cmFzIGVmZWsgPSDOoyhUYW5kYSDDlyBSZXNwb24pDQoNClwqIEVmZWsgPSBLb250cmFzIC8gKDJcXihrLTEpKQ0KDQpcKiBTUyAoU3VtIG9mIFNxdWFyZXMpID0gKEtvbnRyYXPCsikgLyAobiDDlyAyXF5rKQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KKipBbmFsaXNpcyBEYXRhIChBTk9WQSBkYW4gUGxvdCkqKg0KDQpMYW5na2FoLWxhbmdrYWggYW5hbGlzaXM6DQoNCjEuICBIaXR1bmcgZWZlayB1dGFtYSBkYW4gaW50ZXJha3NpLg0KMi4gIExha3VrYW4gQU5PVkEgdW50dWsgbWVuZ3VqaSBzaWduaWZpa2Fuc2kgZWZlay4NCjMuICBCdWF0IHBsb3QgZWZlayBub3JtYWwgYXRhdSBoYWxmLW5vcm1hbCB1bnR1ayBpZGVudGlmaWthc2kgdmlzdWFsIGVmZWsgc2lnbmlmaWthbi4NCjQuICBCdWF0IHBsb3QgaW50ZXJha3NpIHVudHVrIG1lbGloYXQgYXBha2FoIGdhcmlzIHNlamFqYXIgKGludGVyYWtzaSBsZW1haCkgYXRhdSBiZXJzaWxhbmdhbiAoaW50ZXJha3NpIGt1YXQpLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyMgKipSYW5jYW5nYW4gRmFrdG9yaWFsIDJcXntrLXB9IChGcmFjdGlvbmFsIEZhY3RvcmlhbCBEZXNpZ24pKioNCg0KUmFuY2FuZ2FuIEZha3RvcmlhbCAyXF57ay1wfSBhZGFsYWggcGVjYWhhbiAoZnJha3NpKSBkYXJpIHJhbmNhbmdhbiBmYWt0b3JpYWwgbGVuZ2thcCAyXF5rLg0KDQpBbGFzYW4gcGVuZ2d1bmFhbjoNCg0KXCogSmlrYSBga2AgYmVzYXIg4oaSIGp1bWxhaCBydW4gYDJea2AgdGVybGFsdSBiYW55YWsuDQoNClwqIFN1bWJlciBkYXlhIHRlcmJhdGFzICh3YWt0dSwgYmlheWEsIHRlbmFnYSkuDQoNClwqIEJlcmRhc2Fya2FuIHByaW5zaXAgc3BhcnNpdHkgb2YgZWZmZWN0cywgaGFueWEgc2VkaWtpdCBlZmVrIHlhbmcgc2lnbmlmaWthbi4NCg0KS2FyYWt0ZXJpc3RpazoNCg0KXCogSnVtbGFoIHJ1biA9IGAyXntrLXB9YA0KDQpcKiBNaXNhbDogMlxeNyA9IDEyOCBydW4g4oaSIDJcXns3LTJ9ID0gMzIgcnVuICjCvCBmcmFrc2kpDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqKktvbnNlcCBSZXNvbHVzaSBEZXNhaW4qKg0KDQpSZXNvbHVzaSA9IHVrdXJhbiB0aW5na2F0IGFsaWFzaW5nIGFudGFyIGVmZWsuDQoNCnwgUmVzb2x1c2kgfCBDaXJpIHwgQ29udG9oIHwgS2V0ZXJhbmdhbiB8DQp8Oi0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKklJSSoqIHwgRWZlayB1dGFtYSBhbGlhcyBkZW5nYW4gaW50ZXJha3NpIDItZmFrdG9yIHwgQSA9IEJDIHwgU2NyZWVuaW5nIGZha3RvciAoaW50ZXJha3NpIGRpYWJhaWthbikgfA0KfCAqKklWKiogfCBFZmVrIHV0YW1hIOKJoCBpbnRlcmFrc2kgMi1mYWt0b3IsIHRhcGkgaW50ZXJha3NpIDItZmFrdG9yIHNhbGluZyBhbGlhcyB8IEEgPSBCQ0QgfCBGb2t1cyBwYWRhIGVmZWsgdXRhbWEgfA0KfCAqKlYqKiB8IEVmZWsgdXRhbWEg4omgIGludGVyYWtzaSDiiaQzLWZha3RvciwgaW50ZXJha3NpIDItZmFrdG9yIOKJoCBsYWlubnlhIHwgQSA9IEJDREUgfCBEYXBhdCBlc3RpbWFzaSBpbnRlcmFrc2kgZHVhIGZha3RvciB8DQoNCioqUGVtaWxpaGFuOioqXA0KR3VuYWthbiByZXNvbHVzaSB0ZXJ0aW5nZ2kgeWFuZyBtYXNpaCBlZmlzaWVuIGRlbmdhbiBzdW1iZXIgZGF5YSB5YW5nIGFkYS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCioqUGVtYmVudHVrYW4gRGVzYWluIEZyYWtzaSAoR2VuZXJhdG9yICYgRGVmaW5pbmcgUmVsYXRpb24pKioNCg0KTGFuZ2thaDoNCg0KMS4gICoqRGVzYWluIGRhc2FyOioqIEd1bmFrYW4gMlxee2stcH0gcGVudWggKG1pc2FsIEEsIEIsIEMpLg0KMi4gICoqUGlsaWggZ2VuZXJhdG9yOioqXA0KICAgIE1pc2FsOiBgRCA9IEFCYCwgYEUgPSBBQ2ANCjMuICAqKkRlZmluaW5nIHJlbGF0aW9uOioqDQogICAgLSAgIERhcmkgYEQgPSBBQmAg4oaSIGBJID0gQUJEYA0KICAgIC0gICBEYXJpIGBFID0gQUNgIOKGkiBgSSA9IEFDRWANCiAgICAtICAgS2FsaWthbiDihpIgYEkgPSBBQkQgPSBBQ0UgPSBCQ0RFYA0KNC4gICoqU3RydWt0dXIgYWxpYXM6KioNCg0KfCBFZmVrIHwgQWxpYXMgICAgICAgICAgIHwNCnw6LS0tLS18Oi0tLS0tLS0tLS0tLS0tLS18DQp8IEEgICAgfCBCRCA9IENFID0gQUJDREUgfA0KfCBCICAgIHwgQUQgPSBDREUgPSBBQkNFIHwNCnwgQyAgICB8IEFFID0gQkRFID0gQUJDRCB8DQp8IEQgICAgfCBBQiA9IEJDRSA9IEFDREUgfA0KfCBFICAgIHwgQUMgPSBCQ0QgPSBBQkRFIHwNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCioqQW5hbGlzaXMgRGF0YSBwYWRhIERlc2FpbiBGcmFrc2kqKg0KDQpBbmFsaXNpcyBzYW1hIHNlcGVydGkgZGVzYWluIHBlbnVoLCBuYW11biBwZXJsdSBtZW1wZXJoYXRpa2FuIGFsaWFzaW5nLg0KDQoxLiAgSGl0dW5nIGVmZWsgKGJlcmlzaSBnYWJ1bmdhbiBiZWJlcmFwYSBlZmVrIGFsaWFzKS5cDQoyLiAgR3VuYWthbiBwbG90IGhhbGYtbm9ybWFsIHVudHVrIGRldGVrc2kgZWZlayBzaWduaWZpa2FuLlwNCjMuICBKaWthIGVmZWsgc3VsaXQgZGliZWRha2FuLCBsYWt1a2FuIGZvbGRvdmVyIGRlc2lnbiAoamFsYW5rYW4gZnJha3NpIHBlbGVuZ2thcCkgdW50dWsgbWVtZWNhaGthbiBhbGlhcy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjICoqUmluZ2thc2FuIFBlcmJhbmRpbmdhbioqDQoNCnwgQXNwZWsgfCBGYWt0b3JpYWwgMlxeayAoUGVudWgpIHwgRmFrdG9yaWFsIDJcXntrLXB9IChGcmFrc2kpIHwNCnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgKipKdW1sYWggUnVuKiogfCBgMl5rYCAoYmFueWFrKSB8IGAyXntrLXB9YCAobGViaWggc2VkaWtpdCkgfA0KfCAqKlR1anVhbioqIHwgRXN0aW1hc2kgc2VtdWEgZWZlayAmIGludGVyYWtzaSB8IFNjcmVlbmluZyBmYWt0b3IgcGVudGluZyB8DQp8ICoqSW5mb3JtYXNpKiogfCBMZW5na2FwIHwgU2ViYWdpYW4gKGFsaWFzaW5nKSB8DQp8ICoqQmlheWEgJiBXYWt0dSoqIHwgVGluZ2dpIHwgUmVuZGFoIHwNCnwgKipLb21wbGVrc2l0YXMgQW5hbGlzaXMqKiB8IExlYmloIG11ZGFoIHwgUGVybHUgcGVydGltYmFuZ2FuIGFsaWFzaW5nIHwNCnwgKipBcGxpa2FzaSBJZGVhbCoqIHwgRmFrdG9yIHNlZGlraXQgKFw8NSkgfCBGYWt0b3IgYmFueWFrIChcPjQpIHwNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjICoqU1RVREkgS0FTVVM6IE9QVElNQVNJIFBST0RVS1NJIElLQU4gTklMQSoqDQoNCiMjIyAqKlJBTkNBTkdBTiBGQUtUT1JJQUwgMsKyKioNCg0KKipMYXRhciBCZWxha2FuZzoqKg0KDQpNZW1wZWxhamFyaSBwZW5nYXJ1aCAqKnBha2FuKiogZGFuICoqa2VwYWRhdGFuIHRlYmFyKiogdGVyaGFkYXAgcGVydHVtYnVoYW4gaWthbiBuaWxhLg0KDQotICAgRmFrdG9yIEE6IEplbmlzIFBha2FuDQoNCiAgICAtICAgTGV2ZWwgLTE6IFBha2FuIFN0YW5kYXIgKDMwJSBwcm90ZWluKQ0KDQogICAgLSAgIExldmVsICsxOiBQYWthbiBQcmVtaXVtICg0MCUgcHJvdGVpbikNCg0KLSAgIEZha3RvciBCOiBLZXBhZGF0YW4gVGViYXINCg0KICAgIC0gICBMZXZlbCAtMTogNTAgZWtvci9twrMNCg0KICAgIC0gICBMZXZlbCArMTogMTAwIGVrb3IvbcKzDQoNCioqUmVzcG9uOioqIEJlcmF0IHJhdGEtcmF0YSBpa2FuIChncmFtKSBzZXRlbGFoIDYwIGhhcmkNCg0KYGBge3J9DQojIERhdGEgcGVyY29iYWFuDQpkYXRhXzJrMiA8LSBkYXRhLmZyYW1lKA0KICBLZXBhZGF0YW4gPSBjKC0xLCAxLCAtMSwgMSwgLTEsIDEsIC0xLCAxLCAtMSwgMSwgLTEsIDEpLA0KICBGcmVrdWVuc2lfUGFrYW4gPSBjKC0xLCAtMSwgMSwgMSwgLTEsIC0xLCAxLCAxLCAtMSwgLTEsIDEsIDEpLA0KICBCb2JvdCA9IGMoODUsIDc4LCA5MiwgODIsIDg4LCA3NiwgOTUsIDg0LCA4NywgNzksIDkwLCA4MykNCikNCg0KcHJpbnQoIkRhdGEgUGVyY29iYWFuIDJeMjoiKQ0KZGF0YV8yazINCmBgYA0KDQpgYGB7cn0NCiMgQW5hbGlzaXMgQU5PVkENCm1vZGVsXzJrMiA8LSBhb3YoQm9ib3QgfiBLZXBhZGF0YW4gKiBGcmVrdWVuc2lfUGFrYW4sIGRhdGEgPSBkYXRhXzJrMikNCnByaW50KCJBbmFsaXNpcyBBTk9WQSAyXjI6IikNCnByaW50KHN1bW1hcnkobW9kZWxfMmsyKSkNCmBgYA0KDQpgYGB7cn0NCiMgSGl0dW5nIGVmZWsgbWFudWFsDQpjYXQoIlxuUGVyaGl0dW5nYW4gRWZlayBNYW51YWwgMl4yOlxuIikNCiMgUmF0YWFuIHVudHVrIHNldGlhcCBrb21iaW5hc2kNCm1lYW5fYTBiMCA8LSBtZWFuKGRhdGFfMmsyJEJvYm90W2RhdGFfMmsyJEtlcGFkYXRhbiA9PSAtMSAmIGRhdGFfMmsyJEZyZWt1ZW5zaV9QYWthbiA9PSAtMV0pICMgKDEpDQptZWFuX2ExYjAgPC0gbWVhbihkYXRhXzJrMiRCb2JvdFtkYXRhXzJrMiRLZXBhZGF0YW4gPT0gMSAmIGRhdGFfMmsyJEZyZWt1ZW5zaV9QYWthbiA9PSAtMV0pICAjIGENCm1lYW5fYTBiMSA8LSBtZWFuKGRhdGFfMmsyJEJvYm90W2RhdGFfMmsyJEtlcGFkYXRhbiA9PSAtMSAmIGRhdGFfMmsyJEZyZWt1ZW5zaV9QYWthbiA9PSAxXSkgICMgYg0KbWVhbl9hMWIxIDwtIG1lYW4oZGF0YV8yazIkQm9ib3RbZGF0YV8yazIkS2VwYWRhdGFuID09IDEgJiBkYXRhXzJrMiRGcmVrdWVuc2lfUGFrYW4gPT0gMV0pICAgIyBhYg0KDQojIEVmZWsgdXRhbWENCmVmZWtfQSA8LSAobWVhbl9hMWIwICsgbWVhbl9hMWIxKS8yIC0gKG1lYW5fYTBiMCArIG1lYW5fYTBiMSkvMg0KZWZla19CIDwtIChtZWFuX2EwYjEgKyBtZWFuX2ExYjEpLzIgLSAobWVhbl9hMGIwICsgbWVhbl9hMWIwKS8yDQoNCiMgRWZlayBpbnRlcmFrc2kNCmVmZWtfQUIgPC0gKG1lYW5fYTFiMSAtIG1lYW5fYTFiMCkgLSAobWVhbl9hMGIxIC0gbWVhbl9hMGIwKQ0KDQpjYXQoIkVmZWsgVXRhbWEgS2VwYWRhdGFuIChBKToiLCBlZmVrX0EsICJcbiIpDQpjYXQoIkVmZWsgVXRhbWEgRnJla3VlbnNpIFBha2FuIChCKToiLCBlZmVrX0IsICJcbiIpDQpjYXQoIkVmZWsgSW50ZXJha3NpIEFCOiIsIGVmZWtfQUIsICJcbiIpDQpgYGANCg0KYGBge3J9DQojIFBsb3QgaW50ZXJha3NpDQppbnRlcmFjdGlvbi5wbG90KGRhdGFfMmsyJEtlcGFkYXRhbiwgZGF0YV8yazIkRnJla3VlbnNpX1Bha2FuLCBkYXRhXzJrMiRCb2JvdCwNCiAgICAgICAgICAgICAgICAgeGxhYiA9ICJLZXBhZGF0YW4gVGViYXIiLCB5bGFiID0gIkJvYm90IFJhdGEtcmF0YSAoZ3JhbSkiLA0KICAgICAgICAgICAgICAgICB0cmFjZS5sYWJlbCA9ICJGcmVrdWVuc2kgUGFrYW4iLCBjb2wgPSBjKCJibHVlIiwgInJlZCIpKQ0KDQojIFBsb3QgZWZlaw0KcGFyKG1mcm93ID0gYygxLCAyKSkNCnBsb3QoZGF0YV8yazIkS2VwYWRhdGFuLCBkYXRhXzJrMiRCb2JvdCwgeGxhYiA9ICJLZXBhZGF0YW4gVGViYXIiLCB5bGFiID0gIkJvYm90IChncmFtKSIsIG1haW4gPSAiRWZlayBLZXBhZGF0YW4iKQ0KcGxvdChkYXRhXzJrMiRGcmVrdWVuc2lfUGFrYW4sIGRhdGFfMmsyJEJvYm90LCB4bGFiID0gIkZyZWt1ZW5zaSBQYWthbiIsIHlsYWIgPSAiQm9ib3QgKGdyYW0pIiwgbWFpbiA9ICJFZmVrIEZyZWt1ZW5zaSBQYWthbiIpDQpgYGANCg0KQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMgQU5PVkEgZGFuIHBlcmhpdHVuZ2FuIGVmZWsgbWFudWFsIGRhcmkgZGVzYWluIGZha3RvcmlhbCAywrIsIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhIGtlZHVhIGZha3RvciB1dGFtYSwgeWFpdHUgS2VwYWRhdGFuIFRlYmFyIChBKSBkYW4gRnJla3VlbnNpIFBha2FuIChCKSwgbWVtaWxpa2kgcGVuZ2FydWggeWFuZyBzaWduaWZpa2FuIHRlcmhhZGFwIHJlc3BvbiB5YW5nIGRpYW1hdGksIHNlbWVudGFyYSBpbnRlcmFrc2kgYW50YXJhIGtlZHVhbnlhIHRpZGFrIHNpZ25pZmlrYW4uIE5pbGFpLXAgdW50dWsgS2VwYWRhdGFuICgxLjYyZS0wNSkgZGFuIEZyZWt1ZW5zaSBQYWthbiAoMC4wMDA1NzQpIGphdWggZGkgYmF3YWggdGluZ2thdCBzaWduaWZpa2Fuc2kgMC4wNSwgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFzaSBkYWxhbSBrZWR1YSBmYWt0b3IgaW5pIHNlY2FyYSBzdGF0aXN0aWsgYmVycGVuZ2FydWggbnlhdGEgdGVyaGFkYXAgaGFzaWwuIEVmZWsgdXRhbWEgS2VwYWRhdGFuIHNlYmVzYXIgLTkuMTcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBlbmluZ2thdGFuIGxldmVsIEtlcGFkYXRhbiBkYXJpIHJlbmRhaCBrZSB0aW5nZ2kganVzdHJ1IG1lbnVydW5rYW4gcmVzcG9uIHJhdGEtcmF0YSwgc2VkYW5na2FuIGVmZWsgdXRhbWEgRnJla3VlbnNpIFBha2FuIHNlYmVzYXIgNS41IG1lbnVuanVra2FuIGJhaHdhIHBlbmluZ2thdGFuIGZyZWt1ZW5zaSBwYWthbiBtZW1pbGlraSBkYW1wYWsgcG9zaXRpZi4gRGkgc2lzaSBsYWluLCBlZmVrIGludGVyYWtzaSBBQiB5YW5nIHNhbmdhdCBrZWNpbCAoLTAuMzMpIGRhbiB0aWRhayBzaWduaWZpa2FuIChuaWxhaS1wIDAuODcyKSBtZW5nb25maXJtYXNpIGJhaHdhIHBlbmdhcnVoIEtlcGFkYXRhbiBkYW4gRnJla3VlbnNpIFBha2FuIHRlcmhhZGFwIHJlc3BvbiBiZXJzaWZhdCBhZGl0aWYsIGFydGlueWEgcGVuZ2FydWggc2F0dSBmYWt0b3IgdGlkYWsgYmVyZ2FudHVuZyBwYWRhIGxldmVsIGZha3RvciBsYWlubnlhLg0KDQojIyMgKipSQU5DQU5HQU4gRkFLVE9SSUFMIDLCsyoqDQoNCioqU3R1ZGkgS2FzdXM6KipcDQpQZW5lbGl0aSBtZW5hbWJhaGthbiBmYWt0b3IgKipKZW5pcyBQYWthbiAoQykqKiB1bnR1ayBvcHRpbWlzYXNpIGxlYmloIGxhbmp1dC4NCg0KLSAgICoqRmFrdG9yIEEgKEtlcGFkYXRhbiBUZWJhcik6KiogNTAgdnMgMTAwIGVrb3IvbcKzDQoNCi0gICAqKkZha3RvciBCIChGcmVrdWVuc2kgUGFrYW4pOioqIDIgdnMgNCBrYWxpL2hhcmkNCg0KLSAgICoqRmFrdG9yIEMgKEplbmlzIFBha2FuKToqKg0KDQogICAgLSAgIExldmVsIHJlbmRhaCAoLTEpOiBQYWthbiBrb21lcnNpYWwgc3RhbmRhcg0KDQogICAgLSAgIExldmVsIHRpbmdnaSAoKzEpOiBQYWthbiBwcmVtaXVtIGZvcnRpZmlrYXNpDQoNCmBgYHtyfQ0KIyBJbnN0YWwgZGFuIG11YXQgcGFrZXQNCiMgaW5zdGFsbC5wYWNrYWdlcygiRG9FLmJhc2UiKQ0KbGlicmFyeShEb0UuYmFzZSkNCg0KIyBTZXQgc2VlZCBhZ2FyIGhhc2lsIHJlcHJvZHVjaWJsZQ0Kc2V0LnNlZWQoMTIzKQ0KDQojIEJ1YXQgZGVzYWluIGZha3RvcmlhbCAyXjMgZGVuZ2FuIDMgZmFrdG9yIChtYXNpbmctbWFzaW5nIDIgbGV2ZWwpDQpkZXNhaW5fMmszIDwtIGZhYy5kZXNpZ24oDQogIG5mYWN0b3JzID0gMywNCiAgbmxldmVscyA9IDIsDQogIHJlcGxpY2F0aW9ucyA9IDIsDQogIHJhbmRvbWl6ZSA9IEZBTFNFLA0KICBmYWN0b3IubmFtZXMgPSBsaXN0KA0KICAgIEtlcGFkYXRhbiAgID0gYygiUmVuZGFoIiwgIlRpbmdnaSIpLA0KICAgIEZyZWt1ZW5zaSAgID0gYygiSmFyYW5nIiwgIlNlcmluZyIpLA0KICAgIEplbmlzX1Bha2FuID0gYygiQSIsICJCIikNCiAgKQ0KKQ0KDQojIERhdGEgcmVzcG9uIChtaXNhbDogYm9ib3QgaWthbiBkYWxhbSBncmFtKQ0KcmVzcG9uXzJrMyA8LSBjKDg1LCA5MiwgNzgsIDgyLCA5NSwgODgsIDc2LCA4NCwNCiAgICAgICAgICAgICAgICA4NywgOTAsIDc5LCA4MywgOTMsIDg5LCA3NywgODEpDQoNCiMgVGFtYmFoa2FuIHJlc3BvbiBrZSBkZXNhaW4NCmRlc2Fpbl8yazMgPC0gYWRkLnJlc3BvbnNlKGRlc2Fpbl8yazMsIHJlc3Bvbl8yazMpDQoNCiMgVGFtcGlsa2FuIGhhc2lsIGRlc2Fpbg0KcHJpbnQoIkRlc2FpbiBQZXJjb2JhYW4gMl4zOiIpDQpkZXNhaW5fMmszDQpgYGANCg0KYGBge3J9DQojIEFuYWxpc2lzIGRlbmdhbiBtb2RlbCBsaW5lYXINCm1vZGVsXzJrMyA8LSBsbShyZXNwb25fMmszIH4gS2VwYWRhdGFuICogRnJla3VlbnNpICogSmVuaXNfUGFrYW4sIGRhdGEgPSBkZXNhaW5fMmszKQ0KcHJpbnQoIkFuYWxpc2lzIE1vZGVsIDJeMzoiKQ0KcHJpbnQoc3VtbWFyeShtb2RlbF8yazMpKQ0KDQojIEFOT1ZBDQpwcmludCgiQU5PVkEgMl4zOiIpDQpwcmludChhbm92YShtb2RlbF8yazMpKQ0KYGBgDQoNCmBgYHtyfQ0KDQojIFBsb3QgZWZlaw0KcGFyKG1mcm93ID0gYygyLCAyKSkNCnBsb3QoZGVzYWluXzJrMyRLZXBhZGF0YW4sIHJlc3Bvbl8yazMsIG1haW4gPSAiRWZlayBLZXBhZGF0YW4iLCANCiAgICAgeGxhYiA9ICJLZXBhZGF0YW4iLCB5bGFiID0gIkJvYm90IChncmFtKSIpDQpwbG90KGRlc2Fpbl8yazMkRnJla3VlbnNpLCByZXNwb25fMmszLCBtYWluID0gIkVmZWsgRnJla3VlbnNpIFBha2FuIiwNCiAgICAgeGxhYiA9ICJGcmVrdWVuc2kiLCB5bGFiID0gIkJvYm90IChncmFtKSIpDQpwbG90KGRlc2Fpbl8yazMkSmVuaXNfUGFrYW4sIHJlc3Bvbl8yazMsIG1haW4gPSAiRWZlayBKZW5pcyBQYWthbiIsDQogICAgIHhsYWIgPSAiSmVuaXMgUGFrYW4iLCB5bGFiID0gIkJvYm90IChncmFtKSIpDQoNCiMgUGxvdCBpbnRlcmFrc2kgdGlnYSBhcmFoDQpsaWJyYXJ5KGdwbG90cykNCnBsb3RtZWFucyhyZXNwb25fMmszIH4gaW50ZXJhY3Rpb24oS2VwYWRhdGFuLCBGcmVrdWVuc2ksIEplbmlzX1Bha2FuKSwgDQogICAgICAgICAgZGF0YSA9IGRlc2Fpbl8yazMsIG1haW4gPSAiUGxvdCBSYXRhYW4gS29tYmluYXNpIFBlcmxha3VhbiIpDQoNCiMgTm9ybWFsIHBsb3Qgb2YgZWZmZWN0cw0KZWZmZWN0c18yazMgPC0gbW9kZWxfMmszJGVmZmVjdHMNCnFxbm9ybShlZmZlY3RzXzJrMywgbWFpbiA9ICJOb3JtYWwgUGxvdCBvZiBFZmZlY3RzIikNCnFxbGluZShlZmZlY3RzXzJrMykNCmBgYA0KDQpCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcyBtb2RlbCBmYWt0b3JpYWwgMsKzLCBtb2RlbCByZWdyZXNpIHlhbmcgdGVyYmVudHVrIG1lbWlsaWtpIGtlbWFtcHVhbiBwZW5qZWxhcyB5YW5nIHNhbmdhdCBiYWlrIGRlbmdhbiBSLXNxdWFyZWQgc2ViZXNhciA5Ny42MyUsIG1lbnVuanVra2FuIGJhaHdhIGhhbXBpciBzZWx1cnVoIHZhcmlhc2kgcmVzcG9uIGRhcGF0IGRpamVsYXNrYW4gb2xlaCBrZXRpZ2EgZmFrdG9yIGRhbiBpbnRlcmFrc2lueWEuIEhhc2lsIEFOT1ZBIG1lbmd1bmdrYXBrYW4gYmFod2EgZmFrdG9yIEZyZWt1ZW5zaSBQYWthbiBtZXJ1cGFrYW4gdmFyaWFiZWwgcGFsaW5nIGRvbWluYW4gKEY9MjQ5LjY0LCBwPTIuNTc0ZS0wNyksIGRpaWt1dGkgb2xlaCBpbnRlcmFrc2kgdGlnYSBmYWt0b3IgYW50YXJhIEtlcGFkYXRhbiwgRnJla3VlbnNpLCBkYW4gSmVuaXMgUGFrYW4gKEY9MjUuMDAsIHA9MC4wMDEwNTMpLiBTZWNhcmEgaW5kaXZpZHVhbCwgS2VwYWRhdGFuIGRhbiBGcmVrdWVuc2kgUGFrYW4gbWVudW5qdWtrYW4gcGVuZ2FydWggc2lnbmlmaWthbiwgc2VkYW5na2FuIEplbmlzIFBha2FuIHNlbmRpcmkgdGlkYWsgc2lnbmlmaWthbiAocD0wLjE5OSkuIE5hbXVuIHlhbmcgbWVuYXJpaywgc2VtdWEgaW50ZXJha3NpIGR1YSBmYWt0b3IgZGFuIHRpZ2EgZmFrdG9yIHRlcmJ1a3RpIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3RpaywgbWVudW5qdWtrYW4gYmFod2EgcGVuZ2FydWggbWFzaW5nLW1hc2luZyBmYWt0b3IgdGVyaGFkYXAgcmVzcG9uIHNhbmdhdCBiZXJnYW50dW5nIHBhZGEgbGV2ZWwgZmFrdG9yIGxhaW5ueWEuIEhhbCBpbmkgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIGtvbWJpbmFzaSBzcGVzaWZpayBkYXJpIGtldGlnYSBmYWt0b3IgdGVyc2VidXQgbWVuZ2hhc2lsa2FuIGVmZWsgc2luZXJnaXMgeWFuZyBrb21wbGVrcyBkYWxhbSBtZW1wZW5nYXJ1aGkgdmFyaWFiZWwgcmVzcG9uLg0KDQojIyBMYXRpaGFuIA0KDQoqKlNPQUwgMSAoQmlkYW5nOiBQZXJpa2FuYW4pKioNCg0KU2VvcmFuZyBwZW5lbGl0aSBwZXJpa2FuYW4gaW5naW4gbWVtcGVsYWphcmkgcGVuZ2FydWggZHVhIGZha3RvciB0ZXJoYWRhcCBwZXJ0dW1idWhhbiBpa2FuIGxlbGUuIEZha3RvciBBIGFkYWxhaCBqZW5pcyBwYWthbiAoQTE6IHBha2FuIGtvbWVyc2lhbCwgQTI6IHBha2FuIGZlcm1lbnRhc2kpIGRhbiBmYWt0b3IgQiBhZGFsYWgga2VwYWRhdGFuIHRlYmFyIChCMTogNTAgZWtvci9twrMsIEIyOiAxMDAgZWtvci9twrMpLiBQZXJjb2JhYW4gZGlsYWt1a2FuIGRlbmdhbiAzIHJlcGxpa2FzaS4gUmVzcG9uIHlhbmcgZGl1a3VyIGFkYWxhaCBwZXJ0YW1iYWhhbiBiZXJhdCBiYWRhbiAoZ3JhbSkgc2V0ZWxhaCA2MCBoYXJpLg0KDQphKSAgQmVyYXBhIGJhbnlhayBrb21iaW5hc2kgcGVybGFrdWFuIHlhbmcgaGFydXMgZGl1amk/DQpiKSAgQmVyYXBhIHRvdGFsIHVuaXQgcGVyY29iYWFuIHlhbmcgZGlwZXJsdWthbj8NCmMpICBTZWJ1dGthbiBzZW11YSBrb21iaW5hc2kgcGVybGFrdWFuIHlhbmcgbXVuZ2tpbiENCmQpICBKZWxhc2thbiBhcGEgeWFuZyBkaW1ha3N1ZCBkZW5nYW4gaW50ZXJha3NpIGFudGFyYSBqZW5pcyBwYWthbiBkYW4ga2VwYWRhdGFuIHRlYmFyIGRhbGFtIGtvbnRla3MgaW5pIQ0KDQoqKlNPQUwgMiAoQmlkYW5nOiBQZXJ0YW5pYW4pKioNCg0KRGFsYW0gcGVuZWxpdGlhbiBwZW11bGlhYW4gdGFuYW1hbiBwYWRpLCBzZW9yYW5nIGFobGkgcGVydGFuaWFuIG1lbmVsaXRpIHBlbmdhcnVoIGRvc2lzIHB1cHVrIG5pdHJvZ2VuIChOMTogNTAga2cvaGEsIE4yOiAxMDAga2cvaGEpIGRhbiB2YXJpZXRhcyBwYWRpIChWMTogSVI2NCwgVjI6IENpaGVyYW5nKSB0ZXJoYWRhcCBoYXNpbCBnYWJhaC4gUGVyY29iYWFuIG1lbmdndW5ha2FuIHJhbmNhbmdhbiBmYWt0b3JpYWwgMsKyIGRlbmdhbiA0IHJlcGxpa2FzaS4NCg0KYSkgIEJ1YXRsYWggdGFiZWwga29udHJhcyB1bnR1ayByYW5jYW5nYW4gaW5pIQ0KYikgIFR1bGlza2FuIG1vZGVsIGxpbmllciB5YW5nIHNlc3VhaSB1bnR1ayBhbmFsaXNpcyBkYXRhIQ0KYykgIEJhZ2FpbWFuYSBjYXJhIG1lbmdoaXR1bmcgZWZlayB1dGFtYSBwdXB1ayBuaXRyb2dlbj8NCmQpICBKaWthIHRlcmphZGkgaW50ZXJha3NpIHlhbmcgc2lnbmlmaWthbiwgYXBhIGltcGxpa2FzaW55YSBiYWdpIHJla29tZW5kYXNpIHBlbXVwdWthbj8NCg0KKipTT0FMIDMgKEJpZGFuZzogTGluZ2t1bmdhbikqKg0KDQpQZW5lbGl0aSBsaW5na3VuZ2FuIGluZ2luIG1lbmdvcHRpbWFsa2FuIHByb3NlcyBiaW9yZW1lZGlhc2kgbG9nYW0gYmVyYXQgbWVuZ2d1bmFrYW4gYmFrdGVyaS4gRHVhIGZha3RvciB5YW5nIGRpcGVsYWphcmkgYWRhbGFoOiBGYWt0b3IgQzoga29uc2VudHJhc2kgbnV0cmllbiAoQzE6IDEgZy9MLCBDMjogMyBnL0wpIGRhbiBGYWt0b3IgRDogcEggbWVkaWEgKEQxOiA2LCBEMjogOCkuIFJlc3BvbiB5YW5nIGRpdWt1ciBhZGFsYWggcGVyc2VudGFzZSBwZW51cnVuYW4ga29uc2VudHJhc2kgbG9nYW0ga2FkbWl1bSBzZXRlbGFoIDcgaGFyaS4NCg0KRGF0YSB5YW5nIGRpcGVyb2xlaDogLSBDMUQxOiA0NSUsIDQ4JSwgNDIlIC0gQzFEMjogNjUlLCA2OCUsIDYyJSAtIEMyRDE6IDU1JSwgNTglLCA1MiUgLSBDMkQyOiA4NSUsIDgyJSwgODglDQoNCmEpICBIaXR1bmdsYWggZWZlayB1dGFtYSB1bnR1ayBtYXNpbmctbWFzaW5nIGZha3RvciENCmIpICBIaXR1bmdsYWggZWZlayBpbnRlcmFrc2kgYW50YXJhIGtvbnNlbnRyYXNpIG51dHJpZW4gZGFuIHBIIQ0KYykgIEJlcmRhc2Fya2FuIHBlcmhpdHVuZ2FuIHRlcnNlYnV0LCBmYWt0b3IgbWFuYWthaCB5YW5nIGxlYmloIGJlcnBlbmdhcnVoPw0KZCkgIEFwYSBpbnRlcnByZXRhc2kgZGFyaSB0YW5kYSAocG9zaXRpZi9uZWdhdGlmKSBwYWRhIGVmZWsgaW50ZXJha3NpPw0KDQoqKlNPQUwgNCAoQmlkYW5nOiBCaW9maXNpa2EpKioNCg0KRGFsYW0gc3R1ZGkgYmlvZmlzaWthIHRlbnRhbmcgc3RhYmlsaXRhcyBlbnppbSwgcGVuZWxpdGkgbWVtcGVsYWphcmkgcGVuZ2FydWggc3VodSBwZW55aW1wYW5hbiAoVDE6IDTCsEMsIFQyOiAyNcKwQykgZGFuIGtvbnNlbnRyYXNpIGJ1ZmZlciAoQjE6IDUwIG1NLCBCMjogMTAwIG1NKSB0ZXJoYWRhcCBha3Rpdml0YXMgZW56aW0gYW1pbGFzZSBzZXRlbGFoIDMwIGhhcmkuIFBlcmNvYmFhbiBtZW5nZ3VuYWthbiByYW5jYW5nYW4gZmFrdG9yaWFsIDLCsiBsZW5na2FwLg0KDQphKSAgTWVuZ2FwYSByYW5jYW5nYW4gZmFrdG9yaWFsIGxlYmloIGJhaWsgZGliYW5kaW5na2FuIG1lbXBlbGFqYXJpIHNhdHUgZmFrdG9yIHBhZGEgc2F0dSB3YWt0dT8NCmIpICBKZWxhc2thbiBwcmluc2lwICJzcGFyc2l0eSBvZiBlZmZlY3RzIiBkYWxhbSBrb250ZWtzIHBlbmVsaXRpYW4gaW5pIQ0KYykgIEJhZ2FpbWFuYSBjYXJhIG1lbmd1amkgc2lnbmlmaWthbnNpIHN0YXRpc3RpayBkYXJpIGVmZWstZWZlayB5YW5nIGRpaGl0dW5nPw0KZCkgIEppa2EgcGVuZWxpdGkgaW5naW4gbWVuYW1iYWggZmFrdG9yIGtldGlnYSAoamVuaXMgYnVmZmVyKSwgYmVyYXBhIGJhbnlhayBrb21iaW5hc2kgcGVybGFrdWFuIHlhbmcgZGlwZXJsdWthbj8NCg0KKipTT0FMIDUgKEJpZGFuZzogUGVyaWthbmFuICYgTGluZ2t1bmdhbikqKg0KDQpTZWJ1YWggcGVuZWxpdGlhbiBpbnRlZ3JhdGVkIG11bHRpdHJvcGhpYyBhcXVhY3VsdHVyZSAoSU1UQSkgbWVtcGVsYWphcmkgc2lzdGVtIGJ1ZGlkYXlhIHlhbmcgbWVsaWJhdGthbiBpa2FuLCBydW1wdXQgbGF1dCwgZGFuIGtlcmFuZy4gRHVhIGZha3RvciB5YW5nIGRpdGVsaXRpIGFkYWxhaDogRmFrdG9yIEU6IHJhc2lvIGJpb21hc3NhIGlrYW4tcnVtcHV0IGxhdXQgKEUxOiAxOjEsIEUyOiAxOjIpIGRhbiBGYWt0b3IgRjogc2lya3VsYXNpIGFpciAoRjE6IHN0YXRpcywgRjI6IG1lbmdhbGlyKS4gUmVzcG9uIHlhbmcgZGl1a3VyIGFkYWxhaCBlZmlzaWVuc2kgcGVtYW5mYWF0YW4gbml0cm9nZW4uDQoNCmEpICBSYW5jYW5nbGFoIG1hdHJpa3MgZGVzYWluIHVudHVrIHBlcmNvYmFhbiBpbmkhDQpiKSAgSmVsYXNrYW4gYmFnYWltYW5hIGFuYWxpc2lzIHZhcmlhbnMgKEFOT1ZBKSBkYXBhdCBkaWd1bmFrYW4gdW50dWsgbWVuZ3VqaSBwZW5nYXJ1aCBmYWt0b3IhDQpjKSAgQXBhIGtldW50dW5nYW4gbWVuZ2d1bmFrYW4gcmFuY2FuZ2FuIGZha3RvcmlhbCBkYWxhbSBzaXN0ZW0gSU1UQSB5YW5nIGtvbXBsZWtzPw0KZCkgIEppa2EgZGlwZXJvbGVoIGludGVyYWtzaSB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIHJhc2lvIGJpb21hc3NhIGRhbiBzaXJrdWxhc2kgYWlyLCBhcGEgaW1wbGlrYXNpIHByYWt0aXNueWEgYmFnaSBwZXRhbWJhaz8NCg0KKipTT0FMIDYgKEJpZGFuZzogUGVyaWthbmFuICYgTGluZ2t1bmdhbikqKg0KDQpTZW9yYW5nIHBlbmVsaXRpIHBlcmlrYW5hbiBpbmdpbiBtZW1wZWxhamFyaSBwZW5nYXJ1aCAqKnN1aHUgYWlyKiogZGFuICoqcEgqKiB0ZXJoYWRhcCBwZXJ0dW1idWhhbiB1ZGFuZyB2YW5hbWUuIEZha3RvciB5YW5nIGRpdGVsaXRpOg0KDQotICAgRmFrdG9yIEE6IFN1aHUgYWlyICgyOMKwQyB2cyAzMsKwQykNCg0KLSAgIEZha3RvciBCOiBwSCBhaXIgKDcuMCB2cyA4LjApDQoNClJlc3BvbiB5YW5nIGRpdWt1cjogQm9ib3QgdWRhbmcgKGdyYW0pIHNldGVsYWggMzAgaGFyaS4NCg0KRGF0YSB5YW5nIGRpcGVyb2xlaDoNCg0KfCBLb21iaW5hc2kgfCBVbGFuZ2FuIDEgfCBVbGFuZ2FuIDIgfCBVbGFuZ2FuIDMgfA0KfDotLS0tLS0tLS0tfDotLS0tLS0tLS0tfDotLS0tLS0tLS0tfDotLS0tLS0tLS0tfA0KfCAoMSkgICAgICAgfCAxNS4yICAgICAgfCAxNC44ICAgICAgfCAxNS41ICAgICAgfA0KfCBhICAgICAgICAgfCAxNy4zICAgICAgfCAxNi45ICAgICAgfCAxNy42ICAgICAgfA0KfCBiICAgICAgICAgfCAxNi4xICAgICAgfCAxNS43ICAgICAgfCAxNi40ICAgICAgfA0KfCBhYiAgICAgICAgfCAxOC41ICAgICAgfCAxOC4xICAgICAgfCAxOC44ICAgICAgfA0KDQoqKlBlcnRhbnlhYW46KipcDQphLiBIaXR1bmdsYWggZWZlayB1dGFtYSBmYWt0b3IgQSBkYW4gZmFrdG9yIEIhXA0KYi4gSGl0dW5nbGFoIGVmZWsgaW50ZXJha3NpIEFCIVwNCmMuIEJ1YXRsYWggdGFiZWwgQU5PVkEgbGVuZ2thcCFcDQpkLiBJbnRlcnByZXRhc2lrYW4gaGFzaWwgeWFuZyBkaXBlcm9sZWghDQo=