This document contains the R workflow for processing and analysing the raw data, and generating figures for the manuscript titled “Developmental plasticity to pond drying has carry-over costs on metamorph performance”.

GitHub Repository: The Rmarkdown file can be downloaded from the Code drop down menu (top right).

Additional Information

For readers considering to replicate the study, we consider modifying the following procedures in the methods section based on the reviewer’s comments.

Body mass: Body mass was not originally recorded due to potential stress of dry-blotting to remove excess surface water. However, one reviewer pointed out that dry-blotting tends to be quick and would not cause enough stress to alter the growth trajectories. Therefore, we recommend tadpole and metamorph body mass measurements to be included in future studies.

Corticosterone levels: The inclusion of water-borne corticosterone (metabolic hormone biomarker) measurements would have been beneficial to link hormonal responses to pond drying with developmental rate (Ruthsatz et al. 2023)

Metadata

larvae_data.csv

Name Description
ID Unique identifier of the individual.
group Coded water level treatments (T1-T5).
water_depth The water depth of the treatment in centimetres (cm).
date The date when total length was recorded in day/month/year.
days The day (since experiment started) when length was recorded.
length_cm The total length recorded in centimetres (cm).

metamorph_data.csv

Name Description
ID Unique identifier of the individual.
group Coded water level treatments (T1-T5).
water_depth The water depth of the treatment in centimetres (cm).
growth_rate_cm_d The calculated growth rate (cm/day).
larval_period_d The calculated larval period in days since hatch.
metamorph_size_cm Length at metamorphosis in centimetres (cm).
jump_dist_cm Mean jump distance in centimetres (cm).

Data

Load both tadpole and metamorph data from the GitHub repository.

# Load raw data and clean
larva_dat <- read.csv("https://raw.githubusercontent.com/nicholaswunz/tadpole-pond-drying/master/data/larvae_data.csv",
    na.strings = c("", "NA"), stringsAsFactors = TRUE)

metamorph_dat <- read.csv("https://raw.githubusercontent.com/nicholaswunz/tadpole-pond-drying/master/data/metamorph_data.csv",
    na.strings = c("", "NA"), stringsAsFactors = TRUE)

Data summary

Table S1a

Table S1. Mean ± standard deviation (s.d.) of the tadpole total length recorded by treatment group.

Group Water depth (cm) Days Total length ± s.d. (cm) n
T1 0.25 1 0.80±0.07 11
T1 0.25 8 1.07±0.20 11
T1 0.25 15 1.45±0.31 11
T1 0.25 21 1.87±0.34 11
T1 0.25 28 2.32±0.32 11
T2 0.5 1 0.83±0.08 12
T2 0.5 8 1.18±0.11 12
T2 0.5 15 1.75±0.37 12
T2 0.5 21 2.13±0.38 12
T2 0.5 28 2.47±0.34 9
T3 1 1 0.82±0.10 12
T3 1 8 1.47±0.17 12
T3 1 15 2.02±0.15 12
T3 1 21 2.60±0.19 12
T3 1 28 2.45±NA 1
T4 2 1 0.80±0.04 11
T4 2 8 1.61±0.33 11
T4 2 15 2.11±0.26 11
T4 2 21 2.68±0.38 11
T4 2 28 3.26±0.04 3
T5 2-0.25 1 0.82±0.06 12
T5 2-0.25 8 1.56±0.18 12
T5 2-0.25 15 2.18±0.36 12
T5 2-0.25 21 2.52±0.20 12
T5 2-0.25 28 2.61±NA 1

Table S1b

Table S1. Mean ± standard deviation (s.d.) of the growth rate (cm d-1), larval period (days), size at metamorph (cm), and maximum jumping distance (cm) by treatment group.

Group Water depth (cm) Growth rate (cm d\(^{-1}\)) Larval period (d) Metamorph size (cm) Jumping distance (cm) n
T1 0.25 0.05±0.02 43±6.60 0.80±0.12 7.61±1.19 11
T2 0.5 0.06±0.02 39±4.14 0.89±0.14 7.69±1.02 12
T3 1 0.08±0.01 32.5±3.79 1.13±0.15 8.82±1.03 12
T4 2 0.09±0.02 37±3.99 1.13±0.18 9.06±0.78 11
T5 2-0.25 0.08±0.01 32±2.60 1.05±0.11 8.01±0.43 12

Analysis

Run linear mixed effects model (individual ID as random effect) for total length across different water depth using the lmer function from the lme4 package. Run linear model for growth rate, larval period, metamorph size, and metamorph maximum jumping distance across different water depth treatments using lm function.

# linear mixed effects model
length_mod <- lme4::lmer(length_cm ~ days * water_depth + (1 | ID), data = larva_dat)

# linear effects model
growth_mod <- lm(growth_rate_cm_d ~ water_depth, data = metamorph_dat)
period_mod <- lm(larval_period_d ~ water_depth, data = metamorph_dat)
size_mod <- lm(metamorph_size_cm ~ water_depth, data = metamorph_dat)
jump_mod <- lm(jump_dist_cm ~ water_depth, data = metamorph_dat)

Model output

Table S2

Table S2. Summary statistics from linear mixed effects model comparing the regression slope for larval total length (cm) across days of exposure, with water depth treatment as an interactive effect, and frog ID as random effect. emmean = estimated marginal means, s.e. = standard error, df = degrees of freedom, lower.CI = lower 2.5% confident interval, and upper.CI = lower 97.5% confident interval. Pairwise comparison between all treatment groups. p.value = P value with \(\alpha\) set at 0.05. Degrees-of-freedom method: kenward-roger, P value adjustment: tukey method for comparing a family of 5 estimates.

## Linear mixed model fit by REML ['lmerMod']
## Formula: length_cm ~ days * water_depth + (1 | ID)
##    Data: larva_dat
## 
## REML criterion at convergence: 46.2
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.5622 -0.5932 -0.0077  0.6185  2.5084 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  ID       (Intercept) 0.0235   0.153   
##  Residual             0.0424   0.206   
## Number of obs: 257, groups:  ID, 58
## 
## Fixed effects:
##                        Estimate Std. Error t value
## (Intercept)             0.67186    0.06877    9.77
## days                    0.05698    0.00293   19.46
## water_depth0.5          0.06550    0.09556    0.69
## water_depth1            0.09809    0.09734    1.01
## water_depth2            0.11133    0.09877    1.13
## water_depth2-0.25       0.15311    0.09734    1.57
## days:water_depth0.5     0.00735    0.00418    1.76
## days:water_depth1       0.02742    0.00480    5.72
## days:water_depth2       0.03282    0.00468    7.01
## days:water_depth2-0.25  0.02642    0.00480    5.51
## 
## Correlation of Fixed Effects:
##             (Intr) days   wt_0.5 wtr_d1 wtr_d2 w_2-0. d:_0.5 dys:_1 dys:_2
## days        -0.622                                                        
## wtr_dpth0.5 -0.720  0.447                                                 
## water_dpth1 -0.707  0.439  0.508                                          
## water_dpth2 -0.696  0.433  0.501  0.492                                   
## wtr_d2-0.25 -0.707  0.439  0.508  0.499  0.492                            
## dys:wtr_0.5  0.435 -0.700 -0.621 -0.307 -0.303 -0.307                     
## dys:wtr_dp1  0.379 -0.610 -0.273 -0.625 -0.264 -0.268  0.427              
## dys:wtr_dp2  0.389 -0.626 -0.280 -0.275 -0.623 -0.275  0.438  0.382       
## dys:_2-0.25  0.379 -0.610 -0.273 -0.268 -0.264 -0.625  0.427  0.373  0.382
days water_depth emmean SE df lower.CL upper.CL
12.9 0.25 1.41 0.054 50.2 1.30 1.51
12.9 0.5 1.57 0.052 51.1 1.46 1.67
12.9 1 1.86 0.053 56.4 1.75 1.96
12.9 2 1.94 0.055 54.2 1.83 2.05
12.9 2-0.25 1.90 0.053 56.4 1.79 2.01
contrast estimate SE df t.ratio p.value
0.25 - 0.5 -0.007 0.004 195 -1.757 0.402
0.25 - 1 -0.027 0.005 195 -5.717 0.000
0.25 - 2 -0.033 0.005 196 -7.012 0.000
0.25 - (2-0.25) -0.026 0.005 195 -5.509 0.000
0.5 - 1 -0.020 0.005 196 -4.153 0.000
0.5 - 2 -0.025 0.005 197 -5.399 0.000
0.5 - (2-0.25) -0.019 0.005 196 -3.947 0.001
1 - 2 -0.005 0.005 197 -1.025 0.844
1 - (2-0.25) 0.001 0.005 196 0.185 1.000
2 - (2-0.25) 0.006 0.005 197 1.214 0.743

Fig. S1

Fig. S1. Model output.

Table S3

Table S3. Summary statistics from linear model for growth rate (cm dˉ¹) between water depth treatments. emmean = estimated marginal means, s.e. = standard error, df = degrees of freedom, lower.CI = lower 2.5% confident interval, and upper.CI = lower 97.5% confident interval. Pairwise comparison between all treatment groups. p.value = P value with \(\alpha\) set at 0.05. P value adjustment: tukey method for comparing a family of 5 estimates.

## 
## Call:
## lm(formula = growth_rate_cm_d ~ water_depth, data = metamorph_dat)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.03319 -0.00826  0.00207  0.01078  0.03220 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        0.05087    0.00469   10.86  4.4e-15 ***
## water_depth0.5     0.01117    0.00649    1.72    0.091 .  
## water_depth1       0.03367    0.00649    5.19  3.4e-06 ***
## water_depth2       0.03864    0.00663    5.83  3.4e-07 ***
## water_depth2-0.25  0.03005    0.00649    4.63  2.4e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0155 on 53 degrees of freedom
## Multiple R-squared:  0.487,  Adjusted R-squared:  0.448 
## F-statistic: 12.6 on 4 and 53 DF,  p-value: 2.9e-07
water_depth emmean SE df lower.CL upper.CL
0.25 0.051 0.005 53 0.041 0.060
0.5 0.062 0.004 53 0.053 0.071
1 0.085 0.004 53 0.076 0.094
2 0.090 0.005 53 0.080 0.099
2-0.25 0.081 0.004 53 0.072 0.090
contrast estimate SE df t.ratio p.value
0.25 - 0.5 -0.011 0.006 53 -1.722 0.429
0.25 - 1 -0.034 0.006 53 -5.191 0.000
0.25 - 2 -0.039 0.007 53 -5.831 0.000
0.25 - (2-0.25) -0.030 0.006 53 -4.632 0.000
0.5 - 1 -0.023 0.006 53 -3.546 0.007
0.5 - 2 -0.027 0.006 53 -4.234 0.001
0.5 - (2-0.25) -0.019 0.006 53 -2.975 0.034
1 - 2 -0.005 0.006 53 -0.766 0.939
1 - (2-0.25) 0.004 0.006 53 0.571 0.979
2 - (2-0.25) 0.009 0.006 53 1.324 0.678

Table S4

Table S4. Summary statistics from linear model for larval period (days) between water depth treatments. emmean = estimated marginal means, s.e. = standard error, df = degrees of freedom, lower.CI = lower 2.5% confident interval, and upper.CI = lower 97.5% confident interval. Pairwise comparison between all treatment groups. p.value = P value with \(\alpha\) set at 0.05. P value adjustment: tukey method for comparing a family of 5 estimates.

## 
## Call:
## lm(formula = larval_period_d ~ water_depth, data = metamorph_dat)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -11.00  -1.92   0.25   2.09   9.08 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          41.00       1.32   31.05  < 2e-16 ***
## water_depth0.5       -3.08       1.83   -1.69    0.098 .  
## water_depth1         -8.25       1.83   -4.51  3.6e-05 ***
## water_depth2         -4.09       1.87   -2.19    0.033 *  
## water_depth2-0.25    -9.25       1.83   -5.06  5.4e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.38 on 53 degrees of freedom
## Multiple R-squared:  0.398,  Adjusted R-squared:  0.352 
## F-statistic: 8.76 on 4 and 53 DF,  p-value: 1.67e-05
water_depth emmean SE df lower.CL upper.CL
0.25 41.0 1.32 53 38.4 43.6
0.5 37.9 1.26 53 35.4 40.5
1 32.8 1.26 53 30.2 35.3
2 36.9 1.32 53 34.3 39.6
2-0.25 31.8 1.26 53 29.2 34.3
contrast estimate SE df t.ratio p.value
0.25 - 0.5 3.08 1.83 53 1.687 0.451
0.25 - 1 8.25 1.83 53 4.513 0.000
0.25 - 2 4.09 1.87 53 2.191 0.199
0.25 - (2-0.25) 9.25 1.83 53 5.060 0.000
0.5 - 1 5.17 1.79 53 2.890 0.042
0.5 - 2 1.01 1.83 53 0.551 0.981
0.5 - (2-0.25) 6.17 1.79 53 3.449 0.009
1 - 2 -4.16 1.83 53 -2.275 0.169
1 - (2-0.25) 1.00 1.79 53 0.559 0.980
2 - (2-0.25) 5.16 1.83 53 2.822 0.050

Table S5

Table S5. Summary statistics from linear model for metamorph size (cm) between water depth treatments. emmean = estimated marginal means, s.e. = standard error, df = degrees of freedom, lower.CI = lower 2.5% confident interval, and upper.CI = lower 97.5% confident interval. Pairwise comparison between all treatment groups. p.value = P value with \(\alpha\) set at 0.05. P value adjustment: tukey method for comparing a family of 5 estimates.

## 
## Call:
## lm(formula = metamorph_size_cm ~ water_depth, data = metamorph_dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.2793 -0.1045  0.0033  0.0915  0.3815 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         0.8030     0.0428   18.75  < 2e-16 ***
## water_depth0.5      0.0894     0.0593    1.51   0.1375    
## water_depth1        0.3295     0.0593    5.56  9.1e-07 ***
## water_depth2        0.3227     0.0606    5.33  2.1e-06 ***
## water_depth2-0.25   0.2487     0.0593    4.19   0.0001 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.142 on 53 degrees of freedom
## Multiple R-squared:  0.479,  Adjusted R-squared:  0.439 
## F-statistic: 12.2 on 4 and 53 DF,  p-value: 4.35e-07
water_depth emmean SE df lower.CL upper.CL
0.25 0.803 0.043 53 0.717 0.889
0.5 0.892 0.041 53 0.810 0.975
1 1.133 0.041 53 1.050 1.215
2 1.126 0.043 53 1.040 1.212
2-0.25 1.052 0.041 53 0.969 1.134
contrast estimate SE df t.ratio p.value
0.25 - 0.5 -0.089 0.059 53 -1.508 0.562
0.25 - 1 -0.330 0.059 53 -5.558 0.000
0.25 - 2 -0.323 0.061 53 -5.328 0.000
0.25 - (2-0.25) -0.249 0.059 53 -4.194 0.001
0.5 - 1 -0.240 0.058 53 -4.141 0.001
0.5 - 2 -0.233 0.059 53 -3.934 0.002
0.5 - (2-0.25) -0.159 0.058 53 -2.747 0.060
1 - 2 0.007 0.059 53 0.115 1.000
1 - (2-0.25) 0.081 0.058 53 1.394 0.634
2 - (2-0.25) 0.074 0.059 53 1.248 0.724

Table S6

Table S6. Summary statistics from linear model for the maximum distance jumped (cm) between water depth treatments. emmean = estimated marginal means, s.e. = standard error, df = degrees of freedom, lower.CI = lower 2.5% confident interval, and upper.CI = lower 97.5% confident interval. Pairwise comparison between all treatment groups. p.value = P value with \(\alpha\) set at 0.05. P value adjustment: tukey method for comparing a family of 5 estimates.

## 
## Call:
## lm(formula = jump_dist_cm ~ water_depth, data = metamorph_dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.0242 -0.5508 -0.0242  0.3530  2.3891 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         7.6109     0.2790   27.28  < 2e-16 ***
## water_depth0.5      0.0749     0.3862    0.19  0.84691    
## water_depth1        1.2133     0.3862    3.14  0.00275 ** 
## water_depth2        1.4455     0.3945    3.66  0.00057 ***
## water_depth2-0.25   0.3966     0.3862    1.03  0.30909    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.925 on 53 degrees of freedom
## Multiple R-squared:  0.307,  Adjusted R-squared:  0.255 
## F-statistic: 5.87 on 4 and 53 DF,  p-value: 0.000547
water_depth emmean SE df lower.CL upper.CL
0.25 7.61 0.279 53 7.05 8.17
0.5 7.69 0.267 53 7.15 8.22
1 8.82 0.267 53 8.29 9.36
2 9.06 0.279 53 8.50 9.62
2-0.25 8.01 0.267 53 7.47 8.54
contrast estimate SE df t.ratio p.value
0.25 - 0.5 -0.075 0.386 53 -0.194 1.000
0.25 - 1 -1.213 0.386 53 -3.142 0.022
0.25 - 2 -1.446 0.395 53 -3.664 0.005
0.25 - (2-0.25) -0.397 0.386 53 -1.027 0.842
0.5 - 1 -1.138 0.378 53 -3.014 0.031
0.5 - 2 -1.371 0.386 53 -3.549 0.007
0.5 - (2-0.25) -0.322 0.378 53 -0.852 0.913
1 - 2 -0.232 0.386 53 -0.601 0.974
1 - (2-0.25) 0.817 0.378 53 2.162 0.210
2 - (2-0.25) 1.049 0.386 53 2.716 0.065

Figures

Code to produce the main document figures are detailed below. Figures produced were further modified in Adobe Illustrator for publication.

Fig 2 - Tadpole development

fig1a <- larva_dat %>%
    ggplot(aes(x = days, y = length_cm, group = ID, colour = water_depth)) + geom_line(alpha = 0.5) +
    geom_point(size = 3) + scale_colour_manual(values = my_col) + ylab("Total length (cm)") +
    xlab("Days of exposure") + mytheme()

fig1b <- metamorph_dat %>%
    ggplot(aes(x = water_depth, y = growth_rate_cm_d, colour = water_depth)) + geom_boxplot(fill = NA,
    show.legend = F) + geom_jitter(position = position_jitter(0.05), size = 3) +
    scale_colour_manual(values = my_col) + ylab(expression("Growth rate (cm d"^"-1" *
    ")")) + xlab("Water depth (cm)") + mytheme()

leg <- cowplot::get_legend(fig1a + theme(legend.box.margin = margin(0, 0, 12)))  # create some space to the left of the legend
prow <- cowplot::plot_grid(fig1a + theme(legend.position = "none"), fig1b + theme(legend.position = "none"),
    ncol = 2, align = "h", axis = "bt", labels = c("A", "B"))
cowplot::plot_grid(prow, leg, rel_widths = c(2, 0.4))  # group as 3 columns (2 figs + 1 legend)

Fig 3 - Metamorph

## larval period
fig2a <- metamorph_dat %>%
    ggplot(aes(x = water_depth, y = larval_period_d, colour = water_depth)) + geom_boxplot(fill = NA,
    show.legend = F) + geom_jitter(position = position_jitter(0.05), size = 3) +
    scale_colour_manual(values = my_col) + ylab("Larval period (days)") + xlab("Water depth (cm)") +
    mytheme()

## metamorph size
fig2b <- metamorph_dat %>%
    ggplot(aes(x = water_depth, y = metamorph_size_cm, colour = water_depth)) + geom_boxplot(fill = NA,
    show.legend = F) + geom_jitter(position = position_jitter(0.05), size = 3) +
    scale_colour_manual(values = my_col) + ylab("Metamorph size (cm)") + xlab("Water depth (cm)") +
    mytheme()

# jumping distance
fig2c <- metamorph_dat %>%
    ggplot(aes(x = water_depth, y = jump_dist_cm, colour = water_depth)) + geom_boxplot(fill = NA,
    show.legend = F) + geom_jitter(position = position_jitter(0.05), size = 3) +
    scale_colour_manual(values = my_col) + ylab("Maximum distance jumped (cm)") +
    xlab("Water depth (cm)") + mytheme()

legend_b <- get_legend(fig2a + guides(color = guide_legend(nrow = 1)) + theme(legend.position = "bottom"))

fig2d <- metamorph_dat %>%
    ggplot(aes(x = metamorph_size_cm, y = jump_dist_cm)) + geom_point(size = 3, aes(colour = water_depth)) +
    scale_colour_manual(values = my_col) + ylab("Maximum distance jumped (cm)") +
    xlab("Metamorph size (cm)") + ggpmisc::stat_poly_line(formula = y ~ x, colour = "#09519C",
    fill = "#C6DBEF", linetype = "dashed") + ggpmisc::stat_poly_eq(use_label("eq",
    "R2", "R2.CI", "P", "n"), formula = y ~ x) + mytheme()

fig2e <- metamorph_dat %>%
    ggplot(aes(x = larval_period_d, y = metamorph_size_cm)) + geom_point(size = 3,
    aes(colour = water_depth)) + scale_colour_manual(values = my_col) + ylab("Metamorph size (cm)") +
    xlab("Larval period (days)") + ggpmisc::stat_poly_line(formula = y ~ x, colour = "#09519C",
    fill = "#C6DBEF", linetype = "dashed") + ggpmisc::stat_poly_eq(use_label("eq",
    "R2", "R2.CI", "P", "n"), formula = y ~ x) + mytheme()

plot_grid(fig2a + theme(legend.position = "none"), fig2b + theme(legend.position = "none"),
    fig2c + theme(legend.position = "none"), fig2d + theme(legend.position = "none"),
    fig2e + theme(legend.position = "none"), NULL, ncol = 3, align = "h", axis = "bt",
    labels = c("A", "B", "C", "D", "E", ""))


Session Information

R version 4.4.0 (2024-04-24)

Platform: aarch64-apple-darwin20

attached base packages: stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: formatR(v.1.14), ggpmisc(v.0.6.0), ggpp(v.0.5.8-1), emmeans(v.1.10.5), lme4(v.1.1-35.5), Matrix(v.1.7-0), cowplot(v.1.1.3), lubridate(v.1.9.3), forcats(v.1.0.0), stringr(v.1.5.1), dplyr(v.1.1.4), purrr(v.1.0.2), readr(v.2.1.5), tidyr(v.1.3.1), tibble(v.3.2.1), ggplot2(v.3.5.1), tidyverse(v.2.0.0) and knitr(v.1.48)

loaded via a namespace (and not attached): gtable(v.0.3.5), xfun(v.0.48), bslib(v.0.8.0), lattice(v.0.22-6), tzdb(v.0.4.0), vctrs(v.0.6.5), tools(v.4.4.0), generics(v.0.1.3), parallel(v.4.4.0), pbkrtest(v.0.5.3), sandwich(v.3.1-1), fansi(v.1.0.6), highr(v.0.11), pacman(v.0.5.1), pkgconfig(v.2.0.3), lifecycle(v.1.0.4), farver(v.2.1.2), compiler(v.4.4.0), MatrixModels(v.0.5-3), munsell(v.0.5.1), codetools(v.0.2-20), SparseM(v.1.84-2), quantreg(v.5.98), htmltools(v.0.5.8.1), sass(v.0.4.9), yaml(v.2.3.10), pillar(v.1.9.0), nloptr(v.2.1.1), jquerylib(v.0.1.4), MASS(v.7.3-61), cachem(v.1.1.0), boot(v.1.3-31), multcomp(v.1.4-26), nlme(v.3.1-166), tidyselect(v.1.2.1), digest(v.0.6.37), mvtnorm(v.1.3-1), stringi(v.1.8.4), pander(v.0.6.5), bookdown(v.0.41), labeling(v.0.4.3), splines(v.4.4.0), fastmap(v.1.2.0), grid(v.4.4.0), colorspace(v.2.1-1), cli(v.3.6.3), magrittr(v.2.0.3), survival(v.3.7-0), utf8(v.1.2.4), broom(v.1.0.7), TH.data(v.1.1-2), withr(v.3.0.1), backports(v.1.5.0), scales(v.1.3.0), timechange(v.0.3.0), estimability(v.1.5.1), confintr(v.1.0.2), rmarkdown(v.2.28), zoo(v.1.8-12), hms(v.1.1.3), coda(v.0.19-4.1), evaluate(v.1.0.1), rlang(v.1.1.4), Rcpp(v.1.0.13), xtable(v.1.8-4), glue(v.1.8.0), polynom(v.1.4-1), rstudioapi(v.0.16.0), minqa(v.1.2.8), jsonlite(v.1.8.9) and R6(v.2.5.1)


  1. Hawkesbury Institute for the Environment, Western Sydney University, NSW 2753, Australia, ↩︎

LS0tCnRpdGxlOiAiRGV2ZWxvcG1lbnRhbCBwbGFzdGljaXR5IHRvIHBvbmQgZHJ5aW5nIGhhcyBjYXJyeS1vdmVyIGNvc3RzIG9uIG1ldGFtb3JwaCBwZXJmb3JtYW5jZSIKc3VidGl0bGU6ICJTdXBwbGVtZW50YXJ5IEluZm9ybWF0aW9uIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclZC8lbS8lWScpYCIKYXV0aG9yOgogIC0gTmljaG9sYXMgQy4gV3VeW0hhd2tlc2J1cnkgSW5zdGl0dXRlIGZvciB0aGUgRW52aXJvbm1lbnQsIFdlc3Rlcm4gU3lkbmV5IFVuaXZlcnNpdHksIE5TVyAyNzUzLCBBdXN0cmFsaWEsIG5pY2hvbGFzLnd1Lm56QGdtYWlsLmNvbV0Kb3V0cHV0OgogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgI2NvZGVfZm9sZGluZzogaGlkZQogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICBoaWdobGlnaHQ6IHRhbmdvCmVkaXRvcl9vcHRpb25zOgogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlCiNsaW5rLWNpdGF0aW9uczogdHJ1ZQotLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlICpSKiB3b3JrZmxvdyBmb3IgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaW5nIHRoZSByYXcgZGF0YSwgYW5kIGdlbmVyYXRpbmcgZmlndXJlcyBmb3IgdGhlIG1hbnVzY3JpcHQgdGl0bGVkICIqKkRldmVsb3BtZW50YWwgcGxhc3RpY2l0eSB0byBwb25kIGRyeWluZyBoYXMgY2Fycnktb3ZlciBjb3N0cyBvbiBtZXRhbW9ycGggcGVyZm9ybWFuY2UqKiIuIAoKW0dpdEh1YiBSZXBvc2l0b3J5XShodHRwczovL2dpdGh1Yi5jb20vbmljaG9sYXN3dW56L3RhZHBvbGUtcG9uZC1kcnlpbmcpOgpUaGUgUm1hcmtkb3duIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB0aGUgKkNvZGUqIGRyb3AgZG93biBtZW51ICh0b3AgcmlnaHQpLgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoa25pdHIpCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgY2FjaGUgPSBGQUxTRSwgdGlkeSA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQpvcHRpb25zKGRwbHlyLndpZHRoID0gSW5mLCBrbml0ci5rYWJsZS5OQSA9ICIiLCBkaWdpdHMgPSAzKQoKIyBMb2FkIGxpYnJhcnkKcGFjbWFuOjpwX2xvYWQodGlkeXZlcnNlLCBjb3dwbG90LCAKICAgICAgICAgICAgICAgbG1lNCwgZW1tZWFucywgZ2dwbWlzYywgCiAgICAgICAgICAgICAgIGZvcm1hdFIpCgojIEZ1bmN0aW9ucwpteXRoZW1lIDwtIGZ1bmN0aW9uKCkgewogIHRoZW1lX2J3KCkgKwogICAgdGhlbWUocGFuZWwuYm9yZGVyICAgICAgICAgID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yICAgICAgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICBwYW5lbC5ncmlkLm1pbm9yICAgICAgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICBheGlzLmxpbmUgICAgICAgICAgICAgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICBheGlzLnRpY2tzICAgICAgICAgICAgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgICBheGlzLnRleHQgICAgICAgICAgICAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICAgIGF4aXMudGl0bGUgICAgICAgICAgICA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgICAgYXhpcy50aXRsZS55ICAgICAgICAgID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gMyksCiAgICAgICAgICBheGlzLnRpdGxlLnggICAgICAgICAgPSBlbGVtZW50X3RleHQodmp1c3QgPSAtMSksCiAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kICAgICAgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BKSwKICAgICAgICAgIHBsb3QuYmFja2dyb3VuZCAgICAgICA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gTkEpLAogICAgICAgICAgcGxvdC5tYXJnaW4gICAgICAgICAgID0gdW5pdChjKDAuMiwgMC4yLCAwLjIsIDAuMiksIHVuaXRzID0gLCAiY20iKSwKICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kICAgICA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gTkEpLAogICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSBOQSksCiAgICAgICAgICBzdHJpcC50ZXh0LnggICAgICAgICAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgICAgc3RyaXAuYmFja2dyb3VuZCAgICAgID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSBOQSksCiAgICAgICAgICBwbG90LnRpdGxlICAgICAgICAgICAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKQogICAgKQp9ICMgc2V0IHVwIHBsb3QgdGhlbWUKCgojbXlfYmx1ZSA8LSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobiA9IDgsICJCbHVlcyIpWzM6OF0gIyBleGNsdWRlZCB0aGUgdHdvIGxpZ2h0ZXIgaHVlcwoKbXlfY29sIDwtIGMoIiNjM2RiZmQiLCAiIzc5YWJlMiIsICIjMDA3MmI0IiwgIiMwMDM2NmMiLCAiI2VmNDg2OCIpCgpgYGAKCgojIEFkZGl0aW9uYWwgSW5mb3JtYXRpb24gey19CgpGb3IgcmVhZGVycyBjb25zaWRlcmluZyB0byByZXBsaWNhdGUgdGhlIHN0dWR5LCB3ZSBjb25zaWRlciBtb2RpZnlpbmcgdGhlIGZvbGxvd2luZyBwcm9jZWR1cmVzIGluIHRoZSBtZXRob2RzIHNlY3Rpb24gYmFzZWQgb24gdGhlIHJldmlld2VyJ3MgY29tbWVudHMuCgoqQm9keSBtYXNzKjogQm9keSBtYXNzIHdhcyBub3Qgb3JpZ2luYWxseSByZWNvcmRlZCBkdWUgdG8gcG90ZW50aWFsIHN0cmVzcyBvZiBkcnktYmxvdHRpbmcgdG8gcmVtb3ZlIGV4Y2VzcyBzdXJmYWNlIHdhdGVyLiBIb3dldmVyLCBvbmUgcmV2aWV3ZXIgcG9pbnRlZCBvdXQgdGhhdCBkcnktYmxvdHRpbmcgdGVuZHMgdG8gYmUgcXVpY2sgYW5kIHdvdWxkIG5vdCBjYXVzZSBlbm91Z2ggc3RyZXNzIHRvIGFsdGVyIHRoZSBncm93dGggdHJhamVjdG9yaWVzLiBUaGVyZWZvcmUsIHdlIHJlY29tbWVuZCB0YWRwb2xlIGFuZCBtZXRhbW9ycGggYm9keSBtYXNzIG1lYXN1cmVtZW50cyB0byBiZSBpbmNsdWRlZCBpbiBmdXR1cmUgc3R1ZGllcy4KCipDb3J0aWNvc3Rlcm9uZSBsZXZlbHMqOiBUaGUgaW5jbHVzaW9uIG9mIHdhdGVyLWJvcm5lIGNvcnRpY29zdGVyb25lIChtZXRhYm9saWMgaG9ybW9uZSBiaW9tYXJrZXIpIG1lYXN1cmVtZW50cyB3b3VsZCBoYXZlIGJlZW4gYmVuZWZpY2lhbCB0byBsaW5rIGhvcm1vbmFsIHJlc3BvbnNlcyB0byBwb25kIGRyeWluZyB3aXRoIGRldmVsb3BtZW50YWwgcmF0ZSAoW1J1dGhzYXR6ICpldCBhbC4qIDIwMjNdKGh0dHBzOi8vZG9pLm9yZy8xMC4xMDkzL2NvbnBoeXMvY29hZDA3MCkpCgojIE1ldGFkYXRhIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzIC19IAoKIyMgbGFydmFlX2RhdGEuY3N2IHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzIC19IAoKYGBge3IgbGFydmFlX21ldGFkYXRhLCBlY2hvPUZBTFNFfQpkYXRhLmZyYW1lKE5hbWUgPSBjKCJJRCIsICJncm91cCIsICJ3YXRlcl9kZXB0aCIsICJkYXRlIiwgImRheXMiLCAibGVuZ3RoX2NtIiksIAogICAgICAgICAgIERlc2NyaXB0aW9uID0gYygiVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGluZGl2aWR1YWwuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvZGVkIHdhdGVyIGxldmVsIHRyZWF0bWVudHMgKFQxLVQ1KS4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSB3YXRlciBkZXB0aCBvZiB0aGUgdHJlYXRtZW50IGluIGNlbnRpbWV0cmVzIChjbSkuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgZGF0ZSB3aGVuIHRvdGFsIGxlbmd0aCB3YXMgcmVjb3JkZWQgaW4gZGF5L21vbnRoL3llYXIuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgZGF5IChzaW5jZSBleHBlcmltZW50IHN0YXJ0ZWQpIHdoZW4gbGVuZ3RoIHdhcyByZWNvcmRlZC4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSB0b3RhbCBsZW5ndGggcmVjb3JkZWQgaW4gY2VudGltZXRyZXMgKGNtKS4iKSkgJT4lCiAga25pdHI6OmthYmxlKCkKYGBgCgojIyBtZXRhbW9ycGhfZGF0YS5jc3Ygey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHMgLX0gCgpgYGB7ciBtZXRhbW9ycGhfbWV0YWRhdGEsIGVjaG89RkFMU0V9CmRhdGEuZnJhbWUoTmFtZSA9IGMoIklEIiwgImdyb3VwIiwgIndhdGVyX2RlcHRoIiwiZ3Jvd3RoX3JhdGVfY21fZCIsICJsYXJ2YWxfcGVyaW9kX2QiLCAibWV0YW1vcnBoX3NpemVfY20iLCAianVtcF9kaXN0X2NtIiksIAogICAgICAgICAgIERlc2NyaXB0aW9uID0gYygiVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGluZGl2aWR1YWwuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvZGVkIHdhdGVyIGxldmVsIHRyZWF0bWVudHMgKFQxLVQ1KS4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSB3YXRlciBkZXB0aCBvZiB0aGUgdHJlYXRtZW50IGluIGNlbnRpbWV0cmVzIChjbSkuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgY2FsY3VsYXRlZCBncm93dGggcmF0ZSAoY20vZGF5KS4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBjYWxjdWxhdGVkIGxhcnZhbCBwZXJpb2QgaW4gZGF5cyBzaW5jZSBoYXRjaC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiTGVuZ3RoIGF0IG1ldGFtb3JwaG9zaXMgaW4gY2VudGltZXRyZXMgKGNtKS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVhbiBqdW1wIGRpc3RhbmNlIGluIGNlbnRpbWV0cmVzIChjbSkuIikpICU+JQogIGtuaXRyOjprYWJsZSgpCmBgYAoKKioqCgoKIyBEYXRhIHstfQoKTG9hZCBib3RoIHRhZHBvbGUgYW5kIG1ldGFtb3JwaCBkYXRhIGZyb20gdGhlIEdpdEh1YiByZXBvc2l0b3J5LgoKYGBge3IgZGF0YX0KIyBMb2FkIHJhdyBkYXRhIGFuZCBjbGVhbgpsYXJ2YV9kYXQgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uaWNob2xhc3d1bnovdGFkcG9sZS1wb25kLWRyeWluZy9tYXN0ZXIvZGF0YS9sYXJ2YWVfZGF0YS5jc3YiLCBuYS5zdHJpbmdzID0gYygiIiAsICJOQSIgKSwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUpCgptZXRhbW9ycGhfZGF0IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbmljaG9sYXN3dW56L3RhZHBvbGUtcG9uZC1kcnlpbmcvbWFzdGVyL2RhdGEvbWV0YW1vcnBoX2RhdGEuY3N2IiwgbmEuc3RyaW5ncyA9IGMoIiIgLCAiTkEiICksIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFKQpgYGAKCiMjIERhdGEgc3VtbWFyeSB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxscyAtfSAKCiMjIyBUYWJsZSBTMWEgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHMgLX0gCgoqKlRhYmxlIFMxLioqIE1lYW4gwrEgc3RhbmRhcmQgZGV2aWF0aW9uIChzLmQuKSBvZiB0aGUgdGFkcG9sZSB0b3RhbCBsZW5ndGggcmVjb3JkZWQgYnkgdHJlYXRtZW50IGdyb3VwLgoKYGBge3IgdGFibGVTMWEsIGVjaG89RkFMU0V9CmRhdGEuZnJhbWUobGFydmFfZGF0ICU+JQogIGRwbHlyOjpncm91cF9ieShncm91cCwgd2F0ZXJfZGVwdGgsIGRheXMpICU+JQogIGRwbHlyOjpzdW1tYXJpc2UobWVhbiA9IGZvcm1hdChyb3VuZChtZWFuKGxlbmd0aF9jbSksIDIpLCBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgICAgIFNEICAgPSBmb3JtYXQocm91bmQoc2QobGVuZ3RoX2NtKSwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgICAgbiAgICA9IG4oKSkKICApICU+JQogIGRwbHlyOjptdXRhdGUobGVuZ3RoID0gcGFzdGUobWVhbiwgU0QsIHNlcCA9ICLCsSIpKSAlPiUKICBkcGx5cjo6c2VsZWN0KGdyb3VwLCB3YXRlcl9kZXB0aCwgZGF5cywgbGVuZ3RoLCBuKSAlPiUKICBkcGx5cjo6cmVuYW1lKCJHcm91cCIgPSBncm91cCwKICAgICAgICAgICAgICAgICJXYXRlciBkZXB0aCAoY20pIiA9IHdhdGVyX2RlcHRoLAogICAgICAgICAgICAgICAgIkRheXMiID0gZGF5cywKICAgICAgICAgICAgICAgICJUb3RhbCBsZW5ndGggwrEgcy5kLiAoY20pIiA9IGxlbmd0aCwKICAgICAgICAgICAgICAgIG4gICAgICAgICAgICAgICAgICAgICAgICA9IG4pICU+JQogIGtuaXRyOjprYWJsZShkaWdpdHMgPSAyKSAjIDMgZGVjaW1hbCBwbGFjZXMKYGBgCgojIyMgVGFibGUgUzFiIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzIC19IAoKKipUYWJsZSBTMS4qKiBNZWFuIMKxIHN0YW5kYXJkIGRldmlhdGlvbiAocy5kLikgb2YgdGhlIGdyb3d0aCByYXRlIChjbSBkXi0xXiksIGxhcnZhbCBwZXJpb2QgKGRheXMpLCBzaXplIGF0IG1ldGFtb3JwaCAoY20pLCBhbmQgbWF4aW11bSBqdW1waW5nIGRpc3RhbmNlIChjbSkgYnkgdHJlYXRtZW50IGdyb3VwLgoKYGBge3IgdGFibGVTMWIsIGVjaG89RkFMU0V9CmRhdGEuZnJhbWUobWV0YW1vcnBoX2RhdCAlPiUKICBkcGx5cjo6Z3JvdXBfYnkoZ3JvdXAsIHdhdGVyX2RlcHRoKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKGdyb3d0aF9tZWFuID0gZm9ybWF0KHJvdW5kKG1lYW4oZ3Jvd3RoX3JhdGVfY21fZCksIDIpLCBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgICAgIGdyb3d0aF9TRCAgID0gZm9ybWF0KHJvdW5kKHNkKGdyb3d0aF9yYXRlX2NtX2QpLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICAgICBsYXJ2YWxfbWVhbiA9IG1lZGlhbihsYXJ2YWxfcGVyaW9kX2QpLAogICAgICAgICAgICAgICAgICAgbGFydmFsX1NEICAgPSBmb3JtYXQocm91bmQoc2QobGFydmFsX3BlcmlvZF9kKSwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgICAgc2l6ZV9tZWFuID0gZm9ybWF0KHJvdW5kKG1lYW4obWV0YW1vcnBoX3NpemVfY20pLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICAgICBzaXplX1NEICAgPSBmb3JtYXQocm91bmQoc2QobWV0YW1vcnBoX3NpemVfY20pLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICAgICBqdW1wX21lYW4gPSBmb3JtYXQocm91bmQobWVhbihqdW1wX2Rpc3RfY20pLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICAgICBqdW1wX1NEICAgPSBmb3JtYXQocm91bmQoc2QoanVtcF9kaXN0X2NtKSwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgICAgbiAgICA9IG4oKSkKICApICU+JQogIGRwbHlyOjptdXRhdGUoZ3Jvd3RoID0gcGFzdGUoZ3Jvd3RoX21lYW4sIGdyb3d0aF9TRCwgc2VwID0gIsKxIiksCiAgICAgICAgICAgICAgICBsYXJ2YWwgPSBwYXN0ZShsYXJ2YWxfbWVhbiwgbGFydmFsX1NELCBzZXAgPSAiwrEiKSwKICAgICAgICAgICAgICAgIHNpemUgPSBwYXN0ZShzaXplX21lYW4sIHNpemVfU0QsIHNlcCA9ICLCsSIpLAogICAgICAgICAgICAgICAganVtcCA9IHBhc3RlKGp1bXBfbWVhbiwganVtcF9TRCwgc2VwID0gIsKxIikpICU+JQogIGRwbHlyOjpzZWxlY3QoZ3JvdXAsIHdhdGVyX2RlcHRoLCBncm93dGgsIGxhcnZhbCwgc2l6ZSwganVtcCwgbikgJT4lCiAgZHBseXI6OnJlbmFtZSgiR3JvdXAiID0gZ3JvdXAsCiAgICAgICAgICAgICAgICAiV2F0ZXIgZGVwdGggKGNtKSIgPSB3YXRlcl9kZXB0aCwKICAgICAgICAgICAgICAgICJHcm93dGggcmF0ZSAoY20gZCReey0xfSQpIiA9IGdyb3d0aCwKICAgICAgICAgICAgICAgICJMYXJ2YWwgcGVyaW9kIChkKSIgPSBsYXJ2YWwsCiAgICAgICAgICAgICAgICAiTWV0YW1vcnBoIHNpemUgKGNtKSIgPSBzaXplLAogICAgICAgICAgICAgICAgIkp1bXBpbmcgZGlzdGFuY2UgKGNtKSIgPSBqdW1wLAogICAgICAgICAgICAgICAgbiAgICAgICAgICAgICAgICAgICAgICAgID0gbikgJT4lCiAga25pdHI6OmthYmxlKGRpZ2l0cyA9IDIpICMgMyBkZWNpbWFsIHBsYWNlcwpgYGAKCioqKgoKIyBBbmFseXNpcyB7LX0KClJ1biBsaW5lYXIgbWl4ZWQgZWZmZWN0cyBtb2RlbCAoaW5kaXZpZHVhbCBJRCBhcyByYW5kb20gZWZmZWN0KSBmb3IgdG90YWwgbGVuZ3RoIGFjcm9zcyBkaWZmZXJlbnQgd2F0ZXIgZGVwdGggdXNpbmcgdGhlIGBsbWVyYCBmdW5jdGlvbiBmcm9tIHRoZSBsbWU0IHBhY2thZ2UuIFJ1biBsaW5lYXIgbW9kZWwgZm9yIGdyb3d0aCByYXRlLCBsYXJ2YWwgcGVyaW9kLCBtZXRhbW9ycGggc2l6ZSwgYW5kIG1ldGFtb3JwaCBtYXhpbXVtIGp1bXBpbmcgZGlzdGFuY2UgYWNyb3NzIGRpZmZlcmVudCB3YXRlciBkZXB0aCB0cmVhdG1lbnRzIHVzaW5nIGBsbWAgZnVuY3Rpb24uCgpgYGB7ciBhbmFseXNpcywgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0iaGlkZSJ9CiMgbGluZWFyIG1peGVkIGVmZmVjdHMgbW9kZWwKbGVuZ3RoX21vZCA8LSBsbWU0OjpsbWVyKGxlbmd0aF9jbSB+ICBkYXlzICogd2F0ZXJfZGVwdGggKyAoMSB8IElEKSwgZGF0YSA9IGxhcnZhX2RhdCkgCgojIGxpbmVhciBlZmZlY3RzIG1vZGVsCmdyb3d0aF9tb2QgPC0gbG0oZ3Jvd3RoX3JhdGVfY21fZCB+IHdhdGVyX2RlcHRoLCBkYXRhID0gbWV0YW1vcnBoX2RhdCkgCnBlcmlvZF9tb2QgPC0gbG0obGFydmFsX3BlcmlvZF9kIH4gd2F0ZXJfZGVwdGgsIGRhdGEgPSBtZXRhbW9ycGhfZGF0KSAKc2l6ZV9tb2QgICA8LSBsbShtZXRhbW9ycGhfc2l6ZV9jbSB+IHdhdGVyX2RlcHRoLCBkYXRhID0gbWV0YW1vcnBoX2RhdCkgCmp1bXBfbW9kICAgPC0gbG0oanVtcF9kaXN0X2NtIH4gd2F0ZXJfZGVwdGgsIGRhdGEgPSBtZXRhbW9ycGhfZGF0KSAKYGBgCgojIyBNb2RlbCBvdXRwdXQgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHMgLX0gCgojIyMgVGFibGUgUzIgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHMgLX0gCgoqKlRhYmxlIFMyLioqIFN1bW1hcnkgc3RhdGlzdGljcyBmcm9tIGxpbmVhciBtaXhlZCBlZmZlY3RzIG1vZGVsIGNvbXBhcmluZyB0aGUgcmVncmVzc2lvbiBzbG9wZSBmb3IgbGFydmFsIHRvdGFsIGxlbmd0aCAoY20pIGFjcm9zcyBkYXlzIG9mIGV4cG9zdXJlLCB3aXRoIHdhdGVyIGRlcHRoIHRyZWF0bWVudCBhcyBhbiBpbnRlcmFjdGl2ZSBlZmZlY3QsIGFuZCBmcm9nIElEIGFzIHJhbmRvbSBlZmZlY3QuIGVtbWVhbiA9IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucywgcy5lLiA9IHN0YW5kYXJkIGVycm9yLCBkZiA9IGRlZ3JlZXMgb2YgZnJlZWRvbSwgbG93ZXIuQ0kgPSBsb3dlciAyLjUlIGNvbmZpZGVudCBpbnRlcnZhbCwgYW5kIHVwcGVyLkNJID0gbG93ZXIgOTcuNSUgY29uZmlkZW50IGludGVydmFsLiBQYWlyd2lzZSBjb21wYXJpc29uIGJldHdlZW4gYWxsIHRyZWF0bWVudCBncm91cHMuIHAudmFsdWUgPSAqUCogdmFsdWUgd2l0aCAkXGFscGhhJCBzZXQgYXQgMC4wNS4gRGVncmVlcy1vZi1mcmVlZG9tIG1ldGhvZDoga2Vud2FyZC1yb2dlciwgKlAqIHZhbHVlIGFkanVzdG1lbnQ6IHR1a2V5IG1ldGhvZCBmb3IgY29tcGFyaW5nIGEgZmFtaWx5IG9mIDUgZXN0aW1hdGVzLgoKYGBge3IgdGFibGVTMiwgZWNobyA9IEZBTFNFfQpzdW1tYXJ5KGxlbmd0aF9tb2QpCmtuaXRyOjprYWJsZShlbW1lYW5zKGxlbmd0aF9tb2QsIHNwZWNzID0gcGFpcndpc2UgfiBkYXlzICogd2F0ZXJfZGVwdGgpJGVtbWVhbnMpCiNrbml0cjo6a2FibGUoZW1tZWFucyhsZW5ndGhfbW9kLCBzcGVjcyA9IHBhaXJ3aXNlIH4gZGF5cyAqIHdhdGVyX2RlcHRoKSRjb250cmFzdHMpCmtuaXRyOjprYWJsZShwYWlycyhlbW1lYW5zOjpsc3RyZW5kcyhsZW5ndGhfbW9kLCAid2F0ZXJfZGVwdGgiLCB2YXI9ImRheXMiKSkpICMgY29tcGFyZSBzbG9wZXMKYGBgCgojIyMgRmlnLiBTMSB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxscyAtfSAKCmBgYHtyIGZpZ1MxLCBlY2hvID0gRkFMU0UsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9N30KZW1tZWFuczo6ZW1taXAocmVmX2dyaWQobGVuZ3RoX21vZCwgYXQgPSBsaXN0KGRheXMgPSBjKDEsIDgsIDE1LCAyMSwgMjgpKSksIAogICAgICAgICAgICAgICB3YXRlcl9kZXB0aCB+IGRheXMsCiAgICAgICAgICAgICAgIGxpbmVhcmcgPSBsaXN0KGxpbmV0eXBlID0gInNvbGlkIiwgbHdkID0gMS41KSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gbXlfY29sKSArCiAgeGxhYigiRGF5cyBvZiBleHBvc3VyZSIpICsgeWxhYigiVG90YWwgbGVuZ3RoIChjbSkiKSArCiAgbXl0aGVtZSgpCmBgYAoKKipGaWcuIFMxLioqIE1vZGVsIG91dHB1dC4KCgojIyMgVGFibGUgUzMgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHMgLX0gCgoqKlRhYmxlIFMzLioqIFN1bW1hcnkgc3RhdGlzdGljcyBmcm9tIGxpbmVhciBtb2RlbCBmb3IgZ3Jvd3RoIHJhdGUgKGNtIGTLicK5KSBiZXR3ZWVuIHdhdGVyIGRlcHRoIHRyZWF0bWVudHMuIGVtbWVhbiA9IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucywgcy5lLiA9IHN0YW5kYXJkIGVycm9yLCBkZiA9IGRlZ3JlZXMgb2YgZnJlZWRvbSwgbG93ZXIuQ0kgPSBsb3dlciAyLjUlIGNvbmZpZGVudCBpbnRlcnZhbCwgYW5kIHVwcGVyLkNJID0gbG93ZXIgOTcuNSUgY29uZmlkZW50IGludGVydmFsLiBQYWlyd2lzZSBjb21wYXJpc29uIGJldHdlZW4gYWxsIHRyZWF0bWVudCBncm91cHMuIHAudmFsdWUgPSAqUCogdmFsdWUgd2l0aCAkXGFscGhhJCBzZXQgYXQgMC4wNS4gKlAqIHZhbHVlIGFkanVzdG1lbnQ6IHR1a2V5IG1ldGhvZCBmb3IgY29tcGFyaW5nIGEgZmFtaWx5IG9mIDUgZXN0aW1hdGVzLgoKYGBge3IgdGFibGVTMywgZWNobyA9IEZBTFNFfQpzdW1tYXJ5KGdyb3d0aF9tb2QpCmtuaXRyOjprYWJsZShlbW1lYW5zKGdyb3d0aF9tb2QsICJ3YXRlcl9kZXB0aCIpKQprbml0cjo6a2FibGUoY29udHJhc3QoZW1tZWFucyhncm93dGhfbW9kLCAid2F0ZXJfZGVwdGgiKSwgInBhaXJ3aXNlIikpCmBgYAoKIyMjIFRhYmxlIFM0IHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzIC19IAoKKipUYWJsZSBTNC4qKiBTdW1tYXJ5IHN0YXRpc3RpY3MgZnJvbSBsaW5lYXIgbW9kZWwgZm9yIGxhcnZhbCBwZXJpb2QgKGRheXMpIGJldHdlZW4gd2F0ZXIgZGVwdGggdHJlYXRtZW50cy4gZW1tZWFuID0gZXN0aW1hdGVkIG1hcmdpbmFsIG1lYW5zLCBzLmUuID0gc3RhbmRhcmQgZXJyb3IsIGRmID0gZGVncmVlcyBvZiBmcmVlZG9tLCBsb3dlci5DSSA9IGxvd2VyIDIuNSUgY29uZmlkZW50IGludGVydmFsLCBhbmQgdXBwZXIuQ0kgPSBsb3dlciA5Ny41JSBjb25maWRlbnQgaW50ZXJ2YWwuIFBhaXJ3aXNlIGNvbXBhcmlzb24gYmV0d2VlbiBhbGwgdHJlYXRtZW50IGdyb3Vwcy4gcC52YWx1ZSA9ICpQKiB2YWx1ZSB3aXRoICRcYWxwaGEkIHNldCBhdCAwLjA1LiAqUCogdmFsdWUgYWRqdXN0bWVudDogdHVrZXkgbWV0aG9kIGZvciBjb21wYXJpbmcgYSBmYW1pbHkgb2YgNSBlc3RpbWF0ZXMuCgpgYGB7ciB0YWJsZVM0LCBlY2hvID0gRkFMU0V9CnN1bW1hcnkocGVyaW9kX21vZCkKa25pdHI6OmthYmxlKGVtbWVhbnMocGVyaW9kX21vZCwgIndhdGVyX2RlcHRoIikpCmtuaXRyOjprYWJsZShjb250cmFzdChlbW1lYW5zKHBlcmlvZF9tb2QsICJ3YXRlcl9kZXB0aCIpLCAicGFpcndpc2UiKSkKYGBgCgojIyMgVGFibGUgUzUgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHMgLX0gCgoqKlRhYmxlIFM1LioqIFN1bW1hcnkgc3RhdGlzdGljcyBmcm9tIGxpbmVhciBtb2RlbCBmb3IgbWV0YW1vcnBoIHNpemUgKGNtKSBiZXR3ZWVuIHdhdGVyIGRlcHRoIHRyZWF0bWVudHMuIGVtbWVhbiA9IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucywgcy5lLiA9IHN0YW5kYXJkIGVycm9yLCBkZiA9IGRlZ3JlZXMgb2YgZnJlZWRvbSwgbG93ZXIuQ0kgPSBsb3dlciAyLjUlIGNvbmZpZGVudCBpbnRlcnZhbCwgYW5kIHVwcGVyLkNJID0gbG93ZXIgOTcuNSUgY29uZmlkZW50IGludGVydmFsLiBQYWlyd2lzZSBjb21wYXJpc29uIGJldHdlZW4gYWxsIHRyZWF0bWVudCBncm91cHMuIHAudmFsdWUgPSAqUCogdmFsdWUgd2l0aCAkXGFscGhhJCBzZXQgYXQgMC4wNS4gKlAqIHZhbHVlIGFkanVzdG1lbnQ6IHR1a2V5IG1ldGhvZCBmb3IgY29tcGFyaW5nIGEgZmFtaWx5IG9mIDUgZXN0aW1hdGVzLgoKYGBge3IgdGFibGVTNSwgZWNobyA9IEZBTFNFfQpzdW1tYXJ5KHNpemVfbW9kKQprbml0cjo6a2FibGUoZW1tZWFucyhzaXplX21vZCwgIndhdGVyX2RlcHRoIikpCmtuaXRyOjprYWJsZShjb250cmFzdChlbW1lYW5zKHNpemVfbW9kLCAid2F0ZXJfZGVwdGgiKSwgInBhaXJ3aXNlIikpCmBgYAoKIyMjIFRhYmxlIFM2IHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzIC19IAoKKipUYWJsZSBTNi4qKiBTdW1tYXJ5IHN0YXRpc3RpY3MgZnJvbSBsaW5lYXIgbW9kZWwgZm9yIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGp1bXBlZCAoY20pICBiZXR3ZWVuIHdhdGVyIGRlcHRoIHRyZWF0bWVudHMuIGVtbWVhbiA9IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucywgcy5lLiA9IHN0YW5kYXJkIGVycm9yLCBkZiA9IGRlZ3JlZXMgb2YgZnJlZWRvbSwgbG93ZXIuQ0kgPSBsb3dlciAyLjUlIGNvbmZpZGVudCBpbnRlcnZhbCwgYW5kIHVwcGVyLkNJID0gbG93ZXIgOTcuNSUgY29uZmlkZW50IGludGVydmFsLiBQYWlyd2lzZSBjb21wYXJpc29uIGJldHdlZW4gYWxsIHRyZWF0bWVudCBncm91cHMuIHAudmFsdWUgPSAqUCogdmFsdWUgd2l0aCAkXGFscGhhJCBzZXQgYXQgMC4wNS4gKlAqIHZhbHVlIGFkanVzdG1lbnQ6IHR1a2V5IG1ldGhvZCBmb3IgY29tcGFyaW5nIGEgZmFtaWx5IG9mIDUgZXN0aW1hdGVzLgoKYGBge3IgdGFibGVTNiwgZWNobyA9IEZBTFNFfQpzdW1tYXJ5KGp1bXBfbW9kKQprbml0cjo6a2FibGUoZW1tZWFucyhqdW1wX21vZCwgIndhdGVyX2RlcHRoIikpCmtuaXRyOjprYWJsZShjb250cmFzdChlbW1lYW5zKGp1bXBfbW9kLCAid2F0ZXJfZGVwdGgiKSwgInBhaXJ3aXNlIikpCmBgYAoKKioqCgojIEZpZ3VyZXMgey19CgpDb2RlIHRvIHByb2R1Y2UgdGhlIG1haW4gZG9jdW1lbnQgZmlndXJlcyBhcmUgZGV0YWlsZWQgYmVsb3cuIEZpZ3VyZXMgcHJvZHVjZWQgd2VyZSBmdXJ0aGVyIG1vZGlmaWVkIGluIFtBZG9iZSBJbGx1c3RyYXRvcl0oaHR0cHM6Ly93d3cuYWRvYmUuY29tL2F1L3Byb2R1Y3RzL2lsbHVzdHJhdG9yLmh0bWwpIGZvciBwdWJsaWNhdGlvbi4KCiMjIEZpZyAyIC0gVGFkcG9sZSBkZXZlbG9wbWVudCB7LX0KCmBgYHtyIEZpZyAyLCBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTh9CmZpZzFhIDwtIGxhcnZhX2RhdCAlPiUKICBnZ3Bsb3QoYWVzKHggPSBkYXlzLCB5ID0gbGVuZ3RoX2NtLCBncm91cCA9IElELCBjb2xvdXIgPSB3YXRlcl9kZXB0aCkpICsKICBnZW9tX2xpbmUoYWxwaGEgPSAwLjUpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBteV9jb2wpICsKICB5bGFiKCJUb3RhbCBsZW5ndGggKGNtKSIpICsgeGxhYigiRGF5cyBvZiBleHBvc3VyZSIpICsKICBteXRoZW1lKCkKCmZpZzFiIDwtIG1ldGFtb3JwaF9kYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gd2F0ZXJfZGVwdGgsIHkgPSBncm93dGhfcmF0ZV9jbV9kLCBjb2xvdXIgPSB3YXRlcl9kZXB0aCkpICsgCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSBOQSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoMC4wNSksIHNpemUgPSAzKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBteV9jb2wpICsKICB5bGFiKGV4cHJlc3Npb24oIkdyb3d0aCByYXRlIChjbSBkIl4iLTEiKiIpIikpICsgeGxhYigiV2F0ZXIgZGVwdGggKGNtKSIpICsKICBteXRoZW1lKCkKCmxlZyA8LSBjb3dwbG90OjpnZXRfbGVnZW5kKGZpZzFhICsgdGhlbWUobGVnZW5kLmJveC5tYXJnaW4gPSBtYXJnaW4oMCwgMCwgMTIpKSkgIyBjcmVhdGUgc29tZSBzcGFjZSB0byB0aGUgbGVmdCBvZiB0aGUgbGVnZW5kCnByb3cgPC0gY293cGxvdDo6cGxvdF9ncmlkKGZpZzFhICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiksCiAgICAgICAgICAgICAgICAgIGZpZzFiICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiksIAogICAgICAgICAgICAgICAgICBuY29sID0gMiwgYWxpZ24gPSAiaCIsIGF4aXMgPSAiYnQiLCBsYWJlbHM9YygiQSIsICJCIikpCmNvd3Bsb3Q6OnBsb3RfZ3JpZChwcm93LCBsZWcsIHJlbF93aWR0aHMgPSBjKDIsIC40KSkgIyBncm91cCBhcyAzIGNvbHVtbnMgKDIgZmlncyArIDEgbGVnZW5kKQpgYGAKCiMjIEZpZyAzIC0gTWV0YW1vcnBoIHstfQoKYGBge3IgRmlnIDMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD01LjUsIGZpZy53aWR0aD05fQojIyBsYXJ2YWwgcGVyaW9kCmZpZzJhIDwtIG1ldGFtb3JwaF9kYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gd2F0ZXJfZGVwdGgsIHkgPSBsYXJ2YWxfcGVyaW9kX2QsIGNvbG91ciA9IHdhdGVyX2RlcHRoKSkgKyAKICBnZW9tX2JveHBsb3QoZmlsbCA9IE5BLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX2ppdHRlcihwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcigwLjA1KSwgc2l6ZSA9IDMpICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IG15X2NvbCkgKwogIHlsYWIoIkxhcnZhbCBwZXJpb2QgKGRheXMpIikgKyB4bGFiKCJXYXRlciBkZXB0aCAoY20pIikgKwogIG15dGhlbWUoKQoKIyMgbWV0YW1vcnBoIHNpemUKZmlnMmIgPC0gbWV0YW1vcnBoX2RhdCAlPiUKICBnZ3Bsb3QoYWVzKHggPSB3YXRlcl9kZXB0aCwgeSA9IG1ldGFtb3JwaF9zaXplX2NtLCBjb2xvdXIgPSB3YXRlcl9kZXB0aCkpICsgCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSBOQSwgc2hvdy5sZWdlbmQgPSBGKSArIAogIGdlb21faml0dGVyKHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKDAuMDUpLCBzaXplID0gMykgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gbXlfY29sKSArCiAgeWxhYigiTWV0YW1vcnBoIHNpemUgKGNtKSIpICsgeGxhYigiV2F0ZXIgZGVwdGggKGNtKSIpICsKICBteXRoZW1lKCkKCiMganVtcGluZyBkaXN0YW5jZQpmaWcyYyA8LSBtZXRhbW9ycGhfZGF0ICU+JQogIGdncGxvdChhZXMoeCA9IHdhdGVyX2RlcHRoLCB5ID0ganVtcF9kaXN0X2NtLCBjb2xvdXIgPSB3YXRlcl9kZXB0aCkpICsgCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSBOQSwgc2hvdy5sZWdlbmQgPSBGKSArIAogIGdlb21faml0dGVyKHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKDAuMDUpLCBzaXplID0gMykgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gbXlfY29sKSArCiAgeWxhYigiTWF4aW11bSBkaXN0YW5jZSBqdW1wZWQgKGNtKSIpICsgeGxhYigiV2F0ZXIgZGVwdGggKGNtKSIpICsKICBteXRoZW1lKCkKCmxlZ2VuZF9iIDwtIGdldF9sZWdlbmQoZmlnMmEgKyBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQobnJvdyA9IDEpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSkKCmZpZzJkIDwtIG1ldGFtb3JwaF9kYXQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbWV0YW1vcnBoX3NpemVfY20sIHkgPSBqdW1wX2Rpc3RfY20pKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDMsIGFlcyhjb2xvdXIgPSB3YXRlcl9kZXB0aCkpICsgCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBteV9jb2wpICsKICB5bGFiKCJNYXhpbXVtIGRpc3RhbmNlIGp1bXBlZCAoY20pIikgKyB4bGFiKCJNZXRhbW9ycGggc2l6ZSAoY20pIikgKwogIGdncG1pc2M6OnN0YXRfcG9seV9saW5lKGZvcm11bGEgPSB5IH4geCwgY29sb3VyID0gIiMwOTUxOUMiLCBmaWxsID0gIiNDNkRCRUYiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgZ2dwbWlzYzo6c3RhdF9wb2x5X2VxKHVzZV9sYWJlbCgiZXEiLCAiUjIiLCAiUjIuQ0kiLCAiUCIsICJuIiksIGZvcm11bGEgPSB5IH4geCkgKwogIG15dGhlbWUoKQoKZmlnMmUgPC0gbWV0YW1vcnBoX2RhdCAlPiUKICBnZ3Bsb3QoYWVzKHggPSBsYXJ2YWxfcGVyaW9kX2QsIHkgPSBtZXRhbW9ycGhfc2l6ZV9jbSkpICsgCiAgZ2VvbV9wb2ludChzaXplID0gMywgYWVzKGNvbG91ciA9IHdhdGVyX2RlcHRoKSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gbXlfY29sKSArCiAgeWxhYigiTWV0YW1vcnBoIHNpemUgKGNtKSIpICsgeGxhYigiTGFydmFsIHBlcmlvZCAoZGF5cykiKSArCiAgZ2dwbWlzYzo6c3RhdF9wb2x5X2xpbmUoZm9ybXVsYSA9IHkgfiB4LCBjb2xvdXIgPSAiIzA5NTE5QyIsIGZpbGwgPSAiI0M2REJFRiIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICBnZ3BtaXNjOjpzdGF0X3BvbHlfZXEodXNlX2xhYmVsKCJlcSIsICJSMiIsICJSMi5DSSIsICJQIiwgIm4iKSwgZm9ybXVsYSA9IHkgfiB4KSArCiAgbXl0aGVtZSgpCgpwbG90X2dyaWQoZmlnMmEgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSwKICAgICAgICAgICAgICAgICAgZmlnMmIgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSwKICAgICAgICAgICAgICAgICAgZmlnMmMgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSwKICAgICAgICAgICAgICAgICAgZmlnMmQgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSwKICAgICAgICAgICAgICAgICAgZmlnMmUgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSwKICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgbmNvbCA9IDMsIGFsaWduID0gImgiLCBheGlzID0gImJ0IiwgCiAgICAgICAgICAgICAgICAgIGxhYmVscz1jKCJBIiwiQiIsIkMiLCJEIiwiRSIsIiIpKQpgYGAKCioqKgoKIyMgU2Vzc2lvbiBJbmZvcm1hdGlvbiB7LX0KCmBgYHtyIHNlc3Npb25pbmZvLCBlY2hvID0gRkFMU0V9CnBhbmRlcjo6cGFuZGVyKHNlc3Npb25JbmZvKCksIGxvY2FsZSA9IEZBTFNFKQpgYGAK