1 Statistical Analysis Report

The primary objective was to examine how time and demographic variables predict depressive symptom severity as measured by the Patient Health Questionnaire‑9 (PHQ‑9). To evaluate the robustness of results to measurement error and outliers, three analytic approaches are compared:

  1. Ordinary Least Squares (OLS) regression using total PHQ‑9 sum score as the outcome.
  2. OLS regression using a latent depression factor score derived from factor analysis (CFA) of PHQ‑9 items.
  3. Robust regression (M‑estimation) using the latent factor score outcome to down‑weight influential observations.

Demographic predictors included:

  • Race (reference level=White)
  • Gender (reference level=Male)
  • Sexual orientation (reference level=Straight)
  • Class year (reference level=First year)
  • Varsity athlete status (reference level=No)
  • Transfer student status (reference level=No)

The comparison of these models allow assessment of (a) whether latent modeling alters inferences relative to summed scores, and (b) whether results are stable when down‑weighting outliers.

2 Data Preparation

2.1 Missing data handling

For Model 1, missingness in the total PHQ‑9 score followed listwise deletion unless otherwise noted. For Model 2 and Model 3, the CFA estimated using Full Information Maximum Likelihood (FIML) to retain cases with partial item‑level missingness.

2.2 Predictor coding

Categorical predictors (race, gender, sexual orientation, class year, varsity athlete, transfer status) were dummy‑coded. Reference groups are listed above and were selected based on theoretical relevance or sample size. Time was coded as a numeric index, representing semester, starting with Fall 2017.

2.3 Measurement Model: Latent Depression Factor

Before Models 2 and 3, a Confirmatory Factor Analysis (CFA) was fit to the nine PHQ‑9 items using a single‑factor model, consistent with evidence supporting a strong general depression factor in the PHQ‑9.

3 Ordinary Least Squares

A linear regression model was estimated: PHQ9 Total=β0​+β1​Time+β2​Race+…+βk​Transfer+ϵ.

Assumptions (linearity, normality, homoscedasticity) were examined through: Residual plots and histograms Cook’s distance and leverage diagnostics

3.1 Model 1 results


Call:
lm(formula = Score ~ Period + Class3 + Race2 + Sorient2 + Gender2 + 
    Varsitya2 + Transfer2, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-16.1554  -3.8352  -0.0159   3.8910  13.1338 

Coefficients:
                                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)                         13.93893    0.69595  20.029  < 2e-16 ***
Period                               0.06464    0.02690   2.403 0.016341 *  
Class3NFY                            0.07094    0.25838   0.275 0.783696    
Race2African/Afro-Caribbean/Black    0.01260    0.67231   0.019 0.985051    
Race2Arab/ME                         2.44067    1.59458   1.531 0.126002    
Race2Asia/PI                        -0.56167    0.80469  -0.698 0.485254    
Race2DNI                             1.44930    1.50480   0.963 0.335587    
Race2Multi-ethnic                   -0.42339    0.75537  -0.561 0.575184    
Race2Native American/Alaskan Native -1.06638    0.57957  -1.840 0.065903 .  
Race2PNA                            -1.48569    0.98132  -1.514 0.130170    
Sorient2Asexual                      0.41756    0.67783   0.616 0.537936    
Sorient2Bisexual                     2.26260    0.34840   6.494 1.01e-10 ***
Sorient2DNI                          0.46054    1.02503   0.449 0.653261    
Sorient2Gay/lesbian                  1.48896    0.56515   2.635 0.008478 ** 
Sorient2Panromantic                 -0.75578    2.40823  -0.314 0.753677    
Sorient2Pansexual                    3.20230    0.93230   3.435 0.000603 ***
Sorient2PNA                          1.30768    0.55202   2.369 0.017922 *  
Sorient2Queer                        2.24161    0.87232   2.570 0.010239 *  
Sorient2Questioning                  1.84994    0.59938   3.086 0.002049 ** 
Gender2Non-binary                    2.57723    0.90041   2.862 0.004243 ** 
Gender2PNA                           2.90491    1.22869   2.364 0.018148 *  
Gender2Trans man                     1.04368    1.73324   0.602 0.547129    
Gender2Trans woman                   1.07705    2.44196   0.441 0.659212    
Gender2Woman                        -0.42231    0.28197  -1.498 0.134335    
Varsitya2Yes                        -0.85524    0.60356  -1.417 0.156620    
Transfer2Yes                         0.28514    0.27367   1.042 0.297550    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.351 on 2353 degrees of freedom
  (34 observations deleted due to missingness)
Multiple R-squared:  0.0604,    Adjusted R-squared:  0.05041 
F-statistic:  6.05 on 25 and 2353 DF,  p-value: < 2.2e-16

3.2 Model 1 Residual Analysis

3.3 Model 1 Assessment

An ordinary least squares (OLS) regression was fitted with the PHQ 9 total score as the dependent variable. Predictors included time and the six demographic variables. Assumptions of linearity, homoscedasticity, normality of residuals, and influence diagnostics (standardized residuals, leverage, Cook’s distance) were examined.

!!!!!!!!include summary here!!!!!!!!!!!

4 Factor analysis

The extracted PHQ‑9 factor score will be used as the dependent variable:

Latent Depression Factor=β0​+β1​Time+β2​Race+…+βk​Transfer+ϵ

This model adjusts for measurement error in PHQ‑9 items by using a more precise estimate of underlying depression severity. Diagnostics identical to Model 1 were performed to evaluate residual patterns and influential observations.


Call:
lm(formula = Score_factor ~ Period + Class3 + Sorient2 + Race2 + 
    Gender2 + Varsitya2 + Transfer2, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.72055 -0.64612 -0.00145  0.64783  2.14441 

Coefficients:
                                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)                         -0.038930   0.116764  -0.333 0.738855    
Period                               0.011023   0.004513   2.443 0.014658 *  
Class3NFY                            0.020355   0.043350   0.470 0.638727    
Sorient2Asexual                      0.074947   0.113724   0.659 0.509945    
Sorient2Bisexual                     0.377336   0.058452   6.455 1.31e-10 ***
Sorient2DNI                          0.134129   0.171975   0.780 0.435507    
Sorient2Gay/lesbian                  0.225334   0.094819   2.376 0.017558 *  
Sorient2Panromantic                 -0.092927   0.404043  -0.230 0.818116    
Sorient2Pansexual                    0.558064   0.156418   3.568 0.000367 ***
Sorient2PNA                          0.207915   0.092616   2.245 0.024866 *  
Sorient2Queer                        0.348791   0.146354   2.383 0.017242 *  
Sorient2Questioning                  0.303994   0.100562   3.023 0.002530 ** 
Race2African/Afro-Caribbean/Black    0.059886   0.112798   0.531 0.595527    
Race2Arab/ME                         0.382694   0.267532   1.430 0.152717    
Race2Asia/PI                        -0.066964   0.135008  -0.496 0.619942    
Race2DNI                             0.296697   0.252469   1.175 0.240042    
Race2Multi-ethnic                   -0.032135   0.126733  -0.254 0.799851    
Race2Native American/Alaskan Native -0.134687   0.097238  -1.385 0.166147    
Race2PNA                            -0.196042   0.164643  -1.191 0.233887    
Gender2Non-binary                    0.375173   0.151067   2.483 0.013079 *  
Gender2PNA                           0.443753   0.206145   2.153 0.031449 *  
Gender2Trans man                     0.074819   0.290795   0.257 0.796977    
Gender2Trans woman                   0.068991   0.409702   0.168 0.866288    
Gender2Woman                        -0.105838   0.047307  -2.237 0.025363 *  
Varsitya2Yes                        -0.111287   0.101263  -1.099 0.271883    
Transfer2Yes                         0.052370   0.045915   1.141 0.254153    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8978 on 2353 degrees of freedom
  (34 observations deleted due to missingness)
Multiple R-squared:  0.05791,   Adjusted R-squared:  0.04791 
F-statistic: 5.786 on 25 and 2353 DF,  p-value: < 2.2e-16

4.1 Model 2 Residual Analysis

4.2 Model 2 Assessment

A confirmatory factor analysis (CFA) estimated a single latent depression factor from the nine PHQ 9 items. The CFA was estimated using FIML with the latent factor variance fixed to 1. Individual factor scores were extracted using regression based scoring. These latent scores served as the dependent variable in an OLS regression with the same set of demographic and time predictors as Model 1.

!!!!!!here!!!!!!!!

5 Robust regression

Model 3: Robust regression with latent factor score To evaluate sensitivity to influential observations and distributional assumptions, a robust M‑estimation regression was conducted: Latent Depression Factor=β0​+β1​Time+β2​Race+…+βk​Transfer+ϵrobust​

Implementation: rlm() (MASS). Estimator: Huber. This model down‑weights extreme residuals rather than deleting them. Coefficient estimates and standard errors were compared to OLS results to assess robustness.


Call:
lmrob(formula = Score_factor ~ Period + Class3 + Sorient2 + Race2 + Gender2 + 
    Varsitya2 + Transfer2, data = data, fast.s.large.n = Inf)
 \--> method = "S"
Residuals:
      Min        1Q    Median        3Q       Max 
-3.057342 -0.650301  0.007254  0.613016  2.904135 

Algorithm did not converge

Coefficients of the *initial* S-estimator:
                                    Estimate Std. Error t value Pr(>|t|)
(Intercept)                         -0.08517         NA      NA       NA
Period                               0.01899         NA      NA       NA
Class3NFY                           -0.07406         NA      NA       NA
Sorient2Asexual                      0.01310         NA      NA       NA
Sorient2Bisexual                     0.60959         NA      NA       NA
Sorient2DNI                          0.33356         NA      NA       NA
Sorient2Gay/lesbian                  0.43992         NA      NA       NA
Sorient2Panromantic                 -1.00444         NA      NA       NA
Sorient2Pansexual                    0.93944         NA      NA       NA
Sorient2PNA                          0.39898         NA      NA       NA
Sorient2Queer                        0.17349         NA      NA       NA
Sorient2Questioning                  0.55375         NA      NA       NA
Race2African/Afro-Caribbean/Black    0.40469         NA      NA       NA
Race2Arab/ME                         0.45269         NA      NA       NA
Race2Asia/PI                        -0.09538         NA      NA       NA
Race2DNI                            -0.57985         NA      NA       NA
Race2Multi-ethnic                    0.25615         NA      NA       NA
Race2Native American/Alaskan Native -0.15563         NA      NA       NA
Race2PNA                            -0.71041         NA      NA       NA
Gender2Non-binary                    0.55046         NA      NA       NA
Gender2PNA                           0.29716         NA      NA       NA
Gender2Trans man                     0.06888         NA      NA       NA
Gender2Trans woman                  -0.18632         NA      NA       NA
Gender2Woman                        -0.10301         NA      NA       NA
Varsitya2Yes                        -0.09963         NA      NA       NA
Transfer2Yes                        -0.01465         NA      NA       NA

Robustness weights: 
 266 observations c(7,20,65,72,82,83,84,91,94,95,106,113,115,118,120,164,168,186,196,198,199,207,211,212,221,223,231,236,237,243,244,247,248,253,255,256,263,267,268,269,274,293,295,296,299,300,302,317,328,349,352,356,364,370,374,378,379,389,390,395,402,404,411,413,414,417,429,433,455,512,516,536,538,559,564,594,595,599,617,620,639,645,659,662,676,683,696,726,738,757,766,775,779,812,815,820,842,844,852,858,862,875,886,890,907,912,915,926,929,947,956,958,965,972,980,981,982,990,997,998,999,1002,1006,1066,1069,1070,1072,1074,1079,1081,1086,1092,1097,1101,1110,1120,1168,1176,1178,1186,1193,1197,1203,1204,1215,1222,1231,1234,1240,1250,1257,1264,1265,1267,1280,1284,1286,1299,1300,1322,1324,1326,1333,1343,1388,1389,1404,1468,1483,1494,1495,1500,1501,1509,1510,1511,1523,1527,1530,1533,1535,1537,1542,1551,1573,1574,1587,1596,1598,1613,1634,1649,1655,1657,1660,1662,1663,1668,1671,1681,1690,1691,1709,1710,1734,1737,1757,1759,1764,1773,1783,1790,1823,1871,1874,1891,1894,1895,1905,1906,1915,1926,1928,1933,1973,1979,1981,1987,1990,2009,2013,2017,2018,2023,2037,2056,2080,2093,2095,2129,2168,2176,2189,2190,2197,2199,2204,2214,2232,2242,2256,2265,2279,2282,2285,2290,2321,2324,2325,2327,2337,2339,2344,2355,2356,2374)
     are outliers with |weight| <= 4e-05 ( < 4.2e-05); 
 60 weights are ~= 1. The remaining 2053 ones are summarized as
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
0.0000595 0.3793000 0.7170000 0.6326000 0.9236000 0.9990000 
Algorithmic parameters: 
       tuning.chi                bb        tuning.psi        refine.tol 
        1.548e+00         5.000e-01         4.685e+00         1.000e-07 
          rel.tol         scale.tol         solve.tol          zero.tol 
        1.000e-07         1.000e-10         1.000e-07         1.000e-10 
      eps.outlier             eps.x warn.limit.reject warn.limit.meanrw 
        4.203e-05         2.910e-11         5.000e-01         5.000e-01 
  nResample      max.it    best.r.s    k.fast.s       k.max maxit.scale 
        500          50           2           1         200         200 
  trace.lev         mts  compute.rd 
          0        1000           0 
                  psi           subsampling                   cov 
           "bisquare"         "nonsingular"         ".vcov.avar1" 
compute.outlier.stats 
                 "SM" 
seed : int(0) 

5.1 Model 3 Residual Analysis

5.2 Model 3 Assessment

To assess sensitivity to influential observations, a robust regression model (M‑estimation, Huber or bisquare loss function) was fitted using the same predictors and the same latent factor score outcome as in Model 2. Robust regression down‑weights observations with large residuals rather than removing them. This approach provides coefficient estimates that are more stable in the presence of outliers or heteroskedasticity.

!!!!!!!!!!!!!!!!!!!

LS0tDQp0aXRsZTogIlBIUTkgTW9kZWxzIDIwMTctMjAyNSINCmF1dGhvcjogIiINCmRhdGU6ICIiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHllcw0KICAgIHRoZW1lOiBsdW1lbg0KICBwZGZfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgZmlnX3dpZHRoOiAzDQogICAgZmlnX2hlaWdodDogMw0KICB3b3JkX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBrZWVwX21kOiB5ZXMNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCiNUT0M6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICJUYWJsZSBvZiBDb250ZW50cyI7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LXNpemU6IDEuMmVtOw0KICBkaXNwbGF5OiBibG9jazsNCiAgY29sb3I6IG5hdnk7DQogIG1hcmdpbi1ib3R0b206IDEwcHg7DQp9DQoNCg0KZGl2I1RPQyBsaSB7ICAgICAvKiB0YWJsZSBvZiBjb250ZW50ICAqLw0KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KfQ0KDQpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLw0KICBmb250LXNpemU6IDIycHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7DQp9DQoNCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMTVweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7DQogIGNvbG9yOiBuYXZ5Ow0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCg0KYm9keSB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0NCg0KcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KfQ0KYGBgDQoNCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRiwgY29tbWVudD1OQSwgd2FybmluZz1GLCByZXN1bHRzPVQsIG1lc3NhZ2U9RikNCg0Kc2V0d2QoIkM6L1VzZXJzLzc1TFBZT1RUL09uZURyaXZlIC0gV2VzdCBDaGVzdGVyIFVuaXZlcnNpdHkgb2YgUEEvUklTUi9QSFE5IikNCg0KZGF0YT1yZWFkLmNzdigiRnVsbERhdGFSZXBvcnREZWlkZW50aWZpZWQuY3N2IiwgaGVhZGVyPVQpDQoNCiMgUGFja2FnZXMNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShvbHNycikNCmxpYnJhcnkoZ3Bsb3RzKQ0KbGlicmFyeShzYW5kd2ljaCkNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkobGF2YWFuKQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeShtb2Rlcm5kaXZlKQ0KbGlicmFyeShyb2J1c3RiYXNlKQ0KDQpkYXRhID0gZGF0YSAlPiUNCiAgZmlsdGVyKEFnZT49MTgpDQpgYGANCg0KDQpgYGAge3IgZGF0YW1ndCwgaW5jbHVkZT1GfQ0KI2NyZWF0ZSB0aW1lIHZhcmlhYmxlcw0KZGF0YSRBc3Nlc3MgPSAgYXMuRGF0ZShkYXRhJEFzc2VzcywgZm9ybWF0PSIlbS8lZC8lWSIpDQpkYXRhJG1vbnRoID0gYXMubnVtZXJpYyhmb3JtYXQoZGF0YSRBc3Nlc3MsICIlbSIpKQ0KZGF0YSR5ZWFyID0gYXMubnVtZXJpYyhmb3JtYXQoZGF0YSRBc3Nlc3MsICIlWSIpKQ0KDQojY3JlYXRlIHNlbWVzdGVyIHZhcmlhYmxlDQpkYXRhID0gZGF0YSAlPiUNCiAgbXV0YXRlKHRlcm09Y2FzZV93aGVuKG1vbnRoPDZ+ImZhbGwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg+Nn4ic3ByaW5nIikpDQoNCg0KI0NyZWF0ZSB0aW1lIHZhcmlhYmxlIGJ5IHNlbWVzdGVyIGFuZCB5ZXNyDQpkYXRhID0gZGF0YSAlPiUNCiAgbXV0YXRlKHRpbWU9Y2FzZV93aGVuKG1vbnRoPDYgJiB5ZWFyPT0yMDE3fiJTMTciLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg8NiAmIHllYXI9PTIwMTh+IlMxOCIsDQogICAgICAgICAgICAgICAgICAgICAgICBtb250aDw2ICYgeWVhcj09MjAxOX4iUzE5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPDYgJiB5ZWFyPT0yMDIwfiJTMjAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg8NiAmIHllYXI9PTIwMjF+IlMyMSIsDQogICAgICAgICAgICAgICAgICAgICAgICBtb250aDw2ICYgeWVhcj09MjAyMn4iUzIyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPDYgJiB5ZWFyPT0yMDIzfiJTMjMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg8NiAmIHllYXI9PTIwMjR+IlMyNCIsDQogICAgICAgICAgICAgICAgICAgICAgICBtb250aDw2ICYgeWVhcj09MjAyNX4iUzI1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPjYgJiB5ZWFyPT0yMDE3fiJGMTciLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg+NiAmIHllYXI9PTIwMTh+IkYxOCIsDQogICAgICAgICAgICAgICAgICAgICAgICBtb250aD42ICYgeWVhcj09MjAxOX4iRjE5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPjYgJiB5ZWFyPT0yMDIwfiJGMjAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg+NiAmIHllYXI9PTIwMjF+IkYyMSIsDQogICAgICAgICAgICAgICAgICAgICAgICBtb250aD42ICYgeWVhcj09MjAyMn4iRjIyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPjYgJiB5ZWFyPT0yMDIzfiJGMjMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg+NiAmIHllYXI9PTIwMjR+IkYyNCIsDQogICAgICAgICAgICAgICAgICAgICAgICBtb250aD42ICYgeWVhcj09MjAyNX4iRjI1IiwgVFJVRX5OQSkpDQoNCiNjcmVhdGUgb3JkZXJlZCBmYWN0b3IgZm9yIHRpbWUNCmRhdGEkdGltZTI9ZmFjdG9yKGRhdGEkdGltZSwgbGV2ZWxzPWMoIkYxNyIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMxOCIsICJGMTgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUzE5IiwgIkYxOSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTMjAiLCAiRjIwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMyMSIsICJGMjEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUzIyIiwgIkYyMiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTMjMiLCAiRjIzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMyNCIsICJGMjQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMyNSIsICJGMjUiLCBvcmRlcmVkPVQpKQ0KDQoNCiNDcmVhdGUgZGVtb2dyYXBoaWMgZmFjdG9ycw0KZGF0YSA9IGRhdGEgJT4lDQogIG11dGF0ZShSYWNlMj1jYXNlX3doZW4oUmFjZT09MX4iQWZyaWNhbi9BZnJvLUNhcmliYmVhbi9CbGFjayIsDQogICAgICAgICAgICAgICAgICAgICAgICAgUmFjZT09NH4iTmF0aXZlIEFtZXJpY2FuL0FsYXNrYW4gTmF0aXZlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBSYWNlPT01fiJXaGl0ZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgUmFjZT09N34iTXVsdGktZXRobmljIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBSYWNlPT04fiJQTkEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIFJhY2U9PTl+IkROSSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgUmFjZT09MTB+IkFzaWEvUEkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIFJhY2U9PTExfiJBcmFiL01FIiwgVFJVRX5OQSkpICU+JQ0KICBtdXRhdGUoQ2xhc3MyPWNhc2Vfd2hlbihDbGFzcz09MX4iRmlyc3QgeWVhciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPT0yfiJTb3Bob21vcmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcz09M34iSnVuaW9yIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M9PTR+IlNlbmlvciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPT02fiJTZW5pb3IrIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M9PTMzfiJQb3N0IGJhY2MiLCBUUlVFfk5BKSkgJT4lDQogIG11dGF0ZShDbGFzczM9Y2FzZV93aGVuKENsYXNzPT0xfiJGaXJzdCB5ZWFyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M9PTJ+Ik5GWSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPT0zfiJORlkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcz09NH4iTkZZIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M9PTZ+Ik5GWSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPT0zM34iTkZZIiwgVFJVRX5OQSkpICU+JQ0KICBtdXRhdGUoU29yaWVudDI9Y2FzZV93aGVuKFNvcmllbnQ9PTF+IkhldGVyb3NleHVhbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU29yaWVudD09NH4iQmlzZXh1YWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcmllbnQ9PTV+IlF1ZXN0aW9uaW5nIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3JpZW50PT02fiJQTkEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcmllbnQ9PTd+IkdheS9sZXNiaWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3JpZW50PT04fiJBc2V4dWFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3JpZW50PT05fiJQYW5yb21hbnRpYyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU29yaWVudD09MTB+IlBhbnNleHVhbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU29yaWVudD09MTF+IlF1ZWVyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3JpZW50PT0xMn4iRE5JIiwgVFJVRX5OQSkpICU+JQ0KICBtdXRhdGUoR2VuZGVyMj1jYXNlX3doZW4oR2VuZGVyPT0xfiJXb21hbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5kZXI9PTJ+Ik1hbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5kZXI9PTR+IlRyYW5zIHdvbWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmRlcj09NX4iVHJhbnMgbWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmRlcj09Nn4iTm9uLWJpbmFyeSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5kZXI9PTd+IlBOQSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5kZXI9PTh+IkROSSIsVFJVRX5OQSkpICU+JQ0KICBtdXRhdGUoVmFyc2l0eWEyPWNhc2Vfd2hlbihWYXJzaXR5YT09MX4iTm8iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJzaXR5YT09Mn4iWWVzIixUUlVFfk5BKSkgJT4lDQogIG11dGF0ZShUcmFuc2ZlcjI9Y2FzZV93aGVuKFRyYW5zZmVyPT0xfiJObyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyPT0yfiJZZXMiLCBUUlVFfk5BKSkgJT4lDQogIG11dGF0ZShUaWVyMj1jYXNlX3doZW4oVGllcj09MX4iMUEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIFRpZXI9PTJ+IjFCIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgVGllcj09M34iMiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgVGllcj09NH4iMyIsIFRSVUV+TkEpKSANCg0KZGF0YT1kYXRhICU+JQ0KICBtdXRhdGUoUGVyaW9kPWNhc2Vfd2hlbih0aW1lMj09IkYxNyJ+MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTI9PSJTMTgifjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0iRjE4In4zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lMj09IlMxOSJ+NCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTI9PSAiRjE5In41LA0KICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lMj09IlMyMCJ+NiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTI9PSJGMjAifjcsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0iUzIxIn44LA0KICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lMj09ICJGMjEifjksDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIlMyMiJ+MTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIkYyMiJ+MTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIlMyMyJ+MTIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIkYyMyJ+MTMsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIlMyNCJ+MTQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIkYyNCJ+MTUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIlMyNSJ+MTYsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUyPT0gIkYyNSJ+MTcsIFRSVUV+TkEpKQ0KDQoNCmRhdGE9ZGF0YSAlPiUNCiAgbXV0YXRlKEdlbmRlcjI9ZmN0X3JlbGV2ZWwoR2VuZGVyMiwgIk1hbiIpKSAlPiUNCiAgbXV0YXRlKFRyYW5zZmVyMj1mY3RfcmVsZXZlbChUcmFuc2ZlcjIsICJObyIpKSAlPiUgIA0KICBtdXRhdGUoVmFyc2l0eWEyPWZjdF9yZWxldmVsKFZhcnNpdHlhMiwgIk5vIikpICU+JQ0KICBtdXRhdGUoU29yaWVudDI9ZmN0X3JlbGV2ZWwoU29yaWVudDIsICJIZXRlcm9zZXh1YWwiKSkgJT4lDQogIG11dGF0ZShDbGFzczM9ZmN0X3JlbGV2ZWwoQ2xhc3MzLCAiRmlyc3QgeWVhciIpKSAlPiUNCiAgbXV0YXRlKFJhY2UyPWZjdF9yZWxldmVsKFJhY2UyLCAiV2hpdGUiKSkNCmBgYA0KDQojIFN0YXRpc3RpY2FsIEFuYWx5c2lzIFJlcG9ydA0KDQpUaGUgcHJpbWFyeSBvYmplY3RpdmUgd2FzIHRvIGV4YW1pbmUgaG93IHRpbWUgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcyBwcmVkaWN0IGRlcHJlc3NpdmUgc3ltcHRvbSBzZXZlcml0eSBhcyBtZWFzdXJlZCBieSB0aGUgUGF0aWVudCBIZWFsdGggUXVlc3Rpb25uYWlyZeKAkTkgKFBIUeKAkTkpLiBUbyBldmFsdWF0ZSB0aGUgcm9idXN0bmVzcyBvZiByZXN1bHRzIHRvIG1lYXN1cmVtZW50IGVycm9yIGFuZCBvdXRsaWVycywgdGhyZWUgYW5hbHl0aWMgYXBwcm9hY2hlcyBhcmUgY29tcGFyZWQ6DQoNCjEuIE9yZGluYXJ5IExlYXN0IFNxdWFyZXMgKE9MUykgcmVncmVzc2lvbiB1c2luZyB0b3RhbCBQSFHigJE5IHN1bSBzY29yZSBhcyB0aGUgb3V0Y29tZS4NCjIuIE9MUyByZWdyZXNzaW9uIHVzaW5nIGEgbGF0ZW50IGRlcHJlc3Npb24gZmFjdG9yIHNjb3JlIGRlcml2ZWQgZnJvbSBmYWN0b3IgYW5hbHlzaXMgKENGQSkgb2YgUEhR4oCROSBpdGVtcy4NCjMuIFJvYnVzdCByZWdyZXNzaW9uIChN4oCRZXN0aW1hdGlvbikgdXNpbmcgdGhlIGxhdGVudCBmYWN0b3Igc2NvcmUgb3V0Y29tZSB0byBkb3du4oCRd2VpZ2h0IGluZmx1ZW50aWFsIG9ic2VydmF0aW9ucy4NCg0KRGVtb2dyYXBoaWMgcHJlZGljdG9ycyBpbmNsdWRlZDoNCg0KLSBSYWNlIChyZWZlcmVuY2UgbGV2ZWw9V2hpdGUpDQotIEdlbmRlciAocmVmZXJlbmNlIGxldmVsPU1hbGUpDQotIFNleHVhbCBvcmllbnRhdGlvbiAocmVmZXJlbmNlIGxldmVsPVN0cmFpZ2h0KQ0KLSBDbGFzcyB5ZWFyIChyZWZlcmVuY2UgbGV2ZWw9Rmlyc3QgeWVhcikNCi0gVmFyc2l0eSBhdGhsZXRlIHN0YXR1cyAocmVmZXJlbmNlIGxldmVsPU5vKQ0KLSBUcmFuc2ZlciBzdHVkZW50IHN0YXR1cyAocmVmZXJlbmNlIGxldmVsPU5vKQ0KDQpUaGUgY29tcGFyaXNvbiBvZiB0aGVzZSBtb2RlbHMgYWxsb3cgYXNzZXNzbWVudCBvZiAoYSkgd2hldGhlciBsYXRlbnQgbW9kZWxpbmcgYWx0ZXJzIGluZmVyZW5jZXMgcmVsYXRpdmUgdG8gc3VtbWVkIHNjb3JlcywgYW5kIChiKSB3aGV0aGVyIHJlc3VsdHMgYXJlIHN0YWJsZSB3aGVuIGRvd27igJF3ZWlnaHRpbmcgb3V0bGllcnMuDQoNCiMgRGF0YSBQcmVwYXJhdGlvbg0KIyMgTWlzc2luZyBkYXRhIGhhbmRsaW5nDQoNCkZvciBNb2RlbCAxLCBtaXNzaW5nbmVzcyBpbiB0aGUgdG90YWwgUEhR4oCROSBzY29yZSBmb2xsb3dlZCBsaXN0d2lzZSBkZWxldGlvbiB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLg0KRm9yIE1vZGVsIDIgYW5kIE1vZGVsIDMsIHRoZSBDRkEgZXN0aW1hdGVkIHVzaW5nIEZ1bGwgSW5mb3JtYXRpb24gTWF4aW11bSBMaWtlbGlob29kIChGSU1MKSB0byByZXRhaW4gY2FzZXMgd2l0aCBwYXJ0aWFsIGl0ZW3igJFsZXZlbCBtaXNzaW5nbmVzcy4NCg0KIyMgUHJlZGljdG9yIGNvZGluZw0KQ2F0ZWdvcmljYWwgcHJlZGljdG9ycyAocmFjZSwgZ2VuZGVyLCBzZXh1YWwgb3JpZW50YXRpb24sIGNsYXNzIHllYXIsIHZhcnNpdHkgYXRobGV0ZSwgdHJhbnNmZXIgc3RhdHVzKSB3ZXJlIGR1bW154oCRY29kZWQuIFJlZmVyZW5jZSBncm91cHMgYXJlIGxpc3RlZCBhYm92ZSBhbmQgd2VyZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGVvcmV0aWNhbCByZWxldmFuY2Ugb3Igc2FtcGxlIHNpemUuIFRpbWUgd2FzIGNvZGVkIGFzIGEgbnVtZXJpYyBpbmRleCwgcmVwcmVzZW50aW5nIHNlbWVzdGVyLCBzdGFydGluZyB3aXRoIEZhbGwgMjAxNy4gDQoNCiMjIE1lYXN1cmVtZW50IE1vZGVsOiBMYXRlbnQgRGVwcmVzc2lvbiBGYWN0b3INCkJlZm9yZSBNb2RlbHMgMiBhbmQgMywgYSBDb25maXJtYXRvcnkgRmFjdG9yIEFuYWx5c2lzIChDRkEpIHdhcyBmaXQgdG8gdGhlIG5pbmUgUEhR4oCROSBpdGVtcyB1c2luZyBhIHNpbmdsZeKAkWZhY3RvciBtb2RlbCwgY29uc2lzdGVudCB3aXRoIGV2aWRlbmNlIHN1cHBvcnRpbmcgYSBzdHJvbmcgZ2VuZXJhbCBkZXByZXNzaW9uIGZhY3RvciBpbiB0aGUgUEhR4oCROS4NCg0KIyBPcmRpbmFyeSBMZWFzdCBTcXVhcmVzDQoNCkEgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgd2FzIGVzdGltYXRlZDoNClBIUTnCoFRvdGFsPc6yMOKAiyvOsjHigItUaW1lK86yMuKAi1JhY2Ur4oCmK86ya+KAi1RyYW5zZmVyK8+1LiANCg0KQXNzdW1wdGlvbnMgKGxpbmVhcml0eSwgbm9ybWFsaXR5LCBob21vc2NlZGFzdGljaXR5KSB3ZXJlIGV4YW1pbmVkIHRocm91Z2g6DQpSZXNpZHVhbCBwbG90cyBhbmQgaGlzdG9ncmFtcw0KQ29va+KAmXMgZGlzdGFuY2UgYW5kIGxldmVyYWdlIGRpYWdub3N0aWNzDQoNCg0KIyMgTW9kZWwgMSByZXN1bHRzDQpgYGAge3Igb2xzfQ0KDQojT3JkaW5hcnkgbGVhc3Qgc3F1YXJlcw0KDQptb2RlbD1sbShTY29yZX5QZXJpb2QrQ2xhc3MzK1JhY2UyK1NvcmllbnQyK0dlbmRlcjIrVmFyc2l0eWEyK1RyYW5zZmVyMiwgZGF0YT1kYXRhKQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQoNCiMjIE1vZGVsIDEgUmVzaWR1YWwgQW5hbHlzaXMNCg0KYGBgIHtyIHJlczEsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9DQpvbHNfcGxvdF9yZXNpZF9sZXYobW9kZWwpDQpvbHNfcGxvdF9yZXNpZF9oaXN0KG1vZGVsKQ0Kb2xzX3Bsb3RfcmVzaWRfZml0KG1vZGVsKQ0Kb2xzX3Bsb3RfY29va3NkX2NoYXJ0KG1vZGVsKQ0KDQpgYGANCg0KIyMgTW9kZWwgMSBBc3Nlc3NtZW50DQpBbiBvcmRpbmFyeSBsZWFzdCBzcXVhcmVzIChPTFMpIHJlZ3Jlc3Npb24gd2FzIGZpdHRlZCB3aXRoIHRoZSBQSFEgOSB0b3RhbCBzY29yZSBhcyB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLiBQcmVkaWN0b3JzIGluY2x1ZGVkIHRpbWUgYW5kIHRoZSBzaXggZGVtb2dyYXBoaWMgdmFyaWFibGVzLiBBc3N1bXB0aW9ucyBvZiBsaW5lYXJpdHksIGhvbW9zY2VkYXN0aWNpdHksIG5vcm1hbGl0eSBvZiByZXNpZHVhbHMsIGFuZCBpbmZsdWVuY2UgZGlhZ25vc3RpY3MgKHN0YW5kYXJkaXplZCByZXNpZHVhbHMsIGxldmVyYWdlLCBDb29r4oCZcyBkaXN0YW5jZSkgd2VyZSBleGFtaW5lZC4NCg0KISEhISEhISFpbmNsdWRlIHN1bW1hcnkgaGVyZSEhISEhISEhISEhDQoNCiMgRmFjdG9yIGFuYWx5c2lzDQoNClRoZSBleHRyYWN0ZWQgUEhR4oCROSBmYWN0b3Igc2NvcmUgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZXBlbmRlbnQgdmFyaWFibGU6DQoNCkxhdGVudMKgRGVwcmVzc2lvbsKgRmFjdG9yPc6yMOKAiyvOsjHigItUaW1lK86yMuKAi1JhY2Ur4oCmK86ya+KAi1RyYW5zZmVyK8+1DQoNClRoaXMgbW9kZWwgYWRqdXN0cyBmb3IgbWVhc3VyZW1lbnQgZXJyb3IgaW4gUEhR4oCROSBpdGVtcyBieSB1c2luZyBhIG1vcmUgcHJlY2lzZSBlc3RpbWF0ZSBvZiB1bmRlcmx5aW5nIGRlcHJlc3Npb24gc2V2ZXJpdHkuIERpYWdub3N0aWNzIGlkZW50aWNhbCB0byBNb2RlbCAxIHdlcmUgcGVyZm9ybWVkIHRvIGV2YWx1YXRlIHJlc2lkdWFsIHBhdHRlcm5zIGFuZCBpbmZsdWVudGlhbCBvYnNlcnZhdGlvbnMuDQoNCmBgYCB7ciBGQX0NCiNGYWN0b3IgYW5hbHlzaXMgdG8gZ2V0IHdlaWdodGVkIGF2ZXJhZ2UgZm9yIHJlc3BvbnNlDQojIC0tLSAxKSBDb25maXJtIHlvdXIgaXRlbSBjb2x1bW5zIC0tLQ0KcGhxX2l0ZW1zIDwtIGMoIlRpcmVkIiwiU2xlZXAiLCJBcHBldGl0ZSIsIkNvbmNlbnRyIiwiRmFpbHVyZSIsDQogICAgICAgICAgICAgICAiTW92aW5nIiwiSW50ZXJlc3QiLCJEb3duIiwiSGFybXNlbGYiKQ0KDQojIC0tLSAyKSBPbmUtZmFjdG9yIENGQSBtb2RlbCAtLS0NCnBocV9tb2RlbCA8LSAnDQpTY29yZSA9fiBUaXJlZCArIFNsZWVwK0FwcGV0aXRlK0NvbmNlbnRyK0ZhaWx1cmUrTW92aW5nK0ludGVyZXN0K0Rvd24rSGFybXNlbGYNCicNCg0KZml0X2NmYSA9IGNmYShwaHFfbW9kZWwsIGRhdGEgPSBkYXRhLCBzdGQubHYgPSBUUlVFLCBtaXNzaW5nID0gImZpbWwiKSAgIyBGSU1MIGhhbmRsZXMgbWlzc2luZyBhdCBpdGVtIGxldmVsDQojc3VtbWFyeShmaXRfY2ZhLCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKQ0KDQojIC0tLSAzKSBFeHRyYWN0IGZhY3RvciBzY29yZXMgKHdlaWdodGVkIFBIUS05KSAtLS0NCmRhdGEkU2NvcmVfZmFjdG9yID0gYXMubnVtZXJpYyhsYXZQcmVkaWN0KGZpdF9jZmEpKSAgIyBvbmUgc2NvcmUgcGVyIHBlcnNvbg0KDQptX2ZhY3RvciA8LSBsbShTY29yZV9mYWN0b3IgfiBQZXJpb2QgKyBDbGFzczMgKyBTb3JpZW50MiArIFJhY2UyICsNCiAgICAgICAgICAgICAgICAgR2VuZGVyMiArIFZhcnNpdHlhMiArIFRyYW5zZmVyMiwgZGF0YSA9IGRhdGEpDQoNCiMgUm9idXN0IFNFcyBhbmQgc3VtbWFyeQ0KI2NvZWZ0ZXN0KG1fZmFjdG9yLCB2Y292ID0gdmNvdkhDKG1fZmFjdG9yLCB0eXBlID0gIkhDMyIpKQ0Kc3VtbWFyeShtX2ZhY3RvcikNCiNnbGFuY2UobV9mYWN0b3IpWywgYygici5zcXVhcmVkIiwiYWRqLnIuc3F1YXJlZCIsInNpZ21hIiwiQUlDIiwiQklDIildDQoNCmBgYA0KDQojIyBNb2RlbCAyIFJlc2lkdWFsIEFuYWx5c2lzDQoNCmBgYCB7ciByZXMyLCBmaWcud2lkdGg9NCwgZmlnLmhlaWdodD0zfQ0Kb2xzX3Bsb3RfcmVzaWRfbGV2KG1fZmFjdG9yKQ0Kb2xzX3Bsb3RfcmVzaWRfaGlzdChtX2ZhY3RvcikNCm9sc19wbG90X3Jlc2lkX2ZpdChtX2ZhY3RvcikNCm9sc19wbG90X2Nvb2tzZF9jaGFydChtX2ZhY3RvcikNCg0KYGBgDQoNCiMjIE1vZGVsIDIgQXNzZXNzbWVudA0KDQpBIGNvbmZpcm1hdG9yeSBmYWN0b3IgYW5hbHlzaXMgKENGQSkgZXN0aW1hdGVkIGEgc2luZ2xlIGxhdGVudCBkZXByZXNzaW9uIGZhY3RvciBmcm9tIHRoZSBuaW5lIFBIUSA5IGl0ZW1zLiBUaGUgQ0ZBIHdhcyBlc3RpbWF0ZWQgdXNpbmcgRklNTCB3aXRoIHRoZSBsYXRlbnQgZmFjdG9yIHZhcmlhbmNlIGZpeGVkIHRvIDEuIEluZGl2aWR1YWwgZmFjdG9yIHNjb3JlcyB3ZXJlIGV4dHJhY3RlZCB1c2luZyByZWdyZXNzaW9uIGJhc2VkIHNjb3JpbmcuIFRoZXNlIGxhdGVudCBzY29yZXMgc2VydmVkIGFzIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgaW4gYW4gT0xTIHJlZ3Jlc3Npb24gd2l0aCB0aGUgc2FtZSBzZXQgb2YgZGVtb2dyYXBoaWMgYW5kIHRpbWUgcHJlZGljdG9ycyBhcyBNb2RlbCAxLiANCg0KISEhISEhaGVyZSEhISEhISEhDQoNCiMgUm9idXN0IHJlZ3Jlc3Npb24NCg0KTW9kZWwgMzogUm9idXN0IHJlZ3Jlc3Npb24gd2l0aCBsYXRlbnQgZmFjdG9yIHNjb3JlDQpUbyBldmFsdWF0ZSBzZW5zaXRpdml0eSB0byBpbmZsdWVudGlhbCBvYnNlcnZhdGlvbnMgYW5kIGRpc3RyaWJ1dGlvbmFsIGFzc3VtcHRpb25zLCBhIHJvYnVzdCBN4oCRZXN0aW1hdGlvbiByZWdyZXNzaW9uIHdhcyBjb25kdWN0ZWQ6DQpMYXRlbnTCoERlcHJlc3Npb27CoEZhY3Rvcj3OsjDigIsrzrIx4oCLVGltZSvOsjLigItSYWNlK+KApivOsmvigItUcmFuc2ZlcivPtXJvYnVzdOKAiw0KDQpJbXBsZW1lbnRhdGlvbjogcmxtKCkgKE1BU1MpLg0KRXN0aW1hdG9yOiBIdWJlci4NClRoaXMgbW9kZWwgZG93buKAkXdlaWdodHMgZXh0cmVtZSByZXNpZHVhbHMgcmF0aGVyIHRoYW4gZGVsZXRpbmcgdGhlbS4NCkNvZWZmaWNpZW50IGVzdGltYXRlcyBhbmQgc3RhbmRhcmQgZXJyb3JzIHdlcmUgY29tcGFyZWQgdG8gT0xTIHJlc3VsdHMgdG8gYXNzZXNzIHJvYnVzdG5lc3MuDQoNCmBgYCB7ciByb2J1c3R9DQpmaXRfcmxtICAgPC0gcmxtKFNjb3JlX2ZhY3RvciB+IFBlcmlvZCArIENsYXNzMyArIFNvcmllbnQyICsgUmFjZTIgKw0KICAgICAgICAgICAgICAgICAgIEdlbmRlcjIgKyBWYXJzaXR5YTIgKyBUcmFuc2ZlcjIsIGRhdGEgPSBkYXRhLCBwc2kgPSBwc2kuaHViZXIpICAjIG9yIHBzaS5iaXNxdWFyZQ0KDQpmaXRfbG1yb2IgPC0gbG1yb2IoU2NvcmVfZmFjdG9yIH4gUGVyaW9kICsgQ2xhc3MzICsgU29yaWVudDIgKyBSYWNlMiArDQogICAgICAgICAgICAgICAgICAgICBHZW5kZXIyICsgVmFyc2l0eWEyICsgVHJhbnNmZXIyLCBkYXRhID0gZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgZmFzdC5zLmxhcmdlLm4gPSBJbmYpICAjIE1NLWVzdGltYXRvcg0Kc3VtbWFyeShmaXRfbG1yb2IpDQoNCg0KYGBgDQoNCiMjIE1vZGVsIDMgUmVzaWR1YWwgQW5hbHlzaXMNCg0KYGBgIHtyIHJlczMsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9DQoNCnJlcyA8LSByZXNpZHVhbHMoZml0X2xtcm9iLCB0eXBlID0gInJlc3BvbnNlIikNCmZpdCA8LSBmaXR0ZWQoZml0X2xtcm9iKQ0KdyAgIDwtIGZpdF9sbXJvYiR3ICAjIHJvYnVzdCB3ZWlnaHRzIGluIFswLCAxXTsgc21hbGwgdmFsdWVzIHdlcmUgZG93bi13ZWlnaHRlZA0KDQojIFJlc2lkdWFscyB2cyBGaXR0ZWQNCnBsb3QoZml0LCByZXMsDQogICAgIHhsYWIgPSAiRml0dGVkIHZhbHVlcyIsIHlsYWIgPSAiUmVzaWR1YWxzIiwNCiAgICAgbWFpbiA9ICJybG06IFJlc2lkdWFscyB2cyBGaXR0ZWQiKQ0KYWJsaW5lKGggPSAwLCBjb2wgPSAicmVkIikNCg0KIyBOb3JtYWwgUeKAk1Egb2YgcmVzaWR1YWxzIChqdXN0IHRvIHNlZSBoZWF2aW5lc3Mgb2YgdGFpbHM7IHJvYnVzdCBtb2RlbHMgZG9u4oCZdCBhc3N1bWUgbm9ybWFsaXR5KQ0KcXFub3JtKHJlcyk7IHFxbGluZShyZXMsIGNvbCA9ICJyZWQiKQ0KDQojIFNjYWxl4oCTTG9jYXRpb24gKHNxcnQofHJlc3wpIHZzIEZpdHRlZCkNCnBsb3QoZml0LCBzcXJ0KGFicyhyZXMpKSwNCiAgICAgeGxhYiA9ICJGaXR0ZWQgdmFsdWVzIiwgeWxhYiA9ICJTcXJ0KHxSZXNpZHVhbHN8KSIsDQogICAgIG1haW4gPSAicmxtOiBTY2FsZeKAk0xvY2F0aW9uIikNCg0KIyBSZXNpZHVhbHMgb3ZlciBvYnNlcnZhdGlvbiBvcmRlciAob3Igb3ZlciB0aW1lIGlmIHlvdSBoYXZlIGEgdGltZSB2YXJpYWJsZSkNCnBsb3QocmVzLCB0eXBlID0gImgiLCB4bGFiID0gIkluZGV4IChvciB0aW1lIG9yZGVyKSIsIHlsYWIgPSAiUmVzaWR1YWwiLA0KICAgICBtYWluID0gInJsbTogUmVzaWR1YWxzIGJ5IEluZGV4IikNCmFibGluZShoID0gMCwgY29sID0gInJlZCIpDQoNCiMgUm9idXN0IHdlaWdodHMgKHdobyBnb3QgZG93bi13ZWlnaHRlZD8pDQojcGxvdCh3LCB0eXBlID0gImgiLA0KICMgICAgeGxhYiA9ICJJbmRleCIsIHlsYWIgPSAiUm9idXN0IHdlaWdodCAoMOKAkzEpIiwNCiAgIyAgIG1haW4gPSAicmxtOiBDYXNlIFdlaWdodHMgKHNtYWxsZXIgPSBtb3JlIGRvd24td2VpZ2h0ZWQpIikNCiNhYmxpbmUoaCA9IDEsIGNvbCA9ICJncmV5NjAiLCBsdHkgPSAyKQ0KYGBgDQoNCiMjIE1vZGVsIDMgQXNzZXNzbWVudA0KDQpUbyBhc3Nlc3Mgc2Vuc2l0aXZpdHkgdG8gaW5mbHVlbnRpYWwgb2JzZXJ2YXRpb25zLCBhIHJvYnVzdCByZWdyZXNzaW9uIG1vZGVsIChN4oCRZXN0aW1hdGlvbiwgSHViZXIgb3IgYmlzcXVhcmUgbG9zcyBmdW5jdGlvbikgd2FzIGZpdHRlZCB1c2luZyB0aGUgc2FtZSBwcmVkaWN0b3JzIGFuZCB0aGUgc2FtZSBsYXRlbnQgZmFjdG9yIHNjb3JlIG91dGNvbWUgYXMgaW4gTW9kZWwgMi4gUm9idXN0IHJlZ3Jlc3Npb24gZG93buKAkXdlaWdodHMgb2JzZXJ2YXRpb25zIHdpdGggbGFyZ2UgcmVzaWR1YWxzIHJhdGhlciB0aGFuIHJlbW92aW5nIHRoZW0uIFRoaXMgYXBwcm9hY2ggcHJvdmlkZXMgY29lZmZpY2llbnQgZXN0aW1hdGVzIHRoYXQgYXJlIG1vcmUgc3RhYmxlIGluIHRoZSBwcmVzZW5jZSBvZiBvdXRsaWVycyBvciBoZXRlcm9za2VkYXN0aWNpdHkuDQoNCg0KISEhISEhISEhISEhISEhISEhIQ==