1 Motivation

Experiment 1 was designed to test the hypothesis that in transitive object contexts, the definiteness of a DP containing a RC impacts the acceptability of extractin from that RC.

2 Design

This experiment uses the “length by complexity” design found in Sprouse, Wagers, and Phillips (2012) and others. On top of the necessary length and complexity (embedded clause structure) factors, this experiment adds a definiteness factor so that the strength of the island can be gauged in both definite and indefinite environments.

  1. Factors
    1. Length (of dependency)
      1. short (matrix subject extraction)
      2. long (embedded object extraction)
    2. Structure (of embedded clause)
      1. non-island (embedded that-clause)
      2. island (embedded RC or CP complement to N)
    3. Definiteness of the embedding/intervening DP
      1. definite (the-DP)
      2. indefinite (a-DP or bare plural)

Two sample item sets are given below. Half of the items used a RC as the island, and the other half used a CP complement to N as the island. These items had a slightly different design.

  1. Sample item (island = RC)
    1. Who appreciated that the students finished the optional assignment?
      (non-island|short|definite)
    2. Who appreciated that students finished the optional assignment?
      (non-island|short|indefinite)
    3. What did Patty appreciate that the students finished?
      (non-island|long|definite)
    4. What did Patty appreciate that students finished?
      (non-island|long|indefinite)
    5. Who appreciated the students who finished the optional assignment?
      (island|short|definite)
    6. Who appreciated students who finished the optional assignment?
      (island|short|indefinite)
    7. What did Patty appreciate the students who finished?
      (island|long|definite)
    8. What did Patty appreciate students who finished?
      (island|long|indefinite)
  2. Sample item (island = CP complement to N)
    1. Who claimed that the university wants to hire Stanley?
      (non-island|short|definite)
    2. Who claimed that a university wants to hire Stanley?
      (non-island|short|indefinite)
    3. Who did Salazar claim that the university wants to hire?
      (non-island|long|definite)
    4. Who did Salazar claim that a university wants to hire?
      (non-island|long|indefinite)
    5. Who heard the claim that the university wants to hire Stanley?
      (island|short|definite)
    6. Who heard a claim that the university wants to hire Stanley?
      (island|short|indefinite)
    7. Who did Salazar hear the claim that the university wants to hire?
      (island|long|definite)
    8. Who did Salazar hear a claim that the university wants to hire?
      (island|long|indefinite)

3 Analysis

The following code chunk reads the data into the R environment.

# Read in the formatted results
raw_data <- read.csv("results/results_12-14(3).csv")

# Fix first column name issue from excel
colnames(raw_data)[1] <- "list"

# Remove columns that won't be used
raw_data %<>% subset(select=c(list:gender, q6.response.categorized:rating))

# Sort the data into experimental data and filler data
raw_data %>% subset(item.type=="experimental") %>% droplevels -> experiment_data
raw_data %>% subset(item.type=="filler") %>% droplevels -> filler_data

The following table summarizes the ratings by condition. The lowest-rated conditions are those with an embedded island and a long extraction (island|long). This is the expected island effect. Another easily observable pattern is that the indefinite conditions are rated lower across the board compared to the corresponding definite condition.

# Make sure the ratings are numeric so they can be averaged
experiment_data$rating %<>% as.numeric

# Reorder factor levels so that the baseline levels come first
experiment_data$ec.type <- relevel(experiment_data$ec.type, "non.isl")
experiment_data$dependency.length <- relevel(experiment_data$dependency.length, "short")

# Group the data in long format according to these properties
experiment_data %>%
  group_by(ec.type, dependency.length, definiteness) %>%
  summarize(mean.rating = mean(rating),
            sd.rating = sd(rating),
            n = n(),
            se.rating = sd.rating/sqrt(n)) -> descriptive_summary

# Save the data for use in other scripts
saveRDS(descriptive_summary, file = "expt1_descriptive_summary")

# Present in a table
print(descriptive_summary)

It is worth comparing the two different kinds of islands used directly (RC islands and CP complement to noun islands). Although traditionally both of these clause types are included in the Complex NP Constraint, there is agreement that extraction from adjuncts is generally less allowed than extraction from complements. As shown in the table below, every condition with a CP complement to N (N-CP in the table) is rated slightly higher than its corresponding RC condition.

The following plot represents the overall ratings. The left side shows all the definite conditions, and when compared to the right side (indefinite conditions), one can see that the indefinite conditions are rated lower overall than the definite conditions; the ratings are shifted down but display the same general pattern.

The following plot represents the island conditions, comparing the ratings across the two island types.

3.1 Calculating the DD scores (island strength)

# Copy raw ratings to another data frame I can modify
raw_data -> raw_data_shrt

# Paste the length and structure conditions together
raw_data_shrt$structureXlength <- paste(raw_data_shrt$ec.type, "x", raw_data_shrt$dependency.length)

# Calculate z-scores
raw_data_shrt %>%
  group_by(subject) %>% # Group raw results by subject
  mutate(z_rating = scale(rating)) %>% # Get z-scores for each subject's ratings
  ungroup %>% # Undo group by subject
  subset(item.type == "experimental") %>% droplevels %>% # Select only experimental conditions, drop unused levels
  group_by(definiteness, structureXlength, item.set) %>% # Group by definiteness, pasted structureXlength, and item set
  summarize(mean_z_rating = mean(z_rating)) %>% # Average the z-scores per condition per item
  group_by(definiteness, structureXlength) %>% # Group this summary by condition only so that means of each condition per item set can be averaged
  summarize(mean_z_ratings = mean(mean_z_rating)) -> summary_zscores # Get the mean of the mean z-scores
print(summary_zscores)

# Get table to start making DD scores
z_DDs <- summary_zscores %>% spread(structureXlength, mean_z_ratings)

# Calculate D1, add to table
z_DDs$D1 <- z_DDs$`non.isl x long` - z_DDs$`isl x long`

# Calculate D2, add to table
z_DDs$D2 <- z_DDs$`non.isl x short` - z_DDs$`isl x short`

# Calculate DD, add to table
z_DDs$DD <- z_DDs$D1 - z_DDs$D2
print(z_DDs)

3.2 Ordinal regression analyses

# Reassign contrasts
contrasts(experiment_data$definiteness) <- c(-0.5, 0.5)
contrasts(experiment_data$ec.type) <- c(0.5, -0.5)
contrasts(experiment_data$dependency.length) <- c(0.5, -0.5)
# Make sure the ratings are a factor, rather than numbers
experiment_data$rating %<>% as.factor

# Run simple effects analysis w/ rating as dependent variable, and definiteness, structure, and length and their interactions as fixed effects
clm(rating ~ definiteness * ec.type * dependency.length, data = experiment_data) -> clm.def_ectype
summary(clm.def_ectype)
formula: rating ~ definiteness * ec.type * dependency.length
data:    experiment_data

Coefficients:
                                           Estimate Std. Error z value Pr(>|z|)    
definiteness1                             -0.485471   0.115190  -4.215 2.50e-05 ***
ec.type1                                   1.331746   0.121241  10.984  < 2e-16 ***
dependency.length1                         2.153736   0.129317  16.655  < 2e-16 ***
definiteness1:ec.type1                    -0.005638   0.229327  -0.025    0.980    
definiteness1:dependency.length1          -0.126322   0.229682  -0.550    0.582    
ec.type1:dependency.length1               -1.584530   0.238251  -6.651 2.92e-11 ***
definiteness1:ec.type1:dependency.length1  0.008292   0.458784   0.018    0.986    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
    Estimate Std. Error z value
1|2 -2.46784    0.11344 -21.755
2|3 -1.22807    0.08523 -14.409
3|4 -0.27012    0.07424  -3.638
4|5  0.54304    0.07367   7.371
5|6  1.48061    0.08265  17.915

Does the type of island have any effect on transparency to extraction? Let’s include island type as a fixed effect.

## Make sure ratings are a factor
experiment_data$rating %<>% factor

## Reassign contrasts
contrasts(experiment_data$island.type) <- c(0.5, -0.5)

## Run clm analysis
clm(rating ~ definiteness * ec.type * dependency.length * island.type, data = experiment_data) -> clm.w.island.type
summary(clm.w.island.type)
formula: rating ~ definiteness * ec.type * dependency.length * island.type
data:    experiment_data

Coefficients:
                                                        Estimate Std. Error z value Pr(>|z|)    
definiteness1                                          -0.515398   0.115868  -4.448 8.66e-06 ***
ec.type1                                                1.364246   0.121955  11.186  < 2e-16 ***
dependency.length1                                      2.188875   0.129987  16.839  < 2e-16 ***
island.type1                                            0.588257   0.116146   5.065 4.09e-07 ***
definiteness1:ec.type1                                  0.007104   0.230461   0.031    0.975    
definiteness1:dependency.length1                       -0.119952   0.230835  -0.520    0.603    
ec.type1:dependency.length1                            -1.628827   0.239307  -6.806 1.00e-11 ***
definiteness1:island.type1                              0.271805   0.230526   1.179    0.238    
ec.type1:island.type1                                  -0.290002   0.230782  -1.257    0.209    
dependency.length1:island.type1                        -0.300368   0.231074  -1.300    0.194    
definiteness1:ec.type1:dependency.length1               0.021228   0.461083   0.046    0.963    
definiteness1:ec.type1:island.type1                    -0.266892   0.460756  -0.579    0.562    
definiteness1:dependency.length1:island.type1           0.268622   0.461020   0.583    0.560    
ec.type1:dependency.length1:island.type1                0.278444   0.461669   0.603    0.546    
definiteness1:ec.type1:dependency.length1:island.type1  0.459113   0.921796   0.498    0.618    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
    Estimate Std. Error z value
1|2 -2.52152    0.11628 -21.685
2|3 -1.23754    0.08623 -14.352
3|4 -0.25760    0.07497  -3.436
4|5  0.56949    0.07449   7.645
5|6  1.51554    0.08358  18.134

A significant effect of island type would have shown up as a three-way interaction between structure (ec.type), length (dependency.length), and island type, but this interaction was not significant (p=0.546).

Mixed effects model by subjects and by items

Cumulative Link Mixed Model fitted with the Laplace approximation

formula: rating ~ definiteness * ec.type * dependency.length + (1 + definiteness *  
    ec.type * dependency.length | subject) + (1 + definiteness *  
    ec.type * dependency.length | item.set)
data:    experiment_data

Random effects:
 Groups   Name                                                  Variance Std.Dev. Corr         
 item.set (Intercept)                                           1.7862   1.3365                
          definitenessind                                       0.1050   0.3241    0.073       
          ec.typenon.isl                                        2.0225   1.4221   -0.850 -0.504
          dependency.lengthshort                                2.8047   1.6747   -0.613 -0.228
          definitenessind:ec.typenon.isl                        0.3558   0.5965    0.552 -0.004
          definitenessind:dependency.lengthshort                0.4556   0.6750   -0.579 -0.480
          ec.typenon.isl:dependency.lengthshort                 0.4607   0.6788    0.816  0.413
          definitenessind:ec.typenon.isl:dependency.lengthshort 0.9804   0.9901    0.901  0.122
 subject  (Intercept)                                           0.5943   0.7709                
          definitenessind                                       0.9241   0.9613    0.053       
          ec.typenon.isl                                        3.0084   1.7345   -0.563  0.523
          dependency.lengthshort                                0.7174   0.8470    0.097 -0.357
          definitenessind:ec.typenon.isl                        2.0440   1.4297    0.292 -0.516
          definitenessind:dependency.lengthshort                1.1113   1.0542   -0.480 -0.240
          ec.typenon.isl:dependency.lengthshort                 1.9321   1.3900    0.104 -0.073
          definitenessind:ec.typenon.isl:dependency.lengthshort 2.5198   1.5874    0.232  0.067
                                    
                                    
                                    
                                    
  0.785                             
 -0.625 -0.478                      
  0.731  0.252 -0.770               
 -0.852 -0.760  0.189 -0.325        
 -0.898 -0.758  0.784 -0.692  0.692 
                                    
                                    
                                    
  0.100                             
 -0.736  0.182                      
  0.471  0.515 -0.544               
 -0.684 -0.543  0.323 -0.362        
 -0.209 -0.777 -0.277 -0.334  0.281 
Number of groups:  subject 32,  item.set 32 

Coefficients:
                                          Estimate Std. Error z value Pr(>|z|)    
definiteness1                              -0.7634     0.1757  -4.345 1.39e-05 ***
ec.type1                                   -1.9688     0.2523  -7.802 6.10e-15 ***
dependency.length1                         -3.2657     0.3306  -9.877  < 2e-16 ***
definiteness1:ec.type1                      0.1490     0.4126   0.361    0.718    
definiteness1:dependency.length1            0.1955     0.3421   0.572    0.568    
ec.type1:dependency.length1                -2.2987     0.4679  -4.913 8.97e-07 ***
definiteness1:ec.type1:dependency.length1  -0.1072     0.6335  -0.169    0.866    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
    Estimate Std. Error z value
1|2  -3.5965     0.2744 -13.108
2|3  -1.8514     0.2482  -7.459
3|4  -0.4478     0.2391  -1.873
4|5   0.7636     0.2386   3.200
5|6   2.1879     0.2480   8.824

Sprouse, Jon, Matthew W. Wagers, and Colin Phillips. 2012. “A test of the relation between working memory capacity and syntactic island effects.” Language 88 (1): 82–123.

LS0tDQp0aXRsZTogIlJDIHN1YmV4dHJhY3Rpb24gaW4gRW5nbGlzaDogRXhwZXJpbWVudCAxIG5vdGVib29rIg0KYXV0aG9yOiBKYWtlIFcuIFZpbmNlbnQgKCYjMTA2OyYjMTE5OyYjMTE4OyYjMTA1OyYjMTEwOyYjOTk7JiMxMDE7biYjNjQ7JiMxMTc7YyYjMTE1O2MuZSYjMTAwO3UpDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjc3M6IHN0eWxlLmNzcw0KICBwZGZfZG9jdW1lbnQ6IA0KICAgIGtlZXBfdGV4OiB5ZXMNCmJpYmxpb2dyYXBoeTogLi4vLi4vLi4vLi4vLi4vLi4vRG9jdW1lbnRzL2xpYnJhcnkuYmliDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkob3JkaW5hbCkNCmxpYnJhcnkoa25pdHIpDQojIyBTZXQgd29ya2luZyBkaXJlY3RvcnkNCnNldHdkKCJDOi9Vc2Vycy9qYWtldy9PbmVEcml2ZS9Eb2N1bWVudHMvU2Nob29sL1VDU0MgR3JhZCBzY2hvb2wvUVAyL0V4cGVyaW1lbnQgMS8iKQ0KIyMgTG9hZCBzYXZlZCBjbG1tIGFuYWx5c2lzDQpyZWFkUkRTKCJjbG1tX2RlZl9lY3R5cGUucmRzIikgLT4gY2xtbS5kZWZfZWN0eXBlDQpgYGANCg0KIyBNb3RpdmF0aW9uDQoNCkV4cGVyaW1lbnQgMSB3YXMgZGVzaWduZWQgdG8gdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IGluIHRyYW5zaXRpdmUgb2JqZWN0IGNvbnRleHRzLCB0aGUgZGVmaW5pdGVuZXNzIG9mIGEgRFAgY29udGFpbmluZyBhIFJDIGltcGFjdHMgdGhlIGFjY2VwdGFiaWxpdHkgb2YgZXh0cmFjdGluIGZyb20gdGhhdCBSQy4NCg0KIyBEZXNpZ24NCg0KVGhpcyBleHBlcmltZW50IHVzZXMgdGhlICJsZW5ndGggYnkgY29tcGxleGl0eSIgZGVzaWduIGZvdW5kIGluIEBTcHJvdXNlMjAxMiBhbmQgb3RoZXJzLiBPbiB0b3Agb2YgdGhlIG5lY2Vzc2FyeSBsZW5ndGggYW5kIGNvbXBsZXhpdHkgKGVtYmVkZGVkIGNsYXVzZSBzdHJ1Y3R1cmUpIGZhY3RvcnMsIHRoaXMgZXhwZXJpbWVudCBhZGRzIGEgZGVmaW5pdGVuZXNzIGZhY3RvciBzbyB0aGF0IHRoZSBzdHJlbmd0aCBvZiB0aGUgaXNsYW5kIGNhbiBiZSBnYXVnZWQgaW4gYm90aCBkZWZpbml0ZSBhbmQgaW5kZWZpbml0ZSBlbnZpcm9ubWVudHMuDQoNCjEuICoqRmFjdG9ycyoqDQogICAgYS4gPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+TGVuZ3RoPC9zcGFuPiAob2YgZGVwZW5kZW5jeSkNCiAgICAgICAgaS4gPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+c2hvcnQ8L3NwYW4+IChtYXRyaXggc3ViamVjdCBleHRyYWN0aW9uKQ0KICAgICAgICBpaS4gPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+bG9uZzwvc3Bhbj4gKGVtYmVkZGVkIG9iamVjdCBleHRyYWN0aW9uKQ0KICAgIGIuIDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPlN0cnVjdHVyZTwvc3Bhbj4gKG9mIGVtYmVkZGVkIGNsYXVzZSkNCiAgICAgICAgaS4gPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+bm9uLWlzbGFuZDwvc3Bhbj4gKGVtYmVkZGVkICp0aGF0Ki1jbGF1c2UpDQogICAgICAgIGlpLiA8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5pc2xhbmQ8L3NwYW4+IChlbWJlZGRlZCBSQyBvciBDUCBjb21wbGVtZW50IHRvIE4pDQogICAgYy4gPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+RGVmaW5pdGVuZXNzIG9mIHRoZSBlbWJlZGRpbmcvaW50ZXJ2ZW5pbmcgRFANCiAgICAgICAgaS4gPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+ZGVmaW5pdGU8L3NwYW4+ICgqdGhlKi1EUCkNCiAgICAgICAgaWkuIDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPmluZGVmaW5pdGU8L3NwYW4+ICgqYSotRFAgb3IgYmFyZSBwbHVyYWwpDQoNClR3byBzYW1wbGUgaXRlbSBzZXRzIGFyZSBnaXZlbiBiZWxvdy4gSGFsZiBvZiB0aGUgaXRlbXMgdXNlZCBhIFJDIGFzIHRoZSBpc2xhbmQsIGFuZCB0aGUgb3RoZXIgaGFsZiB1c2VkIGEgQ1AgY29tcGxlbWVudCB0byBOIGFzIHRoZSBpc2xhbmQuIFRoZXNlIGl0ZW1zIGhhZCBhIHNsaWdodGx5IGRpZmZlcmVudCBkZXNpZ24uDQoNCjIuICoqU2FtcGxlIGl0ZW0qKiAoaXNsYW5kID0gUkMpDQogICAgYS4gV2hvIGFwcHJlY2lhdGVkIHRoYXQgdGhlIHN0dWRlbnRzIGZpbmlzaGVkIHRoZSBvcHRpb25hbCBhc3NpZ25tZW50PzxkaXYgY2xhc3M9ImFsaWducmlnaHQiPig8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5ub24taXNsYW5kfHNob3J0fGRlZmluaXRlPC9zcGFuPik8L2Rpdj4NCiAgICBiLiBXaG8gYXBwcmVjaWF0ZWQgdGhhdCBzdHVkZW50cyBmaW5pc2hlZCB0aGUgb3B0aW9uYWwgYXNzaWdubWVudD8gPGRpdiBjbGFzcz0iYWxpZ25yaWdodCI+KDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPm5vbi1pc2xhbmR8c2hvcnR8aW5kZWZpbml0ZTwvc3Bhbj4pPC9kaXY+DQogICAgYy4gV2hhdCBkaWQgUGF0dHkgYXBwcmVjaWF0ZSB0aGF0IHRoZSBzdHVkZW50cyBmaW5pc2hlZD8gPGRpdiBjbGFzcz0iYWxpZ25yaWdodCI+KDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPm5vbi1pc2xhbmR8bG9uZ3xkZWZpbml0ZTwvc3Bhbj4pPC9kaXY+DQogICAgZC4gV2hhdCBkaWQgUGF0dHkgYXBwcmVjaWF0ZSB0aGF0IHN0dWRlbnRzIGZpbmlzaGVkPyA8ZGl2IGNsYXNzPSJhbGlnbnJpZ2h0Ij4oPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+bm9uLWlzbGFuZHxsb25nfGluZGVmaW5pdGU8L3NwYW4+KTwvZGl2Pg0KICAgIGUuIFdobyBhcHByZWNpYXRlZCB0aGUgc3R1ZGVudHMgd2hvIGZpbmlzaGVkIHRoZSBvcHRpb25hbCBhc3NpZ25tZW50PyA8ZGl2IGNsYXNzPSJhbGlnbnJpZ2h0Ij4oPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+aXNsYW5kfHNob3J0fGRlZmluaXRlPC9zcGFuPik8L2Rpdj4NCiAgICBmLiBXaG8gYXBwcmVjaWF0ZWQgc3R1ZGVudHMgd2hvIGZpbmlzaGVkIHRoZSBvcHRpb25hbCBhc3NpZ25tZW50PyA8ZGl2IGNsYXNzPSJhbGlnbnJpZ2h0Ij4oPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+aXNsYW5kfHNob3J0fGluZGVmaW5pdGU8L3NwYW4+KTwvZGl2Pg0KICAgIGcuIFdoYXQgZGlkIFBhdHR5IGFwcHJlY2lhdGUgdGhlIHN0dWRlbnRzIHdobyBmaW5pc2hlZD8gPGRpdiBjbGFzcz0iYWxpZ25yaWdodCI+KDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPmlzbGFuZHxsb25nfGRlZmluaXRlPC9zcGFuPik8L2Rpdj4NCiAgICBoLiBXaGF0IGRpZCBQYXR0eSBhcHByZWNpYXRlIHN0dWRlbnRzIHdobyBmaW5pc2hlZD8gPGRpdiBjbGFzcz0iYWxpZ25yaWdodCI+KDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPmlzbGFuZHxsb25nfGluZGVmaW5pdGU8L3NwYW4+KTwvZGl2Pg0KDQozLiAqKlNhbXBsZSBpdGVtKiogKGlzbGFuZCA9IENQIGNvbXBsZW1lbnQgdG8gTikNCiAgICBhLiBXaG8gY2xhaW1lZCB0aGF0IHRoZSB1bml2ZXJzaXR5IHdhbnRzIHRvIGhpcmUgU3RhbmxleT88ZGl2IGNsYXNzPSJhbGlnbnJpZ2h0Ij4oPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+bm9uLWlzbGFuZHxzaG9ydHxkZWZpbml0ZTwvc3Bhbj4pPC9kaXY+DQogICAgYi4gV2hvIGNsYWltZWQgdGhhdCBhIHVuaXZlcnNpdHkgd2FudHMgdG8gaGlyZSBTdGFubGV5PzxkaXYgY2xhc3M9ImFsaWducmlnaHQiPig8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5ub24taXNsYW5kfHNob3J0fGluZGVmaW5pdGU8L3NwYW4+KTwvZGl2Pg0KICAgIGMuIFdobyBkaWQgU2FsYXphciBjbGFpbSB0aGF0IHRoZSB1bml2ZXJzaXR5IHdhbnRzIHRvIGhpcmU/PGRpdiBjbGFzcz0iYWxpZ25yaWdodCI+KDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPm5vbi1pc2xhbmR8bG9uZ3xkZWZpbml0ZTwvc3Bhbj4pPC9kaXY+DQogICAgZC4gV2hvIGRpZCBTYWxhemFyIGNsYWltIHRoYXQgYSB1bml2ZXJzaXR5IHdhbnRzIHRvIGhpcmU/PGRpdiBjbGFzcz0iYWxpZ25yaWdodCI+KDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPm5vbi1pc2xhbmR8bG9uZ3xpbmRlZmluaXRlPC9zcGFuPik8L2Rpdj4NCiAgICBlLiBXaG8gaGVhcmQgdGhlIGNsYWltIHRoYXQgdGhlIHVuaXZlcnNpdHkgd2FudHMgdG8gaGlyZSBTdGFubGV5PzxkaXYgY2xhc3M9ImFsaWducmlnaHQiPig8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5pc2xhbmR8c2hvcnR8ZGVmaW5pdGU8L3NwYW4+KTwvZGl2Pg0KICAgIGYuIFdobyBoZWFyZCBhIGNsYWltIHRoYXQgdGhlIHVuaXZlcnNpdHkgd2FudHMgdG8gaGlyZSBTdGFubGV5PzxkaXYgY2xhc3M9ImFsaWducmlnaHQiPig8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5pc2xhbmR8c2hvcnR8aW5kZWZpbml0ZTwvc3Bhbj4pPC9kaXY+DQogICAgZy4gV2hvIGRpZCBTYWxhemFyIGhlYXIgdGhlIGNsYWltIHRoYXQgdGhlIHVuaXZlcnNpdHkgd2FudHMgdG8gaGlyZT88ZGl2IGNsYXNzPSJhbGlnbnJpZ2h0Ij4oPHNwYW4gY2xhc3M9InNtYWxsY2FwcyI+aXNsYW5kfGxvbmd8ZGVmaW5pdGU8L3NwYW4+KTwvZGl2Pg0KICAgIGguIFdobyBkaWQgU2FsYXphciBoZWFyIGEgY2xhaW0gdGhhdCB0aGUgdW5pdmVyc2l0eSB3YW50cyB0byBoaXJlPzxkaXYgY2xhc3M9ImFsaWducmlnaHQiPig8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5pc2xhbmR8bG9uZ3xpbmRlZmluaXRlPC9zcGFuPik8L2Rpdj4NCg0KIyBBbmFseXNpcw0KDQpUaGUgZm9sbG93aW5nIGNvZGUgY2h1bmsgcmVhZHMgdGhlIGRhdGEgaW50byB0aGUgUiBlbnZpcm9ubWVudC4NCg0KYGBge3IgZ2V0RGF0YX0NCiMgUmVhZCBpbiB0aGUgZm9ybWF0dGVkIHJlc3VsdHMNCnJhd19kYXRhIDwtIHJlYWQuY3N2KCJyZXN1bHRzL3Jlc3VsdHNfMTItMTQoMykuY3N2IikNCg0KIyBGaXggZmlyc3QgY29sdW1uIG5hbWUgaXNzdWUgZnJvbSBleGNlbA0KY29sbmFtZXMocmF3X2RhdGEpWzFdIDwtICJsaXN0Ig0KDQojIFJlbW92ZSBjb2x1bW5zIHRoYXQgd29uJ3QgYmUgdXNlZA0KcmF3X2RhdGEgJTw+JSBzdWJzZXQoc2VsZWN0PWMobGlzdDpnZW5kZXIsIHE2LnJlc3BvbnNlLmNhdGVnb3JpemVkOnJhdGluZykpDQoNCiMgU29ydCB0aGUgZGF0YSBpbnRvIGV4cGVyaW1lbnRhbCBkYXRhIGFuZCBmaWxsZXIgZGF0YQ0KcmF3X2RhdGEgJT4lIHN1YnNldChpdGVtLnR5cGU9PSJleHBlcmltZW50YWwiKSAlPiUgZHJvcGxldmVscyAtPiBleHBlcmltZW50X2RhdGENCnJhd19kYXRhICU+JSBzdWJzZXQoaXRlbS50eXBlPT0iZmlsbGVyIikgJT4lIGRyb3BsZXZlbHMgLT4gZmlsbGVyX2RhdGENCmBgYA0KDQpUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIHJhdGluZ3MgYnkgY29uZGl0aW9uLiBUaGUgbG93ZXN0LXJhdGVkIGNvbmRpdGlvbnMgYXJlIHRob3NlIHdpdGggYW4gZW1iZWRkZWQgaXNsYW5kIGFuZCBhIGxvbmcgZXh0cmFjdGlvbiAoPHNwYW4gc3R5bGUgPSAic21hbGxjYXBzIj5pc2xhbmR8bG9uZzwvc3Bhbj4pLiBUaGlzIGlzIHRoZSBleHBlY3RlZCBpc2xhbmQgZWZmZWN0LiBBbm90aGVyIGVhc2lseSBvYnNlcnZhYmxlIHBhdHRlcm4gaXMgdGhhdCB0aGUgaW5kZWZpbml0ZSBjb25kaXRpb25zIGFyZSByYXRlZCBsb3dlciBhY3Jvc3MgdGhlIGJvYXJkIGNvbXBhcmVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRlZmluaXRlIGNvbmRpdGlvbi4NCg0KYGBgIHtyIGRlc2NyaXB0aXZlU3VtbWFyeX0NCiMgTWFrZSBzdXJlIHRoZSByYXRpbmdzIGFyZSBudW1lcmljIHNvIHRoZXkgY2FuIGJlIGF2ZXJhZ2VkDQpleHBlcmltZW50X2RhdGEkcmF0aW5nICU8PiUgYXMubnVtZXJpYw0KDQojIFJlb3JkZXIgZmFjdG9yIGxldmVscyBzbyB0aGF0IHRoZSBiYXNlbGluZSBsZXZlbHMgY29tZSBmaXJzdA0KZXhwZXJpbWVudF9kYXRhJGVjLnR5cGUgPC0gcmVsZXZlbChleHBlcmltZW50X2RhdGEkZWMudHlwZSwgIm5vbi5pc2wiKQ0KZXhwZXJpbWVudF9kYXRhJGRlcGVuZGVuY3kubGVuZ3RoIDwtIHJlbGV2ZWwoZXhwZXJpbWVudF9kYXRhJGRlcGVuZGVuY3kubGVuZ3RoLCAic2hvcnQiKQ0KDQojIEdyb3VwIHRoZSBkYXRhIGluIGxvbmcgZm9ybWF0IGFjY29yZGluZyB0byB0aGVzZSBwcm9wZXJ0aWVzDQpleHBlcmltZW50X2RhdGEgJT4lDQogIGdyb3VwX2J5KGVjLnR5cGUsIGRlcGVuZGVuY3kubGVuZ3RoLCBkZWZpbml0ZW5lc3MpICU+JQ0KICBzdW1tYXJpemUobWVhbi5yYXRpbmcgPSBtZWFuKHJhdGluZyksDQogICAgICAgICAgICBzZC5yYXRpbmcgPSBzZChyYXRpbmcpLA0KICAgICAgICAgICAgbiA9IG4oKSwNCiAgICAgICAgICAgIHNlLnJhdGluZyA9IHNkLnJhdGluZy9zcXJ0KG4pKSAtPiBkZXNjcmlwdGl2ZV9zdW1tYXJ5DQoNCiMgU2F2ZSB0aGUgZGF0YSBmb3IgdXNlIGluIG90aGVyIHNjcmlwdHMNCnNhdmVSRFMoZGVzY3JpcHRpdmVfc3VtbWFyeSwgZmlsZSA9ICJleHB0MV9kZXNjcmlwdGl2ZV9zdW1tYXJ5IikNCg0KIyBQcmVzZW50IGluIGEgdGFibGUNCnByaW50KGRlc2NyaXB0aXZlX3N1bW1hcnkpDQpgYGANCg0KSXQgaXMgd29ydGggY29tcGFyaW5nIHRoZSB0d28gZGlmZmVyZW50IGtpbmRzIG9mIGlzbGFuZHMgdXNlZCBkaXJlY3RseSAoUkMgaXNsYW5kcyBhbmQgQ1AgY29tcGxlbWVudCB0byBub3VuIGlzbGFuZHMpLiBBbHRob3VnaCB0cmFkaXRpb25hbGx5IGJvdGggb2YgdGhlc2UgY2xhdXNlIHR5cGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgQ29tcGxleCBOUCBDb25zdHJhaW50LCB0aGVyZSBpcyBhZ3JlZW1lbnQgdGhhdCBleHRyYWN0aW9uIGZyb20gYWRqdW5jdHMgaXMgZ2VuZXJhbGx5IGxlc3MgYWxsb3dlZCB0aGFuIGV4dHJhY3Rpb24gZnJvbSBjb21wbGVtZW50cy4gQXMgc2hvd24gaW4gdGhlIHRhYmxlIGJlbG93LCBldmVyeSBjb25kaXRpb24gd2l0aCBhIENQIGNvbXBsZW1lbnQgdG8gTiAoTi1DUCBpbiB0aGUgdGFibGUpIGlzIHJhdGVkIHNsaWdodGx5IGhpZ2hlciB0aGFuIGl0cyBjb3JyZXNwb25kaW5nIFJDIGNvbmRpdGlvbi4NCg0KYGBge3IgZGVzY3JpcHRpdmVTdW1tYXJ5SXNsYW5kc0J5VHlwZSwgZWNobyA9IEZBTFNFfQ0KIyBTdWJzZXQgdGhlIGRhdGEgc28gaXQgb25seSBpbmNsdWRlcyB0aGUgaXNsYW5kIGNvbmRpdGlvbnMNCmV4cGVyaW1lbnRfZGF0YSAlPiUgc3Vic2V0KGVjLnR5cGUgPT0gImlzbCIpIC0+IGV4cGVyaW1lbnRfZGF0YV9pc2wNCg0KIyBPcmdhbml6ZSB0aGUgZGF0YSBieSBpc2xhbmQgdHlwZSBhbmQgY29uZGl0aW9uDQpleHBlcmltZW50X2RhdGFfaXNsICU+JQ0KICBncm91cF9ieShpc2xhbmQudHlwZSwgZGVwZW5kZW5jeS5sZW5ndGgsIGRlZmluaXRlbmVzcykgJT4lDQogIHN1bW1hcml6ZShtZWFuLnJhdGluZyA9IG1lYW4ocmF0aW5nKSwNCiAgICAgICAgICAgIHNkLnJhdGluZyA9IHNkKHJhdGluZyksDQogICAgICAgICAgICBuID0gbigpLA0KICAgICAgICAgICAgc2UucmF0aW5nID0gc2QucmF0aW5nL3NxcnQobikpIC0+IGRlc2NyaXB0aXZlX3N1bW1hcnlfaXNsDQoNCiMgUHJlc2VudCBpbiBhIHRhYmxlDQpwcmludChkZXNjcmlwdGl2ZV9zdW1tYXJ5X2lzbCkNCmBgYA0KDQpUaGUgZm9sbG93aW5nIHBsb3QgcmVwcmVzZW50cyB0aGUgb3ZlcmFsbCByYXRpbmdzLiBUaGUgbGVmdCBzaWRlIHNob3dzIGFsbCB0aGUgZGVmaW5pdGUgY29uZGl0aW9ucywgYW5kIHdoZW4gY29tcGFyZWQgdG8gdGhlIHJpZ2h0IHNpZGUgKGluZGVmaW5pdGUgY29uZGl0aW9ucyksIG9uZSBjYW4gc2VlIHRoYXQgdGhlIGluZGVmaW5pdGUgY29uZGl0aW9ucyBhcmUgcmF0ZWQgbG93ZXIgb3ZlcmFsbCB0aGFuIHRoZSBkZWZpbml0ZSBjb25kaXRpb25zOyB0aGUgcmF0aW5ncyBhcmUgc2hpZnRlZCBkb3duIGJ1dCBkaXNwbGF5IHRoZSBzYW1lIGdlbmVyYWwgcGF0dGVybi4NCg0KYGBgIHtyIGRlc2NyaXB0aXZlUGxvdCwgZWNobz1GQUxTRX0NCiMgUGxvdCB0aGUgcmF0aW5ncyBhdmVyYWdlcw0KZGVzY3JpcHRpdmVfc3VtbWFyeSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGVwZW5kZW5jeS5sZW5ndGgsDQogICAgICAgICAgICAgeSA9IG1lYW4ucmF0aW5nLA0KICAgICAgICAgICAgIGNvbG9yID0gZWMudHlwZSwNCiAgICAgICAgICAgICBncm91cCA9IGVjLnR5cGUpKSAtPiBkZXNjcmlwdGl2ZV9wbG90DQoNCiMgRmFjZXQgYnkgZGVmaW5pdGVuZXNzDQpkZXNjcmlwdGl2ZV9wbG90ICsgZmFjZXRfZ3JpZCgufmRlZmluaXRlbmVzcykgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICAjIENoYW5nZSB0aGUgZGVmYXVsdCBsYWJlbHMNCiAgbGFicyh4ID0gIkxlbmd0aCIsDQogICAgICAgeSA9ICJNZWFuIHJhdGluZyIsDQogICAgICAgY29sb3IgPSAiU3RydWN0dXJlIikgKw0KICBzY2FsZV9jb2xvcl9kaXNjcmV0ZShsYWJlbHMgPSBjKCJOb24taXNsYW5kIiwgIklzbGFuZCIpKSArDQogICMgQWRkIGVycm9yIGJhcnMgYmFzZWQgb24gdGhlIHN0YW5kYXJkIGVycm9ycyBpbiBkZXNjcmlwdGl2ZV9zdW1tYXJ5DQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWFuLnJhdGluZyAtIHNlLnJhdGluZywNCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IG1lYW4ucmF0aW5nICsgc2UucmF0aW5nLA0KICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDAuMTUpKSArDQogIGdlb21fcG9pbnQoYWVzKGNvbCA9IGVjLnR5cGUpLA0KICAgICAgICAgICAgIHNpemUgPSAzKSArDQogICMgQ2hhbmdlIGZvbnQgc2l6ZXMNCiAgdGhlbWUobGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksDQogICAgICAgIHN0cmlwLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpLA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKDAuNSwgTkEsIDAuNSwgTkEsICJjbSIpKSwNCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbihOQSwgMC41LCBOQSwgMC41LCAiY20iKSkpIC0+IGRlc2NyaXB0aXZlX3Bsb3QNCg0KIyBQcmludCB0aGUgcGxvdA0KcHJpbnQoZGVzY3JpcHRpdmVfcGxvdCkNCmBgYA0KDQpUaGUgZm9sbG93aW5nIHBsb3QgcmVwcmVzZW50cyB0aGUgaXNsYW5kIGNvbmRpdGlvbnMsIGNvbXBhcmluZyB0aGUgcmF0aW5ncyBhY3Jvc3MgdGhlIHR3byBpc2xhbmQgdHlwZXMuDQoNCmBgYHtyIGRlc2NyaXB0aXZlUGxvdElzbCwgZWNobyA9IEZBTFNFfQ0KZGVzY3JpcHRpdmVfc3VtbWFyeV9pc2wgJT4lDQogIGdncGxvdChhZXMoeCA9IGRlcGVuZGVuY3kubGVuZ3RoLA0KICAgICAgICAgICAgIHkgPSBtZWFuLnJhdGluZywNCiAgICAgICAgICAgICBjb2xvciA9IGlzbGFuZC50eXBlLA0KICAgICAgICAgICAgIGdyb3VwID0gaXNsYW5kLnR5cGUpKSAtPiBkZXNjcmlwdGl2ZV9wbG90X2lzbA0KDQpkZXNjcmlwdGl2ZV9wbG90X2lzbCArIGZhY2V0X2dyaWQoLn5kZWZpbml0ZW5lc3MpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh4ID0gIkxlbmd0aCIsDQogICAgICAgeSA9ICJNZWFuIHJhdGluZyIsDQogICAgICAgY29sb3VyID0gIklzbGFuZCB0eXBlIikgKw0KICBnZW9tX3BvaW50KGFlcyhjb2wgPSBpc2xhbmQudHlwZSksDQogICAgICAgICAgICAgc2l6ZSA9IDMpICsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IG1lYW4ucmF0aW5nIC0gc2UucmF0aW5nLA0KICAgICAgICAgICAgICAgICAgICB5bWF4ID0gbWVhbi5yYXRpbmcgKyBzZS5yYXRpbmcsDQogICAgICAgICAgICAgICAgICAgIGNvbCA9IGlzbGFuZC50eXBlKSwNCiAgICAgICAgICAgICAgICB3aWR0aCA9IDAuMTUpICsNCiAgdGhlbWUobGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksDQogICAgICAgIHN0cmlwLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4oMC41LCBOQSwgMC41LCBOQSwgImNtIikpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4oTkEsIDAuNSwgTkEsIDAuNSwgImNtIikpKSAtPiBkZXNjcmlwdGl2ZV9wbG90X2lzbA0KZGVzY3JpcHRpdmVfcGxvdF9pc2wNCmBgYA0KDQo8IS0tIFRoZSB0d28gZm9sbG93aW5nIHBsb3RzIGFyZSBiYXNlZCBvbiB0aGUgc3Vic2V0IG9mIHRoZSBkYXRhIHRoYXQgaGFzIHRoZSBSQyBpdGVtIHNldHMgc2VwYXJhdGVkIGZyb20gdGhlIE4tQ1AgaXRlbSBzZXRzLCByZXNwZWN0aXZlbHkuIC0tPg0KYGBge3IgcmF0aW5nc1Bsb3RSQywgZWNobyA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQojIyBTdWJzZXQgUkMgaXRlbSBzZXRzDQpleHBlcmltZW50X2RhdGEgJT4lIHN1YnNldChpc2xhbmQudHlwZSA9PSAiUkMiKSAtPiBleHBlcmltZW50X2RhdGFfUkMNCiMjIE9yZ2FuaXplDQpleHBlcmltZW50X2RhdGFfUkMgJT4lDQogIGdyb3VwX2J5KGRlcGVuZGVuY3kubGVuZ3RoLCBkZWZpbml0ZW5lc3MpICU+JQ0KICBzdW1tYXJpemUobWVhbi5yYXRpbmcgPSBtZWFuKHJhdGluZyksDQogICAgICAgICAgICBzZC5yYXRpbmcgPSBzZChyYXRpbmcpLA0KICAgICAgICAgICAgbiA9IG4oKSwNCiAgICAgICAgICAgIHNlLnJhdGluZyA9IHNkLnJhdGluZy9zcXJ0KG4pKSAtPiBkZXNjcmlwdGl2ZV9zdW1tYXJ5X1JDDQojIyBNYWtlIGEgcGxvdA0KZGVzY3JpcHRpdmVfc3VtbWFyeV9SQyAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGVwZW5kZW5jeS5sZW5ndGgsIHkgPSBtZWFuLnJhdGluZykpIC0+IGRlc2NyaXB0aXZlX3Bsb3RfUkMNCmRlc2NyaXB0aXZlX3Bsb3RfUkMgKyBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBtZWFuLnJhdGluZyAtIHNlLnJhdGluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHltYXggPSBtZWFuLnJhdGluZyArIHNlLnJhdGluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGRlZmluaXRlbmVzcykpDQpgYGANCg0KYGBge3IgcmF0aW5nc1Bsb3ROQ1AsIGVjaG89IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQpleHBlcmltZW50X2RhdGEgJT4lIHN1YnNldChpc2xhbmQudHlwZSA9PSAiTi1DUCIpLT4gZXhwZXJpbWVudF9kYXRhX05DUA0KZXhwZXJpbWVudF9kYXRhX05DUCAlPiUNCiAgZ3JvdXBfYnkoZGVwZW5kZW5jeS5sZW5ndGgsIGRlZmluaXRlbmVzcykgJT4lDQogIHN1bW1hcml6ZShtZWFuLnJhdGluZyA9IG1lYW4ocmF0aW5nKSwNCiAgICAgICAgICAgIHNkLnJhdGluZyA9IHNkKHJhdGluZyksDQogICAgICAgICAgICBuID0gbigpLA0KICAgICAgICAgICAgc2UucmF0aW5nID0gc2QucmF0aW5nL3NxcnQobikpIC0+IGRlc2NyaXB0aXZlX3N1bW1hcnlfTkNQDQojIyBNYWtlIGEgcGxvdA0KZGVzY3JpcHRpdmVfc3VtbWFyeV9OQ1AgJT4lDQogIGdncGxvdChhZXMoeCA9IGRlcGVuZGVuY3kubGVuZ3RoLCB5ID0gbWVhbi5yYXRpbmcpKSAtPiBkZXNjcmlwdGl2ZV9wbG90X05DUA0KZGVzY3JpcHRpdmVfcGxvdF9OQ1AgKyBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBtZWFuLnJhdGluZyAtIHNlLnJhdGluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5bWF4ID0gbWVhbi5yYXRpbmcgKyBzZS5yYXRpbmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gZGVmaW5pdGVuZXNzKSkNCmBgYA0KDQpgYGB7ciByYXRpbmdzUGxvdCwgZWNobyA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQojIyBUaGlzIHByb2R1Y2VzIGEgcmF0aW5ncyBwbG90IHRoYXQgYWJzdHJhY3RzIGF3YXkgZnJvbSBkZWZpbml0ZW5lc3MNCmV4cGVyaW1lbnRfZGF0YSAlPiUgZ2dwbG90KGFlcyh4ID0gcmF0aW5nKSkgLT4gcmF0aW5nc19wbG90DQoNCnJhdGluZ3NfcGxvdCArIGZhY2V0X2dyaWQoZWMudHlwZSB+IGRlcGVuZGVuY3kubGVuZ3RoKSArDQogIGdlb21faGlzdG9ncmFtKGJpbnM9NikNCmBgYA0KDQo8IS0tICMjIyMgTm93IGxvb2tpbmcgb25seSBhdCBpc2xhbmRzLi4uIC0tPg0KDQpgYGB7ciByYXRpbmdzUGxvdElzbGFuZCwgZWNobyA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQpleHBlcmltZW50X2RhdGEgJT4lIHN1YnNldChlYy50eXBlPT0iaXNsIikgJT4lIGRyb3BsZXZlbHMgJT4lIGdncGxvdChhZXMoeCA9IHJhdGluZykpIC0+IGlzbF9yYXRpbmdzX3Bsb3QNCg0KaXNsX3JhdGluZ3NfcGxvdCArIGZhY2V0X2dyaWQoZGVmaW5pdGVuZXNzIH4gZGVwZW5kZW5jeS5sZW5ndGgpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlucz02KQ0KYGBgDQoNCmBgYHtyIHJhdGluZ3NQbG90SXNsYW5kRmlsbEJ5RGVmLCBlY2hvID0gRkFMU0UsIGluY2x1ZGUgPSBGQUxTRX0NCiMjIE1ha2Ugc3VyZSB0aGUgcmF0aW5ncyBjb2x1bW4gaXMgbnVtZXJpYw0KZXhwZXJpbWVudF9kYXRhJHJhdGluZyAlPD4lIGFzLm51bWVyaWMNCg0KIyMgVGhlIGZvbGxvd2luZyBsaW5lIGlzIHRoZSBzYW1lIGFzIGFib3ZlLCBqdXN0IHdpdGggYSBkaWZmZXJlbnQgdmFyaWFibGUgYXNzaWduZWQgdG8gdGhlIGdyYXBoDQpleHBlcmltZW50X2RhdGEgJT4lIHN1YnNldChlYy50eXBlPT0iaXNsIikgJT4lIGRyb3BsZXZlbHMgJT4lIGdncGxvdChhZXMoeCA9IHJhdGluZykpIC0+IGlzbF9yYXRpbmdzX3Bsb3RfZGVmRmlsbA0KDQojIyBSZWR1Y2UgdGhlIGZhY2V0aW5nIHNvIHRoYXQgdGhlcmUgYXJlIG9ubHkgdHdvIGJsb2NrcyBpbiB0aGUgZ3JhcGg6IGxvbmcgYW5kIHNob3J0DQojIyBGaWxsIGJ5IGRlZmluaXRlbmVzcy4NCmlzbF9yYXRpbmdzX3Bsb3RfZGVmRmlsbCArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGZhY2V0X2dyaWQoLiB+IGRlcGVuZGVuY3kubGVuZ3RoKSArDQogIGdlb21faGlzdG9ncmFtKGJpbnM9NiwNCiAgICAgICAgICAgICAgICAgYWVzKGZpbGwgPSBkZWZpbml0ZW5lc3M9PSJkZWYiKSwNCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAiaWRlbnRpdHkiLA0KICAgICAgICAgICAgICAgICBhbHBoYSA9IDAuNSkgKw0KICAjIyBFZGl0IHRoZSBsYWJlbHMNCiAgbGFicyh4ID0gIlJhdGluZyIsDQogICAgICAgeSA9ICJDb3VudCAob2YgcmF0aW5nKSIpICsNCiAgIyMgRWRpdCB0aGUgbGVnZW5kIHRpdGxlIGFuZCBsYWJlbHMNCiAgIyMgVXNpbmcgZmlsbCBoZXJlIGIvYyB0aGUgaGlzdG9ncmFtIHdhcyBnZW5lcmF0ZWQgdXNpbmcgJ2ZpbGwnDQogIHNjYWxlX2ZpbGxfZGlzY3JldGUoIkRlZmluaXRlbmVzcyIsIGxhYmVscyA9IGMoIkluZGVmaW5pdGUiLCAiRGVmaW5pdGUiKSkgKw0KICB0aGVtZShsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpLA0KICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwNCiAgICAgICAgc3RyaXAudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSkpIC0+IGlzbF9yYXRpbmdzX3Bsb3RfZGVmRmlsbA0KaXNsX3JhdGluZ3NfcGxvdF9kZWZGaWxsDQpgYGANCg0KIyMgQ2FsY3VsYXRpbmcgdGhlIEREIHNjb3JlcyAoaXNsYW5kIHN0cmVuZ3RoKQ0KDQpgYGB7ciB6c2NvcmVzX2Zvcl9ERHN9DQojIENvcHkgcmF3IHJhdGluZ3MgdG8gYW5vdGhlciBkYXRhIGZyYW1lIEkgY2FuIG1vZGlmeQ0KcmF3X2RhdGEgLT4gcmF3X2RhdGFfc2hydA0KDQojIFBhc3RlIHRoZSBsZW5ndGggYW5kIHN0cnVjdHVyZSBjb25kaXRpb25zIHRvZ2V0aGVyDQpyYXdfZGF0YV9zaHJ0JHN0cnVjdHVyZVhsZW5ndGggPC0gcGFzdGUocmF3X2RhdGFfc2hydCRlYy50eXBlLCAieCIsIHJhd19kYXRhX3NocnQkZGVwZW5kZW5jeS5sZW5ndGgpDQoNCiMgQ2FsY3VsYXRlIHotc2NvcmVzDQpyYXdfZGF0YV9zaHJ0ICU+JQ0KICBncm91cF9ieShzdWJqZWN0KSAlPiUgIyBHcm91cCByYXcgcmVzdWx0cyBieSBzdWJqZWN0DQogIG11dGF0ZSh6X3JhdGluZyA9IHNjYWxlKHJhdGluZykpICU+JSAjIEdldCB6LXNjb3JlcyBmb3IgZWFjaCBzdWJqZWN0J3MgcmF0aW5ncw0KICB1bmdyb3VwICU+JSAjIFVuZG8gZ3JvdXAgYnkgc3ViamVjdA0KICBzdWJzZXQoaXRlbS50eXBlID09ICJleHBlcmltZW50YWwiKSAlPiUgZHJvcGxldmVscyAlPiUgIyBTZWxlY3Qgb25seSBleHBlcmltZW50YWwgY29uZGl0aW9ucywgZHJvcCB1bnVzZWQgbGV2ZWxzDQogIGdyb3VwX2J5KGRlZmluaXRlbmVzcywgc3RydWN0dXJlWGxlbmd0aCwgaXRlbS5zZXQpICU+JSAjIEdyb3VwIGJ5IGRlZmluaXRlbmVzcywgcGFzdGVkIHN0cnVjdHVyZVhsZW5ndGgsIGFuZCBpdGVtIHNldA0KICBzdW1tYXJpemUobWVhbl96X3JhdGluZyA9IG1lYW4oel9yYXRpbmcpKSAlPiUgIyBBdmVyYWdlIHRoZSB6LXNjb3JlcyBwZXIgY29uZGl0aW9uIHBlciBpdGVtDQogIGdyb3VwX2J5KGRlZmluaXRlbmVzcywgc3RydWN0dXJlWGxlbmd0aCkgJT4lICMgR3JvdXAgdGhpcyBzdW1tYXJ5IGJ5IGNvbmRpdGlvbiBvbmx5IHNvIHRoYXQgbWVhbnMgb2YgZWFjaCBjb25kaXRpb24gcGVyIGl0ZW0gc2V0IGNhbiBiZSBhdmVyYWdlZA0KICBzdW1tYXJpemUobWVhbl96X3JhdGluZ3MgPSBtZWFuKG1lYW5fel9yYXRpbmcpKSAtPiBzdW1tYXJ5X3pzY29yZXMgIyBHZXQgdGhlIG1lYW4gb2YgdGhlIG1lYW4gei1zY29yZXMNCnByaW50KHN1bW1hcnlfenNjb3JlcykNCg0KIyBHZXQgdGFibGUgdG8gc3RhcnQgbWFraW5nIEREIHNjb3Jlcw0Kel9ERHMgPC0gc3VtbWFyeV96c2NvcmVzICU+JSBzcHJlYWQoc3RydWN0dXJlWGxlbmd0aCwgbWVhbl96X3JhdGluZ3MpDQoNCiMgQ2FsY3VsYXRlIEQxLCBhZGQgdG8gdGFibGUNCnpfRERzJEQxIDwtIHpfRERzJGBub24uaXNsIHggbG9uZ2AgLSB6X0REcyRgaXNsIHggbG9uZ2ANCg0KIyBDYWxjdWxhdGUgRDIsIGFkZCB0byB0YWJsZQ0Kel9ERHMkRDIgPC0gel9ERHMkYG5vbi5pc2wgeCBzaG9ydGAgLSB6X0REcyRgaXNsIHggc2hvcnRgDQoNCiMgQ2FsY3VsYXRlIERELCBhZGQgdG8gdGFibGUNCnpfRERzJEREIDwtIHpfRERzJEQxIC0gel9ERHMkRDINCnByaW50KHpfRERzKQ0KYGBgDQoNCmBgYHtyIEREc19ieWl0ZW0sIGluY2x1ZGUgPSBGQUxTRSwgZWNobyA9IEZBTFNFfQ0KIyBQYXN0ZSBpdGVtLnNldCBhbmQgZGVmaW5pdGVuZXNzIHRvZ2V0aGVyDQpyYXdfZGF0YV9zaHJ0IC0+IHJhd19kYXRhX3NocnQyDQpyYXdfZGF0YV9zaHJ0MiRpdGVtX2RlZmluaXRlbmVzcyA8LSBwYXN0ZShyYXdfZGF0YV9zaHJ0MiRpdGVtLnNldCwiXyIsIHJhd19kYXRhX3NocnQyJGRlZmluaXRlbmVzcykNCg0KIyBHZXQgei1zY29yZXMgZm9yIGVhY2ggaXRlbQ0KcmF3X2RhdGFfc2hydDIgJT4lDQogIGdyb3VwX2J5KHN1YmplY3QpICU+JSAjIEdyb3VwIHJhdyByZXN1bHRzIGJ5IHN1YmplY3QNCiAgbXV0YXRlKHpfcmF0aW5nID0gc2NhbGUocmF0aW5nKSkgJT4lICMgR2V0IHotc2NvcmVzIGZvciBlYWNoIHN1YmplY3QncyByYXRpbmdzDQogIHVuZ3JvdXAgJT4lICMgVW5kbyBncm91cCBieSBzdWJqZWN0DQogIHN1YnNldChpdGVtLnR5cGUgPT0gImV4cGVyaW1lbnRhbCIpICU+JSBkcm9wbGV2ZWxzICU+JSAjIFNlbGVjdCBvbmx5IGV4cGVyaW1lbnRhbCBjb25kaXRpb25zLCBkcm9wIHVudXNlZCBsZXZlbHMNCiAgZ3JvdXBfYnkoaXRlbV9kZWZpbml0ZW5lc3MsIHN0cnVjdHVyZVhsZW5ndGgpICU+JSAjIEdyb3VwIGJ5IHBhc3RlZCBpdGVtIGFuZCBkZWZpbml0ZW5lc3MsIHBhc3RlZCBzdHJ1Y3R1cmVYbGVuZ3RoLCBhbmQgaXRlbSBzZXQNCiAgc3VtbWFyaXplKG1lYW5fel9yYXRpbmcgPSBtZWFuKHpfcmF0aW5nKSkgLT4gc3VtbWFyeV96c2NvcmVzX2J5aXRlbSAjIEF2ZXJhZ2UgdGhlIHotc2NvcmVzIHBlciBjb25kaXRpb24gcGVyIGl0ZW0NCnByaW50KHN1bW1hcnlfenNjb3Jlc19ieWl0ZW0pDQojIENhbGN1bGF0ZSBERCBzY29yZXMNCiMgR2V0IHRhYmxlIHRvIHN0YXJ0IG1ha2luZyBERCBzY29yZXMNCnpfRERzX2J5aXRlbSA8LSBzdW1tYXJ5X3pzY29yZXNfYnlpdGVtICU+JSBzcHJlYWQoc3RydWN0dXJlWGxlbmd0aCwgbWVhbl96X3JhdGluZykNCg0KIyBDYWxjdWxhdGUgRDEsIGFkZCB0byB0YWJsZQ0Kel9ERHNfYnlpdGVtJEQxIDwtIHpfRERzX2J5aXRlbSRgbm9uLmlzbCB4IGxvbmdgIC0gel9ERHNfYnlpdGVtJGBpc2wgeCBsb25nYA0KDQojIENhbGN1bGF0ZSBEMiwgYWRkIHRvIHRhYmxlDQp6X0REc19ieWl0ZW0kRDIgPC0gel9ERHNfYnlpdGVtJGBub24uaXNsIHggc2hvcnRgIC0gel9ERHNfYnlpdGVtJGBpc2wgeCBzaG9ydGANCg0KIyBDYWxjdWxhdGUgREQsIGFkZCB0byB0YWJsZQ0Kel9ERHNfYnlpdGVtJEREIDwtIHpfRERzX2J5aXRlbSREMSAtIHpfRERzX2J5aXRlbSREMg0KcHJpbnQoel9ERHNfYnlpdGVtKQ0KDQojIEdldCBpdGVtcyB3aG9zZSBERHMgYXJlIGxlc3MgdGhhbiAwLjI1DQpzdWJzZXQoel9ERHNfYnlpdGVtWzFdLCB6X0REc19ieWl0ZW0kREQgPCAwLjI1KQ0KYGBgDQoNCg0KIyMgT3JkaW5hbCByZWdyZXNzaW9uIGFuYWx5c2VzDQoNCmBgYCB7ciBjb250cmFzdHN9DQojIFJlYXNzaWduIGNvbnRyYXN0cw0KY29udHJhc3RzKGV4cGVyaW1lbnRfZGF0YSRkZWZpbml0ZW5lc3MpIDwtIGMoLTAuNSwgMC41KQ0KY29udHJhc3RzKGV4cGVyaW1lbnRfZGF0YSRlYy50eXBlKSA8LSBjKDAuNSwgLTAuNSkNCmNvbnRyYXN0cyhleHBlcmltZW50X2RhdGEkZGVwZW5kZW5jeS5sZW5ndGgpIDwtIGMoMC41LCAtMC41KQ0KYGBgDQoNCmBgYHtyIGNsbUFuYWx5c2lzfQ0KIyBNYWtlIHN1cmUgdGhlIHJhdGluZ3MgYXJlIGEgZmFjdG9yLCByYXRoZXIgdGhhbiBudW1iZXJzDQpleHBlcmltZW50X2RhdGEkcmF0aW5nICU8PiUgYXMuZmFjdG9yDQoNCiMgUnVuIHNpbXBsZSBlZmZlY3RzIGFuYWx5c2lzIHcvIHJhdGluZyBhcyBkZXBlbmRlbnQgdmFyaWFibGUsIGFuZCBkZWZpbml0ZW5lc3MsIHN0cnVjdHVyZSwgYW5kIGxlbmd0aCBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFzIGZpeGVkIGVmZmVjdHMNCmNsbShyYXRpbmcgfiBkZWZpbml0ZW5lc3MgKiBlYy50eXBlICogZGVwZW5kZW5jeS5sZW5ndGgsIGRhdGEgPSBleHBlcmltZW50X2RhdGEpIC0+IGNsbS5kZWZfZWN0eXBlDQpzdW1tYXJ5KGNsbS5kZWZfZWN0eXBlKQ0KYGBgDQoNCkRvZXMgdGhlIHR5cGUgb2YgaXNsYW5kIGhhdmUgYW55IGVmZmVjdCBvbiB0cmFuc3BhcmVuY3kgdG8gZXh0cmFjdGlvbj8gTGV0J3MgaW5jbHVkZSBpc2xhbmQgdHlwZSBhcyBhIGZpeGVkIGVmZmVjdC4NCg0KYGBge3Igd2l0aElzbGFuZFR5cGV9DQojIyBNYWtlIHN1cmUgcmF0aW5ncyBhcmUgYSBmYWN0b3INCmV4cGVyaW1lbnRfZGF0YSRyYXRpbmcgJTw+JSBmYWN0b3INCg0KIyMgUmVhc3NpZ24gY29udHJhc3RzDQpjb250cmFzdHMoZXhwZXJpbWVudF9kYXRhJGlzbGFuZC50eXBlKSA8LSBjKDAuNSwgLTAuNSkNCg0KIyMgUnVuIGNsbSBhbmFseXNpcw0KY2xtKHJhdGluZyB+IGRlZmluaXRlbmVzcyAqIGVjLnR5cGUgKiBkZXBlbmRlbmN5Lmxlbmd0aCAqIGlzbGFuZC50eXBlLCBkYXRhID0gZXhwZXJpbWVudF9kYXRhKSAtPiBjbG0udy5pc2xhbmQudHlwZQ0Kc3VtbWFyeShjbG0udy5pc2xhbmQudHlwZSkNCmBgYA0KDQpBIHNpZ25pZmljYW50IGVmZmVjdCBvZiA8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5pc2xhbmQgdHlwZTwvc3Bhbj4gd291bGQgaGF2ZSBzaG93biB1cCBhcyBhIHRocmVlLXdheSBpbnRlcmFjdGlvbiBiZXR3ZWVuIDxzcGFuIGNsYXNzPSJzbWFsbGNhcHMiPnN0cnVjdHVyZTwvc3Bhbj4gKGVjLnR5cGUpLCA8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5sZW5ndGg8L3NwYW4+IChkZXBlbmRlbmN5Lmxlbmd0aCksIGFuZCA8c3BhbiBjbGFzcz0ic21hbGxjYXBzIj5pc2xhbmQgdHlwZTwvc3Bhbj4sIGJ1dCB0aGlzIGludGVyYWN0aW9uIHdhcyBub3Qgc2lnbmlmaWNhbnQgKHA9MC41NDYpLg0KDQoqKk1peGVkIGVmZmVjdHMgbW9kZWwgYnkgc3ViamVjdHMgYW5kIGJ5IGl0ZW1zKioNCg0KYGBge3IgZWNobyA9IEZBTFNFfQ0Kc3VtbWFyeShjbG1tLmRlZl9lY3R5cGUpDQpgYGANCg==