Bivariate Analysis by Medication
Mesalamine limited to UC patients only
tbl_uv_mes<-
tbl_uvregression(
UC_meds_3[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "mesalamine_3")],
method = glm,
y = mesalamine_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_mes, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
3,784 |
0.99 |
0.99, 1.00 |
<0.001 |
| Gender |
3,784 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
1.43 |
1.17, 1.76 |
<0.001 |
| Race |
3,784 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.23 |
0.81, 1.82 |
0.3 |
| Â Â Â Â Asian |
|
1.87 |
1.21, 2.80 |
0.003 |
| Â Â Â Â Native |
|
1.01 |
0.16, 3.58 |
>0.9 |
| Â Â Â Â Other |
|
2.01 |
1.32, 2.99 |
<0.001 |
| Ethnicity |
3,784 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.26 |
0.71, 2.09 |
0.4 |
| Primary Language |
3,784 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
1.70 |
0.77, 3.37 |
0.2 |
| Charlson Comorbidity Index |
3,784 |
0.96 |
0.94, 0.98 |
<0.001 |
| Total SVI |
3,784 |
0.93 |
0.62, 1.40 |
0.7 |
| SVI Quartiles |
3,784 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
0.99 |
0.78, 1.24 |
>0.9 |
| Â Â Â Â Third |
|
1.03 |
0.77, 1.35 |
0.8 |
| Â Â Â Â Fourth |
|
0.85 |
0.55, 1.26 |
0.4 |
| Soceioeconomic Status |
3,784 |
0.91 |
0.60, 1.36 |
0.6 |
| Household Composition |
3,784 |
0.69 |
0.46, 1.02 |
0.063 |
| Minority Status and Language |
3,784 |
1.38 |
0.98, 1.94 |
0.063 |
| Housing and Transportation |
3,784 |
0.97 |
0.68, 1.37 |
0.8 |
NULL
Immunomodulators
## MTX
tbl_uv_mtx<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "methotrexate_3")],
method = glm,
y = methotrexate_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_mtx, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
0.98 |
0.97, 0.99 |
<0.001 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.67 |
0.45, 1.01 |
0.057 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
0.42 |
0.10, 1.11 |
0.14 |
| Â Â Â Â Asian |
|
1.32 |
0.40, 3.18 |
0.6 |
| Â Â Â Â Native |
|
2.74 |
0.15, 13.0 |
0.3 |
| Â Â Â Â Other |
|
0.29 |
0.02, 1.33 |
0.2 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.41 |
0.34, 3.80 |
0.6 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
3.13 |
0.76, 8.57 |
0.056 |
| Charlson Comorbidity Index |
7,836 |
1.09 |
1.06, 1.12 |
<0.001 |
| Total SVI |
7,836 |
0.68 |
0.30, 1.51 |
0.4 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
1.05 |
0.66, 1.66 |
0.8 |
| Â Â Â Â Third |
|
0.61 |
0.31, 1.13 |
0.14 |
| Â Â Â Â Fourth |
|
0.89 |
0.41, 1.76 |
0.8 |
| Soceioeconomic Status |
7,836 |
1.10 |
0.50, 2.37 |
0.8 |
| Household Composition |
7,836 |
0.58 |
0.26, 1.26 |
0.2 |
| Minority Status and Language |
7,836 |
0.74 |
0.37, 1.49 |
0.4 |
| Housing and Transportation |
7,836 |
0.64 |
0.31, 1.32 |
0.2 |
NULL
## 6MP
tbl_uv_mp<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "mercaptopurine_3")],
method = glm,
y = mercaptopurine_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_mp, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
1.00 |
0.97, 1.02 |
0.7 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.41 |
0.15, 0.96 |
0.049 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
0.58 |
0.03, 2.77 |
0.6 |
| Â Â Â Â Asian |
|
0.00 |
|
>0.9 |
| Â Â Â Â Native |
|
0.00 |
|
>0.9 |
| Â Â Â Â Other |
|
0.00 |
|
>0.9 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
0.00 |
|
>0.9 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
0.00 |
|
>0.9 |
| Charlson Comorbidity Index |
7,836 |
0.92 |
0.78, 1.02 |
0.2 |
| Total SVI |
7,836 |
0.90 |
0.16, 4.45 |
>0.9 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
0.36 |
0.08, 1.17 |
0.12 |
| Â Â Â Â Third |
|
0.98 |
0.31, 2.71 |
>0.9 |
| Â Â Â Â Fourth |
|
1.14 |
0.26, 3.66 |
0.8 |
| Soceioeconomic Status |
7,836 |
0.98 |
0.18, 4.79 |
>0.9 |
| Household Composition |
7,836 |
1.76 |
0.36, 7.94 |
0.5 |
| Minority Status and Language |
7,836 |
0.82 |
0.19, 3.50 |
0.8 |
| Housing and Transportation |
7,836 |
0.56 |
0.12, 2.45 |
0.4 |
NULL
## AZA
tbl_uv_aza<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "azathioprine_3")],
method = glm,
y = azathioprine_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_aza, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
0.99 |
0.98, 1.00 |
0.030 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.72 |
0.47, 1.10 |
0.13 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.00 |
0.39, 2.12 |
>0.9 |
| Â Â Â Â Asian |
|
1.97 |
0.69, 4.46 |
0.15 |
| Â Â Â Â Native |
|
0.00 |
0.00, 31,531 |
>0.9 |
| Â Â Â Â Other |
|
0.70 |
0.12, 2.25 |
0.6 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.58 |
0.39, 4.28 |
0.4 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
0.00 |
0.00, 7.01 |
>0.9 |
| Charlson Comorbidity Index |
7,836 |
0.99 |
0.95, 1.03 |
0.7 |
| Total SVI |
7,836 |
1.30 |
0.56, 2.90 |
0.5 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
1.21 |
0.73, 2.01 |
0.5 |
| Â Â Â Â Third |
|
1.08 |
0.58, 1.95 |
0.8 |
| Â Â Â Â Fourth |
|
1.18 |
0.53, 2.38 |
0.7 |
| Soceioeconomic Status |
7,836 |
1.76 |
0.78, 3.88 |
0.2 |
| Household Composition |
7,836 |
1.21 |
0.54, 2.64 |
0.6 |
| Minority Status and Language |
7,836 |
0.97 |
0.46, 2.03 |
>0.9 |
| Housing and Transportation |
7,836 |
0.85 |
0.39, 1.78 |
0.7 |
NULL
Biologics
## IFX
tbl_uv_ifx<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "infliximab_3")],
method = glm,
y = infliximab_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_ifx, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
0.96 |
0.96, 0.96 |
<0.001 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.71 |
0.64, 0.79 |
<0.001 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.48 |
1.22, 1.78 |
<0.001 |
| Â Â Â Â Asian |
|
1.05 |
0.76, 1.42 |
0.8 |
| Â Â Â Â Native |
|
0.57 |
0.17, 1.47 |
0.3 |
| Â Â Â Â Other |
|
1.27 |
0.95, 1.67 |
0.10 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
0.91 |
0.62, 1.29 |
0.6 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
1.03 |
0.60, 1.69 |
>0.9 |
| Charlson Comorbidity Index |
7,836 |
0.92 |
0.91, 0.93 |
<0.001 |
| Total SVI |
7,836 |
0.81 |
0.66, 1.00 |
0.046 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
0.85 |
0.75, 0.96 |
0.012 |
| Â Â Â Â Third |
|
0.88 |
0.76, 1.02 |
0.080 |
| Â Â Â Â Fourth |
|
0.85 |
0.70, 1.03 |
0.10 |
| Soceioeconomic Status |
7,836 |
0.84 |
0.68, 1.04 |
0.11 |
| Household Composition |
7,836 |
0.79 |
0.65, 0.97 |
0.026 |
| Minority Status and Language |
7,836 |
1.39 |
1.16, 1.67 |
<0.001 |
| Housing and Transportation |
7,836 |
0.68 |
0.57, 0.82 |
<0.001 |
NULL
## 6MP
tbl_uv_ada<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "adalimumab_3")],
method = glm,
y = adalimumab_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_ada, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
0.96 |
0.95, 0.97 |
<0.001 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.94 |
0.70, 1.25 |
0.6 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.57 |
0.95, 2.46 |
0.062 |
| Â Â Â Â Asian |
|
1.09 |
0.43, 2.28 |
0.8 |
| Â Â Â Â Native |
|
1.50 |
0.08, 7.09 |
0.7 |
| Â Â Â Â Other |
|
1.15 |
0.49, 2.31 |
0.7 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.17 |
0.41, 2.61 |
0.7 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
0.00 |
0.00, 3.99 |
>0.9 |
| Charlson Comorbidity Index |
7,836 |
0.91 |
0.86, 0.95 |
<0.001 |
| Total SVI |
7,836 |
1.38 |
0.79, 2.38 |
0.2 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
1.23 |
0.87, 1.73 |
0.2 |
| Â Â Â Â Third |
|
1.16 |
0.77, 1.73 |
0.5 |
| Â Â Â Â Fourth |
|
1.34 |
0.81, 2.15 |
0.2 |
| Soceioeconomic Status |
7,836 |
1.49 |
0.86, 2.56 |
0.2 |
| Household Composition |
7,836 |
1.28 |
0.74, 2.17 |
0.4 |
| Minority Status and Language |
7,836 |
1.68 |
1.02, 2.78 |
0.041 |
| Housing and Transportation |
7,836 |
0.88 |
0.53, 1.45 |
0.6 |
NULL
## Vedo
tbl_uv_vedo<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "vedolizumab_3")],
method = glm,
y = vedolizumab_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_vedo, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
1.00 |
0.99, 1.00 |
0.4 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
1.00 |
0.85, 1.17 |
>0.9 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
0.91 |
0.65, 1.25 |
0.6 |
| Â Â Â Â Asian |
|
0.89 |
0.53, 1.41 |
0.7 |
| Â Â Â Â Native |
|
0.81 |
0.13, 2.69 |
0.8 |
| Â Â Â Â Other |
|
1.68 |
1.14, 2.38 |
0.006 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.47 |
0.90, 2.28 |
0.10 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
1.33 |
0.62, 2.53 |
0.4 |
| Charlson Comorbidity Index |
7,836 |
1.03 |
1.02, 1.05 |
<0.001 |
| Total SVI |
7,836 |
0.61 |
0.44, 0.84 |
0.003 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
0.94 |
0.78, 1.13 |
0.5 |
| Â Â Â Â Third |
|
0.84 |
0.67, 1.04 |
0.12 |
| Â Â Â Â Fourth |
|
0.64 |
0.46, 0.88 |
0.007 |
| Soceioeconomic Status |
7,836 |
0.68 |
0.49, 0.94 |
0.019 |
| Household Composition |
7,836 |
0.55 |
0.40, 0.75 |
<0.001 |
| Minority Status and Language |
7,836 |
1.30 |
0.99, 1.71 |
0.063 |
| Housing and Transportation |
7,836 |
0.65 |
0.49, 0.87 |
0.003 |
NULL
## uste
tbl_uv_uste<-
tbl_uvregression(
baseline[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "ustekinumab_3")],
method = glm,
y = ustekinumab_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_uste, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
7,836 |
0.98 |
0.97, 0.99 |
<0.001 |
| Gender |
7,836 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.91 |
0.69, 1.20 |
0.5 |
| Race |
7,836 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.50 |
0.93, 2.30 |
0.079 |
| Â Â Â Â Asian |
|
0.62 |
0.19, 1.49 |
0.4 |
| Â Â Â Â Native |
|
1.30 |
0.07, 6.12 |
0.8 |
| Â Â Â Â Other |
|
0.42 |
0.10, 1.12 |
0.14 |
| Ethnicity |
7,836 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
0.84 |
0.26, 2.00 |
0.7 |
| Primary Language |
7,836 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
0.90 |
0.15, 2.89 |
0.9 |
| Charlson Comorbidity Index |
7,836 |
0.98 |
0.95, 1.00 |
0.12 |
| Total SVI |
7,836 |
1.24 |
0.73, 2.09 |
0.4 |
| SVI Quartiles |
7,836 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
0.85 |
0.61, 1.19 |
0.4 |
| Â Â Â Â Third |
|
0.90 |
0.60, 1.31 |
0.6 |
| Â Â Â Â Fourth |
|
1.33 |
0.85, 2.02 |
0.2 |
| Soceioeconomic Status |
7,836 |
1.14 |
0.67, 1.92 |
0.6 |
| Household Composition |
7,836 |
1.24 |
0.74, 2.06 |
0.4 |
| Minority Status and Language |
7,836 |
1.36 |
0.85, 2.20 |
0.2 |
| Housing and Transportation |
7,836 |
0.88 |
0.54, 1.43 |
0.6 |
NULL
Small molecules limited to UC only patients
## Tofa
tbl_uv_tofa<-
tbl_uvregression(
UC_meds_3[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "tofacitinib_3")],
method = glm,
y = tofacitinib_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
print(tbl_uv_tofa, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
3,784 |
0.99 |
0.97, 1.01 |
0.5 |
| Gender |
3,784 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
0.73 |
0.34, 1.55 |
0.4 |
| Race |
3,784 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.28 |
0.20, 4.37 |
0.7 |
| Â Â Â Â Asian |
|
0.91 |
0.05, 4.35 |
>0.9 |
| Â Â Â Â Native |
|
0.00 |
|
>0.9 |
| Â Â Â Â Other |
|
1.81 |
0.29, 6.20 |
0.4 |
| Ethnicity |
3,784 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
0.00 |
|
>0.9 |
| Primary Language |
3,784 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
0.00 |
|
>0.9 |
| Charlson Comorbidity Index |
3,784 |
1.00 |
0.92, 1.06 |
>0.9 |
| Total SVI |
3,784 |
0.42 |
0.07, 2.05 |
0.3 |
| SVI Quartiles |
3,784 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
0.82 |
0.34, 1.84 |
0.6 |
| Â Â Â Â Third |
|
0.51 |
0.12, 1.54 |
0.3 |
| Â Â Â Â Fourth |
|
0.39 |
0.02, 1.91 |
0.4 |
| Soceioeconomic Status |
3,784 |
0.64 |
0.12, 2.92 |
0.6 |
| Household Composition |
3,784 |
0.46 |
0.09, 2.05 |
0.3 |
| Minority Status and Language |
3,784 |
1.35 |
0.37, 4.95 |
0.6 |
| Housing and Transportation |
3,784 |
0.39 |
0.09, 1.51 |
0.2 |
NULL
## Upa
tbl_uv_upa<-
tbl_uvregression(
UC_meds_3[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "upadacitinib_3")],
method = glm,
y = upadacitinib_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
Warning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not converge! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
print(tbl_uv_upa, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
3,784 |
1.00 |
0.00, 33,234,572,863,151,126,253,589,885,910,374,792,622,009,002,930,739,352,140,257,320,052,974,679,648,356,012,118,124,517,226,347,799,556,268,642,517,016,984,103,244,776,589,737,823,977,045,904,041,344,183,447,140,882,591,323,890,986,127,607,033,250,480,587,244,620,166,054,550,460,586,521,182,482,216,256,275,726,589,547,969,092,765,351,936 |
>0.9 |
| Gender |
3,784 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
1.00 |
0.00, Inf |
>0.9 |
| Race |
3,784 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Asian |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Native |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Other |
|
1.00 |
0.00, Inf |
>0.9 |
| Ethnicity |
3,784 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.00 |
0.00, Inf |
>0.9 |
| Primary Language |
3,784 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
1.00 |
0.00, Inf |
>0.9 |
| Charlson Comorbidity Index |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Total SVI |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| SVI Quartiles |
3,784 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Third |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Fourth |
|
1.00 |
0.00, Inf |
>0.9 |
| Soceioeconomic Status |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Household Composition |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Minority Status and Language |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Housing and Transportation |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
NULL
## Ozanimod
tbl_uv_ozan<-
tbl_uvregression(
UC_meds_3[c("age_yrs", "gender", "race_5", "ethnic_3", "lang_3", "max_ch", "RPL_THEMES", "RPL_4", "RPL_THEME1", "RPL_THEME2", "RPL_THEME3", "RPL_THEME4", "ozanimod_3")],
method = glm,
y = ozanimod_3,
method.args = list(family = binomial),
label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation", RPL_4 ~ "SVI Quartiles", max_ch ~ "Charlson Comorbidity Index"),
exponentiate = TRUE
)
Warning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not convergeWarning: glm.fit: algorithm did not converge! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
! `broom::tidy()` failed to tidy the model.
✖ need at least two non-NA values to interpolateapprox(sp$y, sp$x, xout = cutoff)
✔ `tidy_parameters()` used instead.
ℹ Add `tidy_fun = broom.helpers::tidy_parameters` to quiet these messages.
print(tbl_uv_ozan, method = render)
`...` must be empty.
✖ Problematic argument:
• method = render
| Characteristic |
N |
OR |
95% CI |
p-value |
| Age |
3,784 |
1.00 |
0.00, 33,234,572,863,151,126,253,589,885,910,374,792,622,009,002,930,739,352,140,257,320,052,974,679,648,356,012,118,124,517,226,347,799,556,268,642,517,016,984,103,244,776,589,737,823,977,045,904,041,344,183,447,140,882,591,323,890,986,127,607,033,250,480,587,244,620,166,054,550,460,586,521,182,482,216,256,275,726,589,547,969,092,765,351,936 |
>0.9 |
| Gender |
3,784 |
|
|
|
| Â Â Â Â Male |
|
— |
— |
|
| Â Â Â Â Female |
|
1.00 |
0.00, Inf |
>0.9 |
| Race |
3,784 |
|
|
|
| Â Â Â Â White |
|
— |
— |
|
| Â Â Â Â Black |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Asian |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Native |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Other |
|
1.00 |
0.00, Inf |
>0.9 |
| Ethnicity |
3,784 |
|
|
|
| Â Â Â Â NonHispanic |
|
— |
— |
|
| Â Â Â Â Hispanic |
|
1.00 |
0.00, Inf |
>0.9 |
| Primary Language |
3,784 |
|
|
|
| Â Â Â Â English |
|
— |
— |
|
| Â Â Â Â Other |
|
1.00 |
0.00, Inf |
>0.9 |
| Charlson Comorbidity Index |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Total SVI |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| SVI Quartiles |
3,784 |
|
|
|
| Â Â Â Â First |
|
— |
— |
|
| Â Â Â Â Second |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Third |
|
1.00 |
0.00, Inf |
>0.9 |
| Â Â Â Â Fourth |
|
1.00 |
0.00, Inf |
>0.9 |
| Soceioeconomic Status |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Household Composition |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Minority Status and Language |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
| Housing and Transportation |
3,784 |
1.00 |
0.00, Inf |
>0.9 |
NULL
Multivariable Models by Class (RPL_THEMES)
ASA
## Total SVI
ASA_access <- glm(ASA_3 ~ age_yrs + gender + race_5 + ethnic_3 + lang_3
+ max_ch + RPL_THEMES,
family = "binomial",
data = UC_meds_3)
summary(ASA_access )
Call:
glm(formula = ASA_3 ~ age_yrs + gender + race_5 + ethnic_3 +
lang_3 + max_ch + RPL_THEMES, family = "binomial", data = UC_meds_3)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8679 -0.5441 -0.4834 -0.4223 2.4125
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.812443 0.166056 -10.915 < 2e-16 ***
age_yrs -0.006741 0.003023 -2.230 0.025753 *
genderFemale 0.356928 0.103059 3.463 0.000534 ***
race_5Black 0.128121 0.214084 0.598 0.549534
race_5Asian 0.469260 0.218976 2.143 0.032115 *
race_5Native -0.078508 0.755811 -0.104 0.917271
race_5Other 0.643663 0.229272 2.807 0.004994 **
ethnic_3Hispanic -0.083076 0.295729 -0.281 0.778773
lang_3Other 0.337591 0.378089 0.893 0.371917
max_ch -0.023294 0.012248 -1.902 0.057187 .
RPL_THEMES -0.158865 0.213469 -0.744 0.456752
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2796.4 on 3783 degrees of freedom
Residual deviance: 2751.5 on 3773 degrees of freedom
AIC: 2773.5
Number of Fisher Scoring iterations: 5
broom::glance(ASA_access )
broom::tidy(ASA_access , exponentiate = TRUE)
tbl_regression(ASA_access, label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| Age |
0.99 |
0.99, 1.00 |
0.026 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.43 |
1.17, 1.75 |
<0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.14 |
0.73, 1.70 |
0.5 |
| Â Â Â Â Asian |
1.60 |
1.02, 2.42 |
0.032 |
| Â Â Â Â Native |
0.92 |
0.15, 3.30 |
>0.9 |
| Â Â Â Â Other |
1.90 |
1.20, 2.95 |
0.005 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
0.92 |
0.50, 1.60 |
0.8 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.40 |
0.64, 2.84 |
0.4 |
| Charlson Comorbidity Index |
0.98 |
0.95, 1.00 |
0.057 |
| Total SVI |
0.85 |
0.56, 1.29 |
0.5 |
# Model performance
model_performance(ASA_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
2773.513 | 2842.137 | 0.012 | 0.324 | 0.854 | 0.364 | -59.248 | 5.288e-04 | 0.789
performance::check_model(ASA_access, panel = TRUE)

# Margins
cplot(ASA_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Mesalamine Rx Given SVI")

## All Themes
ASA_access2 <- glm(ASA_3 ~ age_yrs + gender + race_5 + ethnic_3 + lang_3
+ max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = UC_meds_3)
summary(ASA_access2 )
Call:
glm(formula = ASA_3 ~ age_yrs + gender + race_5 + ethnic_3 +
lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = UC_meds_3)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8540 -0.5411 -0.4829 -0.4196 2.4255
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.800114 0.198825 -9.054 < 2e-16 ***
age_yrs -0.006562 0.003030 -2.165 0.030355 *
genderFemale 0.356414 0.103097 3.457 0.000546 ***
race_5Black 0.101615 0.217633 0.467 0.640564
race_5Asian 0.411965 0.225647 1.826 0.067895 .
race_5Native -0.080771 0.756433 -0.107 0.914964
race_5Other 0.623641 0.230490 2.706 0.006816 **
ethnic_3Hispanic -0.083917 0.295595 -0.284 0.776493
lang_3Other 0.297934 0.379240 0.786 0.432096
max_ch -0.022898 0.012254 -1.869 0.061674 .
RPL_THEME1 0.035467 0.283107 0.125 0.900303
RPL_THEME2 -0.305557 0.250045 -1.222 0.221704
RPL_THEME3 0.063012 0.185924 0.339 0.734677
RPL_THEME4 -0.012995 0.209754 -0.062 0.950598
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2796.4 on 3783 degrees of freedom
Residual deviance: 2749.7 on 3770 degrees of freedom
AIC: 2777.7
Number of Fisher Scoring iterations: 5
broom::glance(ASA_access2 )
broom::tidy(ASA_access2 , exponentiate = TRUE)
tbl_regression(ASA_access2, label = list(age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| Age |
0.99 |
0.99, 1.00 |
0.030 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.43 |
1.17, 1.75 |
<0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.11 |
0.71, 1.67 |
0.6 |
| Â Â Â Â Asian |
1.51 |
0.95, 2.32 |
0.068 |
| Â Â Â Â Native |
0.92 |
0.14, 3.30 |
>0.9 |
| Â Â Â Â Other |
1.87 |
1.17, 2.90 |
0.007 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
0.92 |
0.50, 1.60 |
0.8 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.35 |
0.61, 2.73 |
0.4 |
| Charlson Comorbidity Index |
0.98 |
0.95, 1.00 |
0.062 |
| Soceioeconomic Status |
1.04 |
0.59, 1.80 |
>0.9 |
| Household Composition |
0.74 |
0.45, 1.20 |
0.2 |
| Minority Status and Language |
1.07 |
0.74, 1.53 |
0.7 |
| Housing and Transportation |
0.99 |
0.65, 1.49 |
>0.9 |
# Model performance
model_performance(ASA_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
2777.703 | 2865.042 | 0.013 | 0.324 | 0.854 | 0.363 | -59.264 | 4.113e-04 | 0.790
performance::check_model(ASA_access2, panel = TRUE)

# Margins
cplot(ASA_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of ASA Rx Given Theme 1")

cplot(ASA_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of ASA Rx Given THEME2")

cplot(ASA_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of ASA Rx Given THEME3")

cplot(ASA_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of ASA Rx Given THEME4")

Immunomodulator
# Total SVI
immuno_access <- glm(immuno_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline)
summary(immuno_access )
Call:
glm(formula = immuno_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8345 -0.2581 -0.2061 -0.1596 3.2574
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.344969 0.212946 -11.012 < 2e-16 ***
ibd_3UC -0.583910 0.152993 -3.817 0.000135 ***
ibd_3Unspecified -0.238358 1.022199 -0.233 0.815620
age_yrs -0.027577 0.004616 -5.974 2.32e-09 ***
genderFemale -0.355211 0.144626 -2.456 0.014047 *
race_5Black -0.446640 0.338691 -1.319 0.187261
race_5Asian 0.419083 0.364312 1.150 0.250004
race_5Native 0.404722 1.028292 0.394 0.693886
race_5Other -1.041447 0.606626 -1.717 0.086018 .
ethnic_3Hispanic 0.557254 0.442458 1.259 0.207868
lang_3Other 0.582826 0.623475 0.935 0.349890
max_ch 0.096174 0.014359 6.698 2.11e-11 ***
RPL_THEMES -0.122577 0.291634 -0.420 0.674258
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1891.2 on 7835 degrees of freedom
Residual deviance: 1805.6 on 7823 degrees of freedom
AIC: 1831.6
Number of Fisher Scoring iterations: 7
broom::glance(immuno_access )
broom::tidy(immuno_access , exponentiate = TRUE)
tbl_regression(immuno_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.56 |
0.41, 0.75 |
<0.001 |
| Â Â Â Â Unspecified |
0.79 |
0.04, 3.73 |
0.8 |
| Age |
0.97 |
0.96, 0.98 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.70 |
0.53, 0.93 |
0.014 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
0.64 |
0.31, 1.18 |
0.2 |
| Â Â Â Â Asian |
1.52 |
0.69, 2.94 |
0.3 |
| Â Â Â Â Native |
1.50 |
0.08, 7.25 |
0.7 |
| Â Â Â Â Other |
0.35 |
0.08, 0.98 |
0.086 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.75 |
0.66, 3.84 |
0.2 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.79 |
0.42, 5.24 |
0.3 |
| Charlson Comorbidity Index |
1.10 |
1.07, 1.13 |
<0.001 |
| Total SVI |
0.88 |
0.50, 1.56 |
0.7 |
# Model performance
model_performance(immuno_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
1831.643 | 1922.207 | 0.015 | 0.158 | 0.480 | 0.115 | -5.369 | 0.006 | 0.950
performance::check_model(immuno_access, panel = TRUE)

# Margins
cplot(immuno_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given SVI")

## All themes
immuno_access2 <- glm(immuno_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline)
summary(immuno_access2 )
Call:
glm(formula = immuno_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.9226 -0.2583 -0.2027 -0.1569 3.2314
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.149293 0.256840 -8.368 < 2e-16 ***
ibd_3UC -0.575934 0.153338 -3.756 0.000173 ***
ibd_3Unspecified -0.282443 1.025334 -0.275 0.782960
age_yrs -0.027375 0.004619 -5.926 3.10e-09 ***
genderFemale -0.354884 0.144766 -2.451 0.014229 *
race_5Black -0.492708 0.342152 -1.440 0.149860
race_5Asian 0.526077 0.371515 1.416 0.156766
race_5Native 0.388969 1.031450 0.377 0.706093
race_5Other -1.053039 0.606773 -1.735 0.082657 .
ethnic_3Hispanic 0.567800 0.442271 1.284 0.199202
lang_3Other 0.570205 0.622552 0.916 0.359711
max_ch 0.096060 0.014351 6.693 2.18e-11 ***
RPL_THEME1 1.027842 0.400195 2.568 0.010218 *
RPL_THEME2 -0.508736 0.360880 -1.410 0.158626
RPL_THEME3 -0.275267 0.262561 -1.048 0.294458
RPL_THEME4 -0.686773 0.300819 -2.283 0.022430 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1891.2 on 7835 degrees of freedom
Residual deviance: 1796.4 on 7820 degrees of freedom
AIC: 1828.4
Number of Fisher Scoring iterations: 7
broom::glance(immuno_access2 )
broom::tidy(immuno_access2 , exponentiate = TRUE)
tbl_regression(immuno_access2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.56 |
0.41, 0.76 |
<0.001 |
| Â Â Â Â Unspecified |
0.75 |
0.04, 3.60 |
0.8 |
| Age |
0.97 |
0.96, 0.98 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.70 |
0.53, 0.93 |
0.014 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
0.61 |
0.29, 1.14 |
0.15 |
| Â Â Â Â Asian |
1.69 |
0.76, 3.33 |
0.2 |
| Â Â Â Â Native |
1.48 |
0.08, 7.19 |
0.7 |
| Â Â Â Â Other |
0.35 |
0.08, 0.97 |
0.083 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.76 |
0.67, 3.88 |
0.2 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.77 |
0.41, 5.17 |
0.4 |
| Charlson Comorbidity Index |
1.10 |
1.07, 1.13 |
<0.001 |
| Soceioeconomic Status |
2.80 |
1.27, 6.09 |
0.010 |
| Household Composition |
0.60 |
0.30, 1.22 |
0.2 |
| Minority Status and Language |
0.76 |
0.45, 1.27 |
0.3 |
| Housing and Transportation |
0.50 |
0.28, 0.90 |
0.022 |
# Model performance
model_performance(immuno_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
1828.448 | 1939.911 | 0.016 | 0.158 | 0.479 | 0.115 | -5.374 | 0.006 | 0.950
performance::check_model(immuno_access2, panel = TRUE)

# Margins
cplot(immuno_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given Theme 1")

cplot(immuno_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given THEME2")

cplot(immuno_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given THEME3")

cplot(immuno_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given THEME4")

Biologics
# Total SVI
biologic_access <- glm(biologic_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline)
summary(biologic_access )
Call:
glm(formula = biologic_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.6682 -0.8710 -0.6122 1.0796 2.7391
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.284955 0.084680 15.174 < 2e-16 ***
ibd_3UC -0.836952 0.053124 -15.755 < 2e-16 ***
ibd_3Unspecified -2.565503 0.731322 -3.508 0.000451 ***
age_yrs -0.033454 0.001672 -20.007 < 2e-16 ***
genderFemale -0.234009 0.051862 -4.512 6.42e-06 ***
race_5Black 0.309697 0.100180 3.091 0.001992 **
race_5Asian -0.144650 0.154975 -0.933 0.350629
race_5Native -0.211205 0.450785 -0.469 0.639407
race_5Other 0.232594 0.146557 1.587 0.112500
ethnic_3Hispanic 0.024677 0.179770 0.137 0.890817
lang_3Other 0.143213 0.267571 0.535 0.592488
max_ch 0.015833 0.006367 2.487 0.012895 *
RPL_THEMES -0.521087 0.105155 -4.955 7.22e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9797.7 on 7835 degrees of freedom
Residual deviance: 8852.7 on 7823 degrees of freedom
AIC: 8878.7
Number of Fisher Scoring iterations: 5
broom::glance(biologic_access )
broom::tidy(biologic_access , exponentiate = TRUE)
tbl_regression(biologic_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.43 |
0.39, 0.48 |
<0.001 |
| Â Â Â Â Unspecified |
0.08 |
0.01, 0.25 |
<0.001 |
| Age |
0.97 |
0.96, 0.97 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.79 |
0.71, 0.88 |
<0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.36 |
1.12, 1.66 |
0.002 |
| Â Â Â Â Asian |
0.87 |
0.64, 1.17 |
0.4 |
| Â Â Â Â Native |
0.81 |
0.31, 1.87 |
0.6 |
| Â Â Â Â Other |
1.26 |
0.94, 1.68 |
0.11 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.02 |
0.72, 1.45 |
0.9 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.15 |
0.67, 1.93 |
0.6 |
| Charlson Comorbidity Index |
1.02 |
1.00, 1.03 |
0.013 |
| Total SVI |
0.59 |
0.48, 0.73 |
<0.001 |
# Model performance
model_performance(biologic_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
8878.714 | 8969.278 | 0.119 | 0.437 | 1.064 | 0.565 | -Inf | 1.320e-04 | 0.618
performance::check_model(biologic_access, panel = TRUE)

# Margins
cplot(biologic_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given SVI")

## All themes
biologic_access2 <- glm(biologic_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline)
summary(biologic_access2 )
Call:
glm(formula = biologic_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.6595 -0.8662 -0.6093 1.0725 2.7284
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.234932 0.100777 12.254 < 2e-16 ***
ibd_3UC -0.838950 0.053275 -15.747 < 2e-16 ***
ibd_3Unspecified -2.542845 0.730976 -3.479 0.000504 ***
age_yrs -0.033506 0.001678 -19.963 < 2e-16 ***
genderFemale -0.231555 0.051973 -4.455 8.38e-06 ***
race_5Black 0.222303 0.101595 2.188 0.028661 *
race_5Asian -0.238173 0.157965 -1.508 0.131616
race_5Native -0.198160 0.451025 -0.439 0.660404
race_5Other 0.185677 0.147454 1.259 0.207949
ethnic_3Hispanic 0.022071 0.180266 0.122 0.902556
lang_3Other 0.084938 0.268362 0.317 0.751620
max_ch 0.016404 0.006387 2.568 0.010222 *
RPL_THEME1 -0.160785 0.147274 -1.092 0.274945
RPL_THEME2 -0.068216 0.129846 -0.525 0.599331
RPL_THEME3 0.327757 0.095222 3.442 0.000577 ***
RPL_THEME4 -0.492909 0.108826 -4.529 5.92e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9797.7 on 7835 degrees of freedom
Residual deviance: 8823.1 on 7820 degrees of freedom
AIC: 8855.1
Number of Fisher Scoring iterations: 5
broom::glance(biologic_access2 )
broom::tidy(biologic_access2 , exponentiate = TRUE)
tbl_regression(biologic_access2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.43 |
0.39, 0.48 |
<0.001 |
| Â Â Â Â Unspecified |
0.08 |
0.01, 0.26 |
<0.001 |
| Age |
0.97 |
0.96, 0.97 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.79 |
0.72, 0.88 |
<0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.25 |
1.02, 1.52 |
0.029 |
| Â Â Â Â Asian |
0.79 |
0.58, 1.07 |
0.13 |
| Â Â Â Â Native |
0.82 |
0.32, 1.90 |
0.7 |
| Â Â Â Â Other |
1.20 |
0.90, 1.60 |
0.2 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.02 |
0.71, 1.45 |
>0.9 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.09 |
0.63, 1.82 |
0.8 |
| Charlson Comorbidity Index |
1.02 |
1.00, 1.03 |
0.010 |
| Soceioeconomic Status |
0.85 |
0.64, 1.14 |
0.3 |
| Household Composition |
0.93 |
0.72, 1.20 |
0.6 |
| Minority Status and Language |
1.39 |
1.15, 1.67 |
<0.001 |
| Housing and Transportation |
0.61 |
0.49, 0.76 |
<0.001 |
# Model performance
model_performance(biologic_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
8855.065 | 8966.529 | 0.122 | 0.436 | 1.062 | 0.563 | -Inf | 1.576e-04 | 0.619
performance::check_model(biologic_access2, panel = TRUE)

# Margins
cplot(biologic_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Biologic Access Given Theme 1")

cplot(biologic_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of Biologic Access Given THEME2")

cplot(biologic_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Biologic Access Given THEME3")

cplot(biologic_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Biologic Access Given THEME4")

Infliximab
infliximab_access <- glm(infliximab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline2)
summary(infliximab_access )
Call:
glm(formula = infliximab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.5056 -0.7419 -0.5205 -0.2813 2.7958
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.935834 0.090771 10.310 < 2e-16 ***
ibd_3UC -0.784993 0.059865 -13.113 < 2e-16 ***
ibd_3Unspecified -2.771162 1.018461 -2.721 0.006510 **
age_yrs -0.036700 0.001912 -19.196 < 2e-16 ***
genderFemale -0.258076 0.057623 -4.479 7.51e-06 ***
race_5Black 0.396978 0.107807 3.682 0.000231 ***
race_5Asian -0.102515 0.169525 -0.605 0.545364
race_5Native -0.395531 0.554894 -0.713 0.475967
race_5Other 0.195414 0.159993 1.221 0.221939
ethnic_3Hispanic -0.278084 0.205920 -1.350 0.176874
lang_3Other 0.329616 0.290337 1.135 0.256255
max_ch -0.006600 0.007836 -0.842 0.399604
RPL_THEMES -0.525140 0.116888 -4.493 7.03e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 8382.6 on 7835 degrees of freedom
Residual deviance: 7481.6 on 7823 degrees of freedom
AIC: 7507.6
Number of Fisher Scoring iterations: 6
broom::glance(infliximab_access )
broom::tidy(infliximab_access , exponentiate = TRUE)
tbl_regression(infliximab_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.46 |
0.41, 0.51 |
<0.001 |
| Â Â Â Â Unspecified |
0.06 |
0.00, 0.29 |
0.007 |
| Age |
0.96 |
0.96, 0.97 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.77 |
0.69, 0.86 |
<0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.49 |
1.20, 1.83 |
<0.001 |
| Â Â Â Â Asian |
0.90 |
0.64, 1.25 |
0.5 |
| Â Â Â Â Native |
0.67 |
0.19, 1.80 |
0.5 |
| Â Â Â Â Other |
1.22 |
0.88, 1.66 |
0.2 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
0.76 |
0.50, 1.12 |
0.2 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.39 |
0.77, 2.42 |
0.3 |
| Charlson Comorbidity Index |
0.99 |
0.98, 1.01 |
0.4 |
| Total SVI |
0.59 |
0.47, 0.74 |
<0.001 |
# Model performance
model_performance(infliximab_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
7507.605 | 7598.170 | 0.119 | 0.392 | 0.978 | 0.477 | -Inf | 2.618e-04 | 0.691
performance::check_model(infliximab_access, panel = TRUE)

# Margins
cplot(infliximab_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given SVI")

## All themes
infliximab_acess2 <- glm(infliximab_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline2)
summary(infliximab_acess2 )
Call:
glm(formula = infliximab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.4394 -0.7397 -0.5198 -0.2766 2.7925
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.920437 0.109122 8.435 < 2e-16 ***
ibd_3UC -0.784223 0.059985 -13.074 < 2e-16 ***
ibd_3Unspecified -2.750677 1.018104 -2.702 0.0069 **
age_yrs -0.036760 0.001916 -19.191 < 2e-16 ***
genderFemale -0.256613 0.057703 -4.447 8.70e-06 ***
race_5Black 0.333399 0.109365 3.049 0.0023 **
race_5Asian -0.162541 0.172818 -0.941 0.3469
race_5Native -0.377090 0.554109 -0.681 0.4962
race_5Other 0.159484 0.160876 0.991 0.3215
ethnic_3Hispanic -0.277365 0.206120 -1.346 0.1784
lang_3Other 0.299447 0.291442 1.027 0.3042
max_ch -0.006377 0.007852 -0.812 0.4167
RPL_THEME1 -0.203731 0.163372 -1.247 0.2124
RPL_THEME2 -0.004339 0.144107 -0.030 0.9760
RPL_THEME3 0.216992 0.105877 2.049 0.0404 *
RPL_THEME4 -0.479469 0.120844 -3.968 7.26e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 8382.6 on 7835 degrees of freedom
Residual deviance: 7464.9 on 7820 degrees of freedom
AIC: 7496.9
Number of Fisher Scoring iterations: 6
broom::glance(infliximab_acess2 )
broom::tidy(infliximab_acess2 , exponentiate = TRUE)
tbl_regression(infliximab_acess2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.46 |
0.41, 0.51 |
<0.001 |
| Â Â Â Â Unspecified |
0.06 |
0.00, 0.30 |
0.007 |
| Age |
0.96 |
0.96, 0.97 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.77 |
0.69, 0.87 |
<0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.40 |
1.12, 1.73 |
0.002 |
| Â Â Â Â Asian |
0.85 |
0.60, 1.18 |
0.3 |
| Â Â Â Â Native |
0.69 |
0.20, 1.83 |
0.5 |
| Â Â Â Â Other |
1.17 |
0.85, 1.60 |
0.3 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
0.76 |
0.50, 1.12 |
0.2 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.35 |
0.75, 2.35 |
0.3 |
| Charlson Comorbidity Index |
0.99 |
0.98, 1.01 |
0.4 |
| Soceioeconomic Status |
0.82 |
0.59, 1.12 |
0.2 |
| Household Composition |
1.00 |
0.75, 1.32 |
>0.9 |
| Minority Status and Language |
1.24 |
1.01, 1.53 |
0.040 |
| Housing and Transportation |
0.62 |
0.49, 0.78 |
<0.001 |
# Model performance
model_performance(infliximab_acess2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
7496.929 | 7608.392 | 0.121 | 0.391 | 0.977 | 0.476 | -Inf | 1.500e-04 | 0.692
performance::check_model(infliximab_acess2, panel = TRUE)

# Margins
cplot(infliximab_acess2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Infliximab Access Given Theme 1")

cplot(infliximab_acess2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of Infliximab Access Given THEME2")

cplot(infliximab_acess2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Infliximab Access Given THEME3")

cplot(infliximab_acess2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Infliximab Access Given THEME4")

Adalimumab
ada_access <- glm(adalimumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline2)
summary(ada_access )
Call:
glm(formula = adalimumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.5183 -0.2587 -0.1784 -0.1193 3.5359
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.929610 0.217872 -8.857 < 2e-16 ***
ibd_3UC -1.069394 0.178884 -5.978 2.26e-09 ***
ibd_3Unspecified -0.244499 1.022196 -0.239 0.811
age_yrs -0.038065 0.005325 -7.148 8.82e-13 ***
genderFemale 0.067628 0.149447 0.453 0.651
race_5Black 0.264959 0.256382 1.033 0.301
race_5Asian 0.192940 0.428658 0.450 0.653
race_5Native 0.589577 1.035143 0.570 0.569
race_5Other 0.094096 0.409763 0.230 0.818
ethnic_3Hispanic 0.123315 0.482531 0.256 0.798
lang_3Other -13.672672 415.596155 -0.033 0.974
max_ch -0.011168 0.023844 -0.468 0.640
RPL_THEMES 0.091152 0.292490 0.312 0.755
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1796.1 on 7835 degrees of freedom
Residual deviance: 1652.0 on 7823 degrees of freedom
AIC: 1678
Number of Fisher Scoring iterations: 16
broom::glance(ada_access )
broom::tidy(ada_access , exponentiate = TRUE)
tbl_regression(ada_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.34 |
0.24, 0.48 |
<0.001 |
| Â Â Â Â Unspecified |
0.78 |
0.04, 3.71 |
0.8 |
| Age |
0.96 |
0.95, 0.97 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.07 |
0.80, 1.44 |
0.7 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.30 |
0.77, 2.11 |
0.3 |
| Â Â Â Â Asian |
1.21 |
0.47, 2.58 |
0.7 |
| Â Â Â Â Native |
1.80 |
0.10, 8.91 |
0.6 |
| Â Â Â Â Other |
1.10 |
0.45, 2.29 |
0.8 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.13 |
0.38, 2.65 |
0.8 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.00 |
0.00, 58.9 |
>0.9 |
| Charlson Comorbidity Index |
0.99 |
0.94, 1.03 |
0.6 |
| Total SVI |
1.10 |
0.61, 1.93 |
0.8 |
# Model performance
model_performance(ada_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
1677.965 | 1768.529 | 0.021 | 0.152 | 0.460 | 0.105 | -4.715 | 0.007 | 0.953
performance::check_model(ada_access, panel = TRUE)

# Margins
cplot(ada_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Immunomodulator Rx Given SVI")

## All themes
ada_access2 <- glm(adalimumab_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline2)
summary(ada_access2 )
Call:
glm(formula = adalimumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.5968 -0.2574 -0.1769 -0.1180 3.5978
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.08787 0.26869 -7.771 7.81e-15 ***
ibd_3UC -1.06208 0.17903 -5.932 2.99e-09 ***
ibd_3Unspecified -0.21461 1.02218 -0.210 0.834
age_yrs -0.03800 0.00533 -7.130 1.01e-12 ***
genderFemale 0.06853 0.14951 0.458 0.647
race_5Black 0.16609 0.26023 0.638 0.523
race_5Asian 0.10786 0.43688 0.247 0.805
race_5Native 0.59851 1.03495 0.578 0.563
race_5Other 0.03852 0.41004 0.094 0.925
ethnic_3Hispanic 0.12329 0.48145 0.256 0.798
lang_3Other -13.71344 414.93287 -0.033 0.974
max_ch -0.01141 0.02387 -0.478 0.633
RPL_THEME1 0.27396 0.41451 0.661 0.509
RPL_THEME2 0.20887 0.36915 0.566 0.572
RPL_THEME3 0.44372 0.27543 1.611 0.107
RPL_THEME4 -0.48034 0.31119 -1.544 0.123
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1796.1 on 7835 degrees of freedom
Residual deviance: 1647.0 on 7820 degrees of freedom
AIC: 1679
Number of Fisher Scoring iterations: 16
broom::glance(ada_access2 )
broom::tidy(ada_access2 , exponentiate = TRUE)
tbl_regression(ada_access2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.35 |
0.24, 0.49 |
<0.001 |
| Â Â Â Â Unspecified |
0.81 |
0.05, 3.83 |
0.8 |
| Age |
0.96 |
0.95, 0.97 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.07 |
0.80, 1.44 |
0.6 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.18 |
0.69, 1.93 |
0.5 |
| Â Â Â Â Asian |
1.11 |
0.42, 2.42 |
0.8 |
| Â Â Â Â Native |
1.82 |
0.10, 8.99 |
0.6 |
| Â Â Â Â Other |
1.04 |
0.42, 2.17 |
>0.9 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.13 |
0.39, 2.64 |
0.8 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.00 |
0.00, 53.7 |
>0.9 |
| Charlson Comorbidity Index |
0.99 |
0.94, 1.03 |
0.6 |
| Soceioeconomic Status |
1.32 |
0.58, 2.95 |
0.5 |
| Household Composition |
1.23 |
0.60, 2.55 |
0.6 |
| Minority Status and Language |
1.56 |
0.91, 2.68 |
0.11 |
| Housing and Transportation |
0.62 |
0.33, 1.13 |
0.12 |
# Model performance
model_performance(ada_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
1678.966 | 1790.429 | 0.023 | 0.152 | 0.459 | 0.105 | -4.718 | 0.007 | 0.954
performance::check_model(ada_access2, panel = TRUE)

# Margins
cplot(ada_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Adalimumab Access Given Theme 1")

cplot(ada_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of Adalimumab Access Given THEME2")

cplot(ada_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Adalimumab Access Given THEME3")

cplot(ada_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Adalimumab Access Given THEME4")

Vedolizumab
vedolizumab_access <- glm(vedolizumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline2)
summary(vedolizumab_access )
Call:
glm(formula = vedolizumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8052 -0.4416 -0.4036 -0.3679 2.5038
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.991454 0.130418 -15.270 < 2e-16 ***
ibd_3UC -0.003793 0.082659 -0.046 0.963397
ibd_3Unspecified -13.143216 228.805833 -0.057 0.954193
age_yrs -0.009210 0.002495 -3.691 0.000224 ***
genderFemale 0.030180 0.081863 0.369 0.712378
race_5Black 0.017017 0.170682 0.100 0.920585
race_5Asian -0.129602 0.254667 -0.509 0.610816
race_5Native -0.198861 0.736158 -0.270 0.787057
race_5Other 0.472693 0.201626 2.344 0.019058 *
ethnic_3Hispanic 0.211379 0.255009 0.829 0.407156
lang_3Other 0.337822 0.371132 0.910 0.362693
max_ch 0.051149 0.008522 6.002 1.95e-09 ***
RPL_THEMES -0.542136 0.170285 -3.184 0.001454 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 4562.1 on 7835 degrees of freedom
Residual deviance: 4502.4 on 7823 degrees of freedom
AIC: 4528.4
Number of Fisher Scoring iterations: 14
broom::glance(vedolizumab_access )
broom::tidy(vedolizumab_access , exponentiate = TRUE)
tbl_regression(vedolizumab_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
1.00 |
0.85, 1.17 |
>0.9 |
| Â Â Â Â Unspecified |
0.00 |
0.00, 0.05 |
>0.9 |
| Age |
0.99 |
0.99, 1.00 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.03 |
0.88, 1.21 |
0.7 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.02 |
0.72, 1.41 |
>0.9 |
| Â Â Â Â Asian |
0.88 |
0.52, 1.41 |
0.6 |
| Â Â Â Â Native |
0.82 |
0.13, 2.76 |
0.8 |
| Â Â Â Â Other |
1.60 |
1.06, 2.35 |
0.019 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.24 |
0.73, 1.99 |
0.4 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.40 |
0.63, 2.76 |
0.4 |
| Charlson Comorbidity Index |
1.05 |
1.03, 1.07 |
<0.001 |
| Total SVI |
0.58 |
0.42, 0.81 |
0.001 |
# Model performance
model_performance(vedolizumab_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
4528.378 | 4618.942 | 0.008 | 0.278 | 0.759 | 0.287 | -59.229 | 8.071e-04 | 0.845
performance::check_model(vedolizumab_access, panel = TRUE)

# Margins
cplot(vedolizumab_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Vedolizumab Access Given SVI")

## All themes
vedolizumab_access2 <- glm(vedolizumab_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline2)
summary(vedolizumab_access2 )
Call:
glm(formula = vedolizumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8060 -0.4454 -0.4035 -0.3598 2.5837
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.006522 0.157146 -12.769 < 2e-16 ***
ibd_3UC -0.004880 0.082745 -0.059 0.952974
ibd_3Unspecified -13.124175 228.176438 -0.058 0.954133
age_yrs -0.008918 0.002502 -3.565 0.000364 ***
genderFemale 0.030951 0.081939 0.378 0.705631
race_5Black -0.078350 0.172688 -0.454 0.650040
race_5Asian -0.235960 0.257898 -0.915 0.360225
race_5Native -0.199177 0.736960 -0.270 0.786954
race_5Other 0.418920 0.201921 2.075 0.038017 *
ethnic_3Hispanic 0.203365 0.254227 0.800 0.423749
lang_3Other 0.226669 0.371530 0.610 0.541799
max_ch 0.051796 0.008532 6.071 1.27e-09 ***
RPL_THEME1 0.104277 0.231879 0.450 0.652924
RPL_THEME2 -0.516225 0.207644 -2.486 0.012915 *
RPL_THEME3 0.234396 0.149475 1.568 0.116851
RPL_THEME4 -0.338792 0.172100 -1.969 0.049002 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 4562.1 on 7835 degrees of freedom
Residual deviance: 4491.9 on 7820 degrees of freedom
AIC: 4523.9
Number of Fisher Scoring iterations: 14
broom::glance(vedolizumab_access2 )
broom::tidy(vedolizumab_access2 , exponentiate = TRUE)
tbl_regression(vedolizumab_access2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
1.00 |
0.85, 1.17 |
>0.9 |
| Â Â Â Â Unspecified |
0.00 |
0.00, 0.05 |
>0.9 |
| Age |
0.99 |
0.99, 1.00 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.03 |
0.88, 1.21 |
0.7 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
0.92 |
0.65, 1.28 |
0.7 |
| Â Â Â Â Asian |
0.79 |
0.46, 1.27 |
0.4 |
| Â Â Â Â Native |
0.82 |
0.13, 2.76 |
0.8 |
| Â Â Â Â Other |
1.52 |
1.01, 2.23 |
0.038 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.23 |
0.73, 1.97 |
0.4 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.25 |
0.57, 2.47 |
0.5 |
| Charlson Comorbidity Index |
1.05 |
1.04, 1.07 |
<0.001 |
| Soceioeconomic Status |
1.11 |
0.70, 1.74 |
0.7 |
| Household Composition |
0.60 |
0.40, 0.90 |
0.013 |
| Minority Status and Language |
1.26 |
0.94, 1.70 |
0.12 |
| Housing and Transportation |
0.71 |
0.51, 1.00 |
0.049 |
# Model performance
model_performance(vedolizumab_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
4523.881 | 4635.345 | 0.009 | 0.278 | 0.758 | 0.287 | -59.273 | 8.071e-04 | 0.846
performance::check_model(vedolizumab_access2, panel = TRUE)

# Margins
cplot(vedolizumab_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Vedolizumab Access Given Theme 1")

cplot(vedolizumab_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of Vedolizumab Access Given THEME2")

cplot(vedolizumab_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Vedolizumab Access Given THEME3")

cplot(vedolizumab_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Vedolizumab Access Given THEME4")

Ustekinumab
ustekinumab_access <- glm(ustekinumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline2)
summary(ustekinumab_access )
Call:
glm(formula = ustekinumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.4721 -0.2990 -0.1602 -0.1133 3.3177
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.260003 0.208089 -10.861 < 2e-16 ***
ibd_3UC -1.815656 0.208943 -8.690 < 2e-16 ***
ibd_3Unspecified -13.446163 377.303942 -0.036 0.972
age_yrs -0.019362 0.004572 -4.235 2.29e-05 ***
genderFemale -0.032177 0.142052 -0.227 0.821
race_5Black 0.292511 0.244053 1.199 0.231
race_5Asian -0.344452 0.527465 -0.653 0.514
race_5Native 0.549679 1.035561 0.531 0.596
race_5Other -0.828149 0.600155 -1.380 0.168
ethnic_3Hispanic 0.146688 0.529568 0.277 0.782
lang_3Other 0.403149 0.749602 0.538 0.591
max_ch 0.022765 0.017566 1.296 0.195
RPL_THEMES -0.144867 0.280467 -0.517 0.605
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1941.6 on 7835 degrees of freedom
Residual deviance: 1789.9 on 7823 degrees of freedom
AIC: 1815.9
Number of Fisher Scoring iterations: 15
broom::glance(ustekinumab_access )
broom::tidy(ustekinumab_access , exponentiate = TRUE)
tbl_regression(ustekinumab_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.16 |
0.11, 0.24 |
<0.001 |
| Â Â Â Â Unspecified |
0.00 |
0.00, 30.7 |
>0.9 |
| Age |
0.98 |
0.97, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.97 |
0.73, 1.28 |
0.8 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.34 |
0.81, 2.12 |
0.2 |
| Â Â Â Â Asian |
0.71 |
0.21, 1.76 |
0.5 |
| Â Â Â Â Native |
1.73 |
0.10, 8.58 |
0.6 |
| Â Â Â Â Other |
0.44 |
0.11, 1.20 |
0.2 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.16 |
0.34, 2.90 |
0.8 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.50 |
0.24, 5.20 |
0.6 |
| Charlson Comorbidity Index |
1.02 |
0.99, 1.06 |
0.2 |
| Total SVI |
0.87 |
0.50, 1.49 |
0.6 |
# Model performance
model_performance(ustekinumab_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
1815.861 | 1906.426 | 0.019 | 0.160 | 0.478 | 0.114 | -5.758 | 0.007 | 0.949
performance::check_model(ustekinumab_access, panel = TRUE)

# Margins
cplot(ustekinumab_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Ustekinumab Access Given SVI")

## All themes
ustekinumab_access2 <- glm(ustekinumab_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline2)
summary(ustekinumab_access2 )
Call:
glm(formula = ustekinumab_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline2)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.4893 -0.2965 -0.1638 -0.1133 3.3611
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.354405 0.255513 -9.214 < 2e-16 ***
ibd_3UC -1.815700 0.209015 -8.687 < 2e-16 ***
ibd_3Unspecified -13.427856 377.218570 -0.036 0.972
age_yrs -0.019396 0.004573 -4.242 2.22e-05 ***
genderFemale -0.028041 0.142103 -0.197 0.844
race_5Black 0.258051 0.248040 1.040 0.298
race_5Asian -0.420739 0.532830 -0.790 0.430
race_5Native 0.543270 1.036255 0.524 0.600
race_5Other -0.850198 0.599960 -1.417 0.156
ethnic_3Hispanic 0.140827 0.529723 0.266 0.790
lang_3Other 0.392588 0.752152 0.522 0.602
max_ch 0.022845 0.017592 1.299 0.194
RPL_THEME1 -0.297369 0.404645 -0.735 0.462
RPL_THEME2 0.286072 0.358570 0.798 0.425
RPL_THEME3 0.312155 0.261017 1.196 0.232
RPL_THEME4 -0.282064 0.297702 -0.947 0.343
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1941.6 on 7835 degrees of freedom
Residual deviance: 1786.8 on 7820 degrees of freedom
AIC: 1818.8
Number of Fisher Scoring iterations: 15
broom::glance(ustekinumab_access2 )
broom::tidy(ustekinumab_access2 , exponentiate = TRUE)
tbl_regression(ustekinumab_access2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.16 |
0.11, 0.24 |
<0.001 |
| Â Â Â Â Unspecified |
0.00 |
0.00, 31.0 |
>0.9 |
| Age |
0.98 |
0.97, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.97 |
0.74, 1.29 |
0.8 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.29 |
0.78, 2.06 |
0.3 |
| Â Â Â Â Asian |
0.66 |
0.19, 1.65 |
0.4 |
| Â Â Â Â Native |
1.72 |
0.09, 8.55 |
0.6 |
| Â Â Â Â Other |
0.43 |
0.10, 1.18 |
0.2 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.15 |
0.34, 2.88 |
0.8 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
1.48 |
0.23, 5.19 |
0.6 |
| Charlson Comorbidity Index |
1.02 |
0.99, 1.06 |
0.2 |
| Soceioeconomic Status |
0.74 |
0.33, 1.63 |
0.5 |
| Household Composition |
1.33 |
0.66, 2.70 |
0.4 |
| Minority Status and Language |
1.37 |
0.82, 2.28 |
0.2 |
| Housing and Transportation |
0.75 |
0.42, 1.35 |
0.3 |
# Model performance
model_performance(ustekinumab_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
1818.783 | 1930.247 | 0.019 | 0.160 | 0.478 | 0.114 | -5.760 | 0.007 | 0.949
performance::check_model(ustekinumab_access2, panel = TRUE)

# Margins
cplot(ustekinumab_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Ustekinumab Access Given Theme 1")

cplot(ustekinumab_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of Ustekinumab Access Given THEME2")

cplot(ustekinumab_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Ustekinumab Access Given THEME3")

cplot(ustekinumab_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Ustekinumab Access Given THEME4")

Small Molecules
small_access <- glm(small_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = UC_meds_3)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
Steroids
steroid_access <- glm(steroids_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "binomial",
data = baseline)
summary(steroid_access )
Call:
glm(formula = steroids_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "binomial",
data = baseline)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.6652 -0.5836 -0.5113 -0.4218 2.5477
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.473599 0.103000 -14.307 < 2e-16 ***
ibd_3UC 0.007799 0.064015 0.122 0.9030
ibd_3Unspecified -1.329186 0.737475 -1.802 0.0715 .
age_yrs -0.016670 0.001979 -8.424 < 2e-16 ***
genderFemale 0.065334 0.063407 1.030 0.3028
race_5Black 0.516818 0.112741 4.584 4.56e-06 ***
race_5Asian -0.346263 0.223215 -1.551 0.1208
race_5Native 0.297234 0.471472 0.630 0.5284
race_5Other -0.278414 0.202178 -1.377 0.1685
ethnic_3Hispanic 0.426193 0.209469 2.035 0.0419 *
lang_3Other -0.280633 0.386769 -0.726 0.4681
max_ch 0.129497 0.006495 19.938 < 2e-16 ***
RPL_THEMES 0.064212 0.127388 0.504 0.6142
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 7051.5 on 7835 degrees of freedom
Residual deviance: 6593.4 on 7823 degrees of freedom
AIC: 6619.4
Number of Fisher Scoring iterations: 5
broom::glance(steroid_access )
broom::tidy(steroid_access , exponentiate = TRUE)
tbl_regression(steroid_access, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
1.01 |
0.89, 1.14 |
>0.9 |
| Â Â Â Â Unspecified |
0.26 |
0.04, 0.89 |
0.071 |
| Age |
0.98 |
0.98, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.07 |
0.94, 1.21 |
0.3 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.68 |
1.34, 2.09 |
<0.001 |
| Â Â Â Â Asian |
0.71 |
0.45, 1.07 |
0.12 |
| Â Â Â Â Native |
1.35 |
0.49, 3.19 |
0.5 |
| Â Â Â Â Other |
0.76 |
0.50, 1.11 |
0.2 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.53 |
1.00, 2.28 |
0.042 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.76 |
0.33, 1.52 |
0.5 |
| Charlson Comorbidity Index |
1.14 |
1.12, 1.15 |
<0.001 |
| Total SVI |
1.07 |
0.83, 1.37 |
0.6 |
# Model performance
model_performance(steroid_access)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
6619.371 | 6709.935 | 0.067 | 0.360 | 0.918 | 0.421 | -Inf | 1.277e-04 | 0.741
performance::check_model(steroid_access, panel = TRUE)

# Margins
cplot(steroid_access, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Steroid Access Given SVI")

## All themes
steroid_access2 <- glm(steroids_3 ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "binomial",
data = baseline)
summary(steroid_access2 )
Call:
glm(formula = steroids_3 ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "binomial", data = baseline)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.7286 -0.5858 -0.5058 -0.4198 2.5506
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.385706 0.122075 -11.351 < 2e-16 ***
ibd_3UC 0.012909 0.064099 0.201 0.8404
ibd_3Unspecified -1.349920 0.737672 -1.830 0.0673 .
age_yrs -0.016780 0.001981 -8.470 < 2e-16 ***
genderFemale 0.066016 0.063451 1.040 0.2981
race_5Black 0.534237 0.115158 4.639 3.5e-06 ***
race_5Asian -0.249034 0.225960 -1.102 0.2704
race_5Native 0.301842 0.470878 0.641 0.5215
race_5Other -0.255745 0.202846 -1.261 0.2074
ethnic_3Hispanic 0.440742 0.209710 2.102 0.0356 *
lang_3Other -0.240422 0.387393 -0.621 0.5349
max_ch 0.129349 0.006500 19.900 < 2e-16 ***
RPL_THEME1 0.272533 0.179848 1.515 0.1297
RPL_THEME2 0.094717 0.158879 0.596 0.5511
RPL_THEME3 -0.216656 0.116173 -1.865 0.0622 .
RPL_THEME4 -0.216059 0.132036 -1.636 0.1018
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 7051.5 on 7835 degrees of freedom
Residual deviance: 6583.9 on 7820 degrees of freedom
AIC: 6615.9
Number of Fisher Scoring iterations: 5
broom::glance(steroid_access2 )
broom::tidy(steroid_access2 , exponentiate = TRUE)
tbl_regression(steroid_access2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
OR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
1.01 |
0.89, 1.15 |
0.8 |
| Â Â Â Â Unspecified |
0.26 |
0.04, 0.87 |
0.067 |
| Age |
0.98 |
0.98, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.07 |
0.94, 1.21 |
0.3 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.71 |
1.36, 2.13 |
<0.001 |
| Â Â Â Â Asian |
0.78 |
0.49, 1.19 |
0.3 |
| Â Â Â Â Native |
1.35 |
0.49, 3.20 |
0.5 |
| Â Â Â Â Other |
0.77 |
0.51, 1.14 |
0.2 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.55 |
1.02, 2.32 |
0.036 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.79 |
0.34, 1.59 |
0.5 |
| Charlson Comorbidity Index |
1.14 |
1.12, 1.15 |
<0.001 |
| Soceioeconomic Status |
1.31 |
0.92, 1.87 |
0.13 |
| Household Composition |
1.10 |
0.81, 1.50 |
0.6 |
| Minority Status and Language |
0.81 |
0.64, 1.01 |
0.062 |
| Housing and Transportation |
0.81 |
0.62, 1.04 |
0.10 |
# Model performance
model_performance(steroid_access2)
# Indices of model performance
AIC | BIC | Tjur's R2 | RMSE | Sigma | Log_loss | Score_log | Score_spherical | PCP
------------------------------------------------------------------------------------------------
6615.868 | 6727.332 | 0.068 | 0.360 | 0.918 | 0.420 | -Inf | 1.276e-04 | 0.742
performance::check_model(steroid_access2, panel = TRUE)

# Margins
cplot(steroid_access2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Steroid Access Given Theme 1")

cplot(steroid_access2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of SSteroid Access Given THEME2")

cplot(steroid_access2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Steroide Access Given THEME3")

cplot(steroid_access2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Steroid Access Given THEME4")

Steroids - Poisson
steroid_count.p <- glm(steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
family = "poisson",
data = access_class_dich)
summary(steroid_count.p)
Call:
glm(formula = steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, family = "poisson",
data = access_class_dich)
Deviance Residuals:
Min 1Q Median 3Q Max
-5.0896 -1.7688 -0.9456 0.1930 25.7563
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.9536445 0.0254459 37.477 < 2e-16 ***
ibd_3UC -0.1853562 0.0160509 -11.548 < 2e-16 ***
ibd_3Unspecified -0.8984805 0.1693805 -5.305 1.13e-07 ***
age_yrs -0.0141004 0.0004826 -29.219 < 2e-16 ***
genderFemale 0.0493611 0.0157686 3.130 0.001746 **
race_5Black 0.3485969 0.0270175 12.903 < 2e-16 ***
race_5Asian -0.4316746 0.0638844 -6.757 1.41e-11 ***
race_5Native -0.1207442 0.1391074 -0.868 0.385398
race_5Other 0.1285500 0.0440705 2.917 0.003535 **
ethnic_3Hispanic 0.4941812 0.0470679 10.499 < 2e-16 ***
lang_3Other -0.4091470 0.1052017 -3.889 0.000101 ***
max_ch 0.0937966 0.0014200 66.052 < 2e-16 ***
RPL_THEMES 0.1100711 0.0314838 3.496 0.000472 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 38056 on 7835 degrees of freedom
Residual deviance: 33571 on 7823 degrees of freedom
AIC: 45936
Number of Fisher Scoring iterations: 6
broom::glance(steroid_count.p)
broom::tidy(steroid_count.p, exponentiate = TRUE)
tbl_regression(steroid_count.p, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
IRR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.83 |
0.81, 0.86 |
<0.001 |
| Â Â Â Â Unspecified |
0.41 |
0.29, 0.56 |
<0.001 |
| Age |
0.99 |
0.99, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.05 |
1.02, 1.08 |
0.002 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.42 |
1.34, 1.49 |
<0.001 |
| Â Â Â Â Asian |
0.65 |
0.57, 0.73 |
<0.001 |
| Â Â Â Â Native |
0.89 |
0.67, 1.15 |
0.4 |
| Â Â Â Â Other |
1.14 |
1.04, 1.24 |
0.004 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.64 |
1.49, 1.80 |
<0.001 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.66 |
0.54, 0.81 |
<0.001 |
| Charlson Comorbidity Index |
1.10 |
1.10, 1.10 |
<0.001 |
| Total SVI |
1.12 |
1.05, 1.19 |
<0.001 |
# NB Residual Plot
steroid_count.p.res <- resid(steroid_count.p)
plot(fitted(steroid_count.p), steroid_count.p.res, col='steelblue', pch=16,
xlab='Predicted Vaccines', ylab='Standardized Residuals', main='Negative Binomial')
abline(0,0)

# NB regression more appropriate because residuals of the model are smaller
# Likelihood ratio test
pchisq(2 * (logLik(steroid_count.p) - logLik(steroid_count.p)), df = 1, lower.tail = FALSE)
'log Lik.' 1 (df=13)
# p-value of loglik is < 0.05 so NB regression is the more appropriate model
# Model performance
model_performance(steroid_count.p)
# Indices of model performance
AIC | BIC | Nagelkerke's R2 | RMSE | Sigma | Score_log | Score_spherical
-------------------------------------------------------------------------------------
45936.287 | 46026.851 | 0.439 | 4.748 | 2.072 | -2.929 | 0.010
performance::check_model(steroid_count.p, panel = TRUE)

# Margins
cplot(steroid_count.nb, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Steroid Rx Given SVI")

## All themes
steroid_count.p2 <- glm(steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1
+ RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
family = "poisson",
data = access_class_dich)
summary(steroid_count.p2)
Call:
glm(formula = steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, family = "poisson", data = access_class_dich)
Deviance Residuals:
Min 1Q Median 3Q Max
-5.2760 -1.7647 -0.9420 0.1924 25.5761
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.9587554 0.0303375 31.603 < 2e-16 ***
ibd_3UC -0.1814101 0.0160637 -11.293 < 2e-16 ***
ibd_3Unspecified -0.9042024 0.1693905 -5.338 9.40e-08 ***
age_yrs -0.0141059 0.0004831 -29.197 < 2e-16 ***
genderFemale 0.0511812 0.0157720 3.245 0.001174 **
race_5Black 0.3305843 0.0275427 12.003 < 2e-16 ***
race_5Asian -0.3987125 0.0644696 -6.184 6.23e-10 ***
race_5Native -0.1119765 0.1391298 -0.805 0.420915
race_5Other 0.1298473 0.0441305 2.942 0.003257 **
ethnic_3Hispanic 0.5035655 0.0470240 10.709 < 2e-16 ***
lang_3Other -0.4029164 0.1053751 -3.824 0.000131 ***
max_ch 0.0936875 0.0014200 65.976 < 2e-16 ***
RPL_THEME1 0.2455678 0.0444972 5.519 3.41e-08 ***
RPL_THEME2 0.1151459 0.0396422 2.905 0.003677 **
RPL_THEME3 0.0100464 0.0288857 0.348 0.727991
RPL_THEME4 -0.2372832 0.0326819 -7.260 3.86e-13 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 38056 on 7835 degrees of freedom
Residual deviance: 33488 on 7820 degrees of freedom
AIC: 45859
Number of Fisher Scoring iterations: 6
broom::glance(steroid_count.p2)
broom::tidy(steroid_count.p2, exponentiate = TRUE)
tbl_regression(steroid_count.p2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
IRR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.83 |
0.81, 0.86 |
<0.001 |
| Â Â Â Â Unspecified |
0.40 |
0.28, 0.55 |
<0.001 |
| Age |
0.99 |
0.99, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.05 |
1.02, 1.09 |
0.001 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.39 |
1.32, 1.47 |
<0.001 |
| Â Â Â Â Asian |
0.67 |
0.59, 0.76 |
<0.001 |
| Â Â Â Â Native |
0.89 |
0.67, 1.16 |
0.4 |
| Â Â Â Â Other |
1.14 |
1.04, 1.24 |
0.003 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.65 |
1.51, 1.81 |
<0.001 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.67 |
0.54, 0.82 |
<0.001 |
| Charlson Comorbidity Index |
1.10 |
1.10, 1.10 |
<0.001 |
| Soceioeconomic Status |
1.28 |
1.17, 1.39 |
<0.001 |
| Household Composition |
1.12 |
1.04, 1.21 |
0.004 |
| Minority Status and Language |
1.01 |
0.95, 1.07 |
0.7 |
| Housing and Transportation |
0.79 |
0.74, 0.84 |
<0.001 |
# NB Residual Plot
steroid_count.p2.res2 <- resid(steroid_count.p2)
plot(fitted(steroid_count.p2), steroid_count.p2.res2, col='steelblue', pch=16,
xlab='Predicted Vaccines', ylab='Standardized Residuals', main='Negative Binomial')
abline(0,0)

# NB regression more appropriate because residuals of the model are smaller
# Likelihood ratio test
pchisq(2 * (logLik(steroid_count.p2) - logLik(steroid_count.p2)), df = 1, lower.tail = FALSE)
'log Lik.' 1 (df=16)
# p-value of loglik is < 0.05 so NB regression is the more appropriate model
# Model performance
model_performance(steroid_count.p2)
# Indices of model performance
AIC | BIC | Nagelkerke's R2 | RMSE | Sigma | Score_log | Score_spherical
-------------------------------------------------------------------------------------
45859.294 | 45970.758 | 0.445 | 4.745 | 2.069 | -2.924 | 0.010
performance::check_model(steroid_count.p2, panel = TRUE)

# Margins
cplot(steroid_count.p2, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Steroid Rx Given SVI")

Steroids - negative binomial
library(MASS)
steroid_count.nb <- glm.nb(steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
data = access_class_dich)
summary(steroid_count.nb)
Call:
glm.nb(formula = steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, data = access_class_dich,
init.theta = 0.5501620579, link = log)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.8370 -1.1945 -0.4441 0.1016 7.4741
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.892189 0.057075 15.632 < 2e-16 ***
ibd_3UC -0.195863 0.035686 -5.488 4.05e-08 ***
ibd_3Unspecified -0.883169 0.279659 -3.158 0.001588 **
age_yrs -0.013840 0.001072 -12.916 < 2e-16 ***
genderFemale 0.059275 0.035267 1.681 0.092815 .
race_5Black 0.388900 0.068057 5.714 1.10e-08 ***
race_5Asian -0.435657 0.113149 -3.850 0.000118 ***
race_5Native -0.108531 0.291855 -0.372 0.709992
race_5Other 0.198292 0.101145 1.960 0.049939 *
ethnic_3Hispanic 0.476181 0.119680 3.979 6.93e-05 ***
lang_3Other -0.410571 0.191915 -2.139 0.032408 *
max_ch 0.101363 0.003880 26.127 < 2e-16 ***
RPL_THEMES 0.139797 0.070812 1.974 0.048360 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Negative Binomial(0.5502) family taken to be 1)
Null deviance: 8544.3 on 7835 degrees of freedom
Residual deviance: 7655.0 on 7823 degrees of freedom
AIC: 28499
Number of Fisher Scoring iterations: 1
Theta: 0.5502
Std. Err.: 0.0132
2 x log-likelihood: -28471.0690
broom::glance(steroid_count.nb)
broom::tidy(steroid_count.nb, exponentiate = TRUE)
tbl_regression(steroid_count.nb, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"), exponentiate = TRUE)
| Characteristic |
IRR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.82 |
0.77, 0.88 |
<0.001 |
| Â Â Â Â Unspecified |
0.41 |
0.24, 0.72 |
0.002 |
| Age |
0.99 |
0.98, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.06 |
0.99, 1.14 |
0.093 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.48 |
1.29, 1.69 |
<0.001 |
| Â Â Â Â Asian |
0.65 |
0.52, 0.81 |
<0.001 |
| Â Â Â Â Native |
0.90 |
0.52, 1.64 |
0.7 |
| Â Â Â Â Other |
1.22 |
1.01, 1.49 |
0.050 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.61 |
1.28, 2.04 |
<0.001 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.66 |
0.46, 0.97 |
0.032 |
| Charlson Comorbidity Index |
1.11 |
1.10, 1.12 |
<0.001 |
| Total SVI |
1.15 |
1.00, 1.32 |
0.048 |
# NB Residual Plot
steroid_count.nb.res <- resid(steroid_count.nb)
plot(fitted(steroid_count.nb), steroid_count.nb.res, col='steelblue', pch=16,
xlab='Predicted Vaccines', ylab='Standardized Residuals', main='Negative Binomial')
abline(0,0)

# NB regression more appropriate because residuals of the model are smaller
# Likelihood ratio test
pchisq(2 * (logLik(steroid_count.nb) - logLik(steroid_count.nb)), df = 1, lower.tail = FALSE)
'log Lik.' 1 (df=14)
# p-value of loglik is < 0.05 so NB regression is the more appropriate model
# Model performance
model_performance(steroid_count.nb)
# Indices of model performance
AIC | BIC | Nagelkerke's R2 | RMSE | Sigma | Score_log | Score_spherical
-------------------------------------------------------------------------------------
28499.069 | 28596.600 | 0.162 | 4.760 | 0.989 | -2.304 | 0.010
performance::check_model(steroid_count.nb, panel = TRUE)

# Margins
cplot(steroid_count.nb, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Steroid Rx Given SVI")

## All themes
steroid_count.nb2 <- glm.nb(steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1
+ RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
data = access_class_dich)
summary(steroid_count.nb2)
Call:
glm.nb(formula = steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, data = access_class_dich, init.theta = 0.5521851452,
link = log)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.8434 -1.1929 -0.4419 0.1005 7.4426
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.914142 0.067923 13.459 < 2e-16 ***
ibd_3UC -0.188313 0.035671 -5.279 1.30e-07 ***
ibd_3Unspecified -0.881386 0.278868 -3.161 0.001575 **
age_yrs -0.014098 0.001072 -13.152 < 2e-16 ***
genderFemale 0.056295 0.035232 1.598 0.110074
race_5Black 0.372441 0.069117 5.389 7.10e-08 ***
race_5Asian -0.389933 0.114625 -3.402 0.000669 ***
race_5Native -0.111786 0.291823 -0.383 0.701673
race_5Other 0.176373 0.101537 1.737 0.082381 .
ethnic_3Hispanic 0.471661 0.119752 3.939 8.19e-05 ***
lang_3Other -0.389512 0.192407 -2.024 0.042928 *
max_ch 0.101670 0.003876 26.232 < 2e-16 ***
RPL_THEME1 0.232069 0.099580 2.330 0.019781 *
RPL_THEME2 0.165145 0.087896 1.879 0.060263 .
RPL_THEME3 -0.023504 0.064346 -0.365 0.714907
RPL_THEME4 -0.220805 0.073376 -3.009 0.002619 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Negative Binomial(0.5522) family taken to be 1)
Null deviance: 8563.5 on 7835 degrees of freedom
Residual deviance: 7654.7 on 7820 degrees of freedom
AIC: 28488
Number of Fisher Scoring iterations: 1
Theta: 0.5522
Std. Err.: 0.0132
2 x log-likelihood: -28454.1120
broom::glance(steroid_count.nb2)
broom::tidy(steroid_count.nb2, exponentiate = TRUE)
tbl_regression(steroid_count.nb2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"), exponentiate = TRUE)
| Characteristic |
IRR |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
0.83 |
0.77, 0.89 |
<0.001 |
| Â Â Â Â Unspecified |
0.41 |
0.24, 0.73 |
0.002 |
| Age |
0.99 |
0.98, 0.99 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
1.06 |
0.99, 1.13 |
0.11 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
1.45 |
1.27, 1.67 |
<0.001 |
| Â Â Â Â Asian |
0.68 |
0.54, 0.85 |
<0.001 |
| Â Â Â Â Native |
0.89 |
0.52, 1.64 |
0.7 |
| Â Â Â Â Other |
1.19 |
0.98, 1.46 |
0.082 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.60 |
1.28, 2.03 |
<0.001 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
0.68 |
0.47, 0.99 |
0.043 |
| Charlson Comorbidity Index |
1.11 |
1.10, 1.12 |
<0.001 |
| Soceioeconomic Status |
1.26 |
1.03, 1.54 |
0.020 |
| Household Composition |
1.18 |
0.99, 1.41 |
0.060 |
| Minority Status and Language |
0.98 |
0.86, 1.11 |
0.7 |
| Housing and Transportation |
0.80 |
0.69, 0.93 |
0.003 |
# NB Residual Plot
steroid_count.nb.res2 <- resid(steroid_count.nb2)
plot(fitted(steroid_count.nb2), steroid_count.nb.res2, col='steelblue', pch=16,
xlab='Predicted Vaccines', ylab='Standardized Residuals', main='Negative Binomial')
abline(0,0)

# NB regression more appropriate because residuals of the model are smaller
# Likelihood ratio test
pchisq(2 * (logLik(steroid_count.nb2) - logLik(steroid_count.nb2)), df = 1, lower.tail = FALSE)
'log Lik.' 1 (df=17)
# p-value of loglik is < 0.05 so NB regression is the more appropriate model
# Model performance
model_performance(steroid_count.nb2)
# Indices of model performance
AIC | BIC | Nagelkerke's R2 | RMSE | Sigma | Score_log | Score_spherical
-------------------------------------------------------------------------------------
28488.112 | 28606.542 | 0.165 | 4.757 | 0.989 | -2.294 | 0.010
performance::check_model(steroid_count.nb2, panel = TRUE)

# Margins
cplot(steroid_count.nb, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Steroid Rx Given SVI")

Steroids - linear model
steroid_count <- lm(steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES,
data = access_class_dich)
summary(steroid_count)
Call:
lm(formula = steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEMES, data = access_class_dich)
Residuals:
Min 1Q Median 3Q Max
-6.806 -1.814 -0.922 0.317 109.536
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.606611 0.175835 14.824 < 2e-16 ***
ibd_3UC -0.359485 0.109398 -3.286 0.00102 **
ibd_3Unspecified -1.260233 0.754885 -1.669 0.09507 .
age_yrs -0.030943 0.003247 -9.529 < 2e-16 ***
genderFemale 0.105613 0.108114 0.977 0.32866
race_5Black 0.898529 0.217129 4.138 3.54e-05 ***
race_5Asian -0.558102 0.319979 -1.744 0.08117 .
race_5Native -0.276690 0.884767 -0.313 0.75450
race_5Other 0.280816 0.315741 0.889 0.37382
ethnic_3Hispanic 1.172306 0.382145 3.068 0.00216 **
lang_3Other -0.565005 0.541629 -1.043 0.29691
max_ch 0.254954 0.012364 20.621 < 2e-16 ***
RPL_THEMES 0.275780 0.218063 1.265 0.20602
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.749 on 7823 degrees of freedom
Multiple R-squared: 0.05882, Adjusted R-squared: 0.05737
F-statistic: 40.74 on 12 and 7823 DF, p-value: < 2.2e-16
broom::glance(steroid_count)
broom::tidy(steroid_count)
tbl_regression(steroid_count, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", RPL_THEMES ~ "Total SVI", max_ch ~ "Charlson Comorbidity Index"))
| Characteristic |
Beta |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
-0.36 |
-0.57, -0.15 |
0.001 |
| Â Â Â Â Unspecified |
-1.3 |
-2.7, 0.22 |
0.10 |
| Age |
-0.03 |
-0.04, -0.02 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.11 |
-0.11, 0.32 |
0.3 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
0.90 |
0.47, 1.3 |
<0.001 |
| Â Â Â Â Asian |
-0.56 |
-1.2, 0.07 |
0.081 |
| Â Â Â Â Native |
-0.28 |
-2.0, 1.5 |
0.8 |
| Â Â Â Â Other |
0.28 |
-0.34, 0.90 |
0.4 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.2 |
0.42, 1.9 |
0.002 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
-0.57 |
-1.6, 0.50 |
0.3 |
| Charlson Comorbidity Index |
0.25 |
0.23, 0.28 |
<0.001 |
| Total SVI |
0.28 |
-0.15, 0.70 |
0.2 |
# Model performance
model_performance(steroid_count)
# Indices of model performance
AIC | BIC | R2 | R2 (adj.) | RMSE | Sigma
---------------------------------------------------------
46667.357 | 46764.888 | 0.059 | 0.057 | 4.745 | 4.749
performance::check_model(steroid_count, panel = TRUE)

# Margins
cplot(steroid_count, "RPL_THEMES", what = "prediction", main = "Predicted Likelihood of Steroids Given SVI")

## All themes
steroid_count2 <- lm(steroid_count ~ ibd_3 + age_yrs + gender +
race_5 + ethnic_3 + lang_3 + max_ch + RPL_THEME1 +
RPL_THEME2 + RPL_THEME3 + RPL_THEME4,
data = access_class_dich)
summary(steroid_count2 )
Call:
lm(formula = steroid_count ~ ibd_3 + age_yrs + gender + race_5 +
ethnic_3 + lang_3 + max_ch + RPL_THEME1 + RPL_THEME2 + RPL_THEME3 +
RPL_THEME4, data = access_class_dich)
Residuals:
Min 1Q Median 3Q Max
-6.963 -1.808 -0.921 0.329 109.405
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.61934 0.20940 12.509 < 2e-16 ***
ibd_3UC -0.34813 0.10943 -3.181 0.00147 **
ibd_3Unspecified -1.27753 0.75473 -1.693 0.09055 .
age_yrs -0.03107 0.00325 -9.560 < 2e-16 ***
genderFemale 0.10645 0.10808 0.985 0.32471
race_5Black 0.85986 0.22030 3.903 9.57e-05 ***
race_5Asian -0.48405 0.32519 -1.489 0.13665
race_5Native -0.26893 0.88452 -0.304 0.76110
race_5Other 0.28135 0.31640 0.889 0.37390
ethnic_3Hispanic 1.19139 0.38210 3.118 0.00183 **
lang_3Other -0.55244 0.54298 -1.017 0.30898
max_ch 0.25486 0.01236 20.616 < 2e-16 ***
RPL_THEME1 0.58927 0.30596 1.926 0.05414 .
RPL_THEME2 0.25186 0.26960 0.934 0.35024
RPL_THEME3 0.01470 0.19745 0.074 0.94064
RPL_THEME4 -0.50171 0.22520 -2.228 0.02592 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.747 on 7820 degrees of freedom
Multiple R-squared: 0.05981, Adjusted R-squared: 0.05801
F-statistic: 33.17 on 15 and 7820 DF, p-value: < 2.2e-16
broom::glance(steroid_count2 )
broom::tidy(steroid_count2)
tbl_regression(steroid_count2, label = list(ibd_3 ~ "IBD Diagnosis", age_yrs ~ "Age", gender~ "Gender", race_5 ~ "Race", ethnic_3 ~ "Ethnicity", lang_3 ~ "Primary Language", max_ch ~ "Charlson Comorbidity Index", RPL_THEME1 ~ "Soceioeconomic Status", RPL_THEME2 ~ "Household Composition", RPL_THEME3 ~ "Minority Status and Language", RPL_THEME4 ~ "Housing and Transportation"))
| Characteristic |
Beta |
95% CI |
p-value |
| IBD Diagnosis |
|
|
|
| Â Â Â Â CD |
— |
— |
|
| Â Â Â Â UC |
-0.35 |
-0.56, -0.13 |
0.001 |
| Â Â Â Â Unspecified |
-1.3 |
-2.8, 0.20 |
0.091 |
| Age |
-0.03 |
-0.04, -0.02 |
<0.001 |
| Gender |
|
|
|
| Â Â Â Â Male |
— |
— |
|
| Â Â Â Â Female |
0.11 |
-0.11, 0.32 |
0.3 |
| Race |
|
|
|
| Â Â Â Â White |
— |
— |
|
| Â Â Â Â Black |
0.86 |
0.43, 1.3 |
<0.001 |
| Â Â Â Â Asian |
-0.48 |
-1.1, 0.15 |
0.14 |
| Â Â Â Â Native |
-0.27 |
-2.0, 1.5 |
0.8 |
| Â Â Â Â Other |
0.28 |
-0.34, 0.90 |
0.4 |
| Ethnicity |
|
|
|
| Â Â Â Â NonHispanic |
— |
— |
|
| Â Â Â Â Hispanic |
1.2 |
0.44, 1.9 |
0.002 |
| Primary Language |
|
|
|
| Â Â Â Â English |
— |
— |
|
| Â Â Â Â Other |
-0.55 |
-1.6, 0.51 |
0.3 |
| Charlson Comorbidity Index |
0.25 |
0.23, 0.28 |
<0.001 |
| Soceioeconomic Status |
0.59 |
-0.01, 1.2 |
0.054 |
| Household Composition |
0.25 |
-0.28, 0.78 |
0.4 |
| Minority Status and Language |
0.01 |
-0.37, 0.40 |
>0.9 |
| Housing and Transportation |
-0.50 |
-0.94, -0.06 |
0.026 |
# Model performance
model_performance(steroid_count2)
# Indices of model performance
AIC | BIC | R2 | R2 (adj.) | RMSE | Sigma
---------------------------------------------------------
46665.054 | 46783.484 | 0.060 | 0.058 | 4.742 | 4.747
performance::check_model(steroid_count2, panel = TRUE)

# Margins
cplot(steroid_count2, "RPL_THEME1", what = "prediction", main = "Predicted Likelihood of Steroid Access Given Theme 1")

cplot(steroid_count2, "RPL_THEME2", what = "prediction", main = "Predicted Likelihood of SSteroid Access Given THEME2")

cplot(steroid_count2, "RPL_THEME3", what = "prediction", main = "Predicted Likelihood of Steroide Access Given THEME3")

cplot(steroid_count2, "RPL_THEME4", what = "prediction", main = "Predicted Likelihood of Steroid Access Given THEME4")

LS0tCnRpdGxlOiAiTWVkaWNhdGlvbiBBY2Nlc3MiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdGhlbWVzOiBwYXBlcgogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCmVkaXRvcl9vcHRpb25zOgogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKZGF0ZTogJzIwMjItMTEtMjMnCi0tLQoKIyBMb2FkIFBhY2thZ2VzIApgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoY29kZWJvb2tyKQpsaWJyYXJ5KHN1bW1hcnl0b29scykKbGlicmFyeShicm9vbSkKbGlicmFyeShwZXJmb3JtYW5jZSkKbGlicmFyeShndCkKbGlicmFyeShndHN1bW1hcnkpCmxpYnJhcnkoamFuaXRvcikKbGlicmFyeShmb3JjYXRzKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkobWFyZ2lucykKYGBgCgojIEltcG9ydCBEYXRhIApgYGB7cn0KbG9hZChmaWxlID0gIn4vRGVza3RvcC9SLUNvZGUvU0RPSF9BTEwvbWVkX2FjY2Vzc19hbGwucmRhIikKVmlldyhtZWRfYWNjZXNzX2FsbCkKCgpgYGAKCgojIERhdGEgQ2xlYW5pbmcgey50YWJzZXR9CiMjIFNlbGVjdCB2YXJpYWJsZXMgCmBgYHtyfQptZWRfYWNjZXNzX2FsbCAlPiUgIAogIGRwbHlyOjpzZWxlY3Qoc2JqX2lkOmxhbmdfMywgUlBMX1RIRU1FUzpSUExfNCwgbWF4X2NoLCBzdGVyb2lkX2RlcCwgTUVTQUxBTUlORTpPWkFOSU1PRCkgLT4gbWVkX3J4IAoKVmlldyhtZWRfcngpCmBgYAoKIyMgRHJvcCBOQSB2YWx1ZXMgZm9yIG1lZHMKYGBge3J9Cm1lZF9yeCAlPiUgCiAgbmEub21pdChNRVNBTEFNSU5FOk9aQU5JTU9EKSAtPiBtZWRfcnhfZHJvcApgYGAKCiMjIE1ha2UgbWVkIGFjY2VzcyB2YXJpYWJsZSB5ZXMvbm8KYGBge3J9Cm1lZF9yeF9kcm9wICU+JSAgCm11dGF0ZShtZXNhbGFtaW5lXzMgPSBjYXNlX3doZW4oTUVTQUxBTUlORT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKHByZWRuaXNvbmVfMyA9IGNhc2Vfd2hlbihQUkVETklTT05FPj0gMyB+ICcxJyxUUlVFIH4gIjAiKSkgJT4lICAKbXV0YXRlKGluZmxpeGltYWJfMyA9IGNhc2Vfd2hlbihJTkZMSVhJTUFCPj0gMyB+ICcxJyxUUlVFIH4gIjAiKSkgJT4lIAptdXRhdGUodmVkb2xpenVtYWJfMyA9IGNhc2Vfd2hlbihWRURPTElaVU1BQj49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKGFkYWxpbXVtYWJfMyA9IGNhc2Vfd2hlbihBREFMSU1VTUFCPj0gMyB+ICcxJyxUUlVFIH4gIjAiKSkgJT4lIAptdXRhdGUodG9mYWNpdGluaWJfMyA9IGNhc2Vfd2hlbihUT0ZBQ0lUSU5JQj49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKHVzdGVraW51bWFiXzMgPSBjYXNlX3doZW4oVVNURUtJTlVNQUI+PSAzIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgCm11dGF0ZShtZXRoeWxwcmVkXzMgPSBjYXNlX3doZW4oTUVUSFlMUFJFRE5JU09MT05FPj0gMyB+ICcxJyxUUlVFIH4gIjAiKSkgJT4lIAptdXRhdGUoZGV4YW1ldGhhc29uZV8zID0gY2FzZV93aGVuKERFWEFNRVRIQVNPTkU+PSAzIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgCm11dGF0ZShidWRlc29uaWRlXzMgPSBjYXNlX3doZW4oQlVERVNPTklERT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKG1ldGhvdHJleGF0ZV8zID0gY2FzZV93aGVuKE1FVEhPVFJFWEFURT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKGF6YXRoaW9wcmluZV8zID0gY2FzZV93aGVuKEFaQVRISU9QUklORT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKG1lcmNhcHRvcHVyaW5lXzMgPSBjYXNlX3doZW4oTUVSQ0FQVE9QVVJJTkU+PSAzIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgCm11dGF0ZShzdWxmYXNhbGF6aW5lXzMgPSBjYXNlX3doZW4oU1VMRkFTQUxBWklORT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKGJhbHNhbGF6aWRlXzMgPSBjYXNlX3doZW4oQkFMU0FMQVpJREU+PSAzIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgICAKbXV0YXRlKGN5Y2xvc3BvcmluZV8zID0gY2FzZV93aGVuKENZQ0xPU1BPUklORT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKGNlcnRvbGl6dW1hYl8zID0gY2FzZV93aGVuKENFUlRPTElaVU1BQj49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKHByZWRuaXNvbG9uZV8zID0gY2FzZV93aGVuKFBSRUROSVNPTE9ORT49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKHVwYWRhY2l0aW5pYl8zID0gY2FzZV93aGVuKFVQQURBQ0lUSU5JQj49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKGdvbGltdW1hYl8zID0gY2FzZV93aGVuKEdPTElNVU1BQj49IDMgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKG5hdGFsaXp1bWFiXzMgPSBjYXNlX3doZW4oTkFUQUxJWlVNQUI+PSAzIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgCm11dGF0ZShvemFuaW1vZF8zID0gY2FzZV93aGVuKE9aQU5JTU9EPj0gMyB+ICcxJyxUUlVFIH4gIjAiKSkgLT4gbWVkX3J4XzMKVmlldyhtZWRfcnhfMykKYGBgCgojIyBNYWtlIG51bWVyaWMgCmBgYHtyfQptZWRfcnhfMyRtZXNhbGFtaW5lXzMgPSBhcy5udW1lcmljKG1lZF9yeF8zJG1lc2FsYW1pbmVfMykKbWVkX3J4XzMkcHJlZG5pc29uZV8zID0gYXMubnVtZXJpYyhtZWRfcnhfMyRwcmVkbmlzb25lXzMpCm1lZF9yeF8zJGluZmxpeGltYWJfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkaW5mbGl4aW1hYl8zKQptZWRfcnhfMyR2ZWRvbGl6dW1hYl8zID0gYXMubnVtZXJpYyhtZWRfcnhfMyR2ZWRvbGl6dW1hYl8zKQptZWRfcnhfMyRhZGFsaW11bWFiXzMgPSBhcy5udW1lcmljKG1lZF9yeF8zJGFkYWxpbXVtYWJfMykKbWVkX3J4XzMkdG9mYWNpdGluaWJfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkdG9mYWNpdGluaWJfMykKbWVkX3J4XzMkdXN0ZWtpbnVtYWJfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkdXN0ZWtpbnVtYWJfMykKbWVkX3J4XzMkbWV0aHlscHJlZF8zID0gYXMubnVtZXJpYyhtZWRfcnhfMyRtZXRoeWxwcmVkXzMpCm1lZF9yeF8zJGRleGFtZXRoYXNvbmVfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkZGV4YW1ldGhhc29uZV8zKQptZWRfcnhfMyRidWRlc29uaWRlXzMgPSBhcy5udW1lcmljKG1lZF9yeF8zJGJ1ZGVzb25pZGVfMykKbWVkX3J4XzMkbWV0aG90cmV4YXRlXzMgPSBhcy5udW1lcmljKG1lZF9yeF8zJG1ldGhvdHJleGF0ZV8zKQptZWRfcnhfMyRhemF0aGlvcHJpbmVfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkYXphdGhpb3ByaW5lXzMpCm1lZF9yeF8zJG1lcmNhcHRvcHVyaW5lXzMgPSBhcy5udW1lcmljKG1lZF9yeF8zJG1lcmNhcHRvcHVyaW5lXzMpCm1lZF9yeF8zJHN1bGZhc2FsYXppbmVfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkc3VsZmFzYWxhemluZV8zKQptZWRfcnhfMyRiYWxzYWxhemlkZV8zID0gYXMubnVtZXJpYyhtZWRfcnhfMyRiYWxzYWxhemlkZV8zKQptZWRfcnhfMyRjeWNsb3Nwb3JpbmVfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkY3ljbG9zcG9yaW5lXzMpCm1lZF9yeF8zJGNlcnRvbGl6dW1hYl8zID0gYXMubnVtZXJpYyhtZWRfcnhfMyRjZXJ0b2xpenVtYWJfMykKbWVkX3J4XzMkcHJlZG5pc29sb25lXzMgPSBhcy5udW1lcmljKG1lZF9yeF8zJHByZWRuaXNvbG9uZV8zKQptZWRfcnhfMyR1cGFkYWNpdGluaWJfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkdXBhZGFjaXRpbmliXzMpCm1lZF9yeF8zJGdvbGltdW1hYl8zID0gYXMubnVtZXJpYyhtZWRfcnhfMyRnb2xpbXVtYWJfMykKbWVkX3J4XzMkbmF0YWxpenVtYWJfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkbmF0YWxpenVtYWJfMykKbWVkX3J4XzMkb3phbmltb2RfMyA9IGFzLm51bWVyaWMobWVkX3J4XzMkb3phbmltb2RfMykgCgpgYGAKCiMjIE1lZHMgYnkgY2xhc3MKYGBge3J9Cm1lZF9yeF8zICU+JSAKICBtdXRhdGUoQVNBID0gbWVzYWxhbWluZV8zICsgc3VsZmFzYWxhemluZV8zICsgYmFsc2FsYXppZGVfMykgJT4lIAogIG11dGF0ZShiaW9sb2dpYyA9IGluZmxpeGltYWJfMyArIHZlZG9saXp1bWFiXzMgKyBhZGFsaW11bWFiXzMgKyB1c3Rla2ludW1hYl8zICsgY2VydG9saXp1bWFiXzMgKwogICAgICAgICAgIGdvbGltdW1hYl8zICsgbmF0YWxpenVtYWJfMykgJT4lIAogIG11dGF0ZShzdGVyb2lkcyA9IHByZWRuaXNvbmVfMyArIHByZWRuaXNvbG9uZV8zICsgbWV0aHlscHJlZF8zICsgZGV4YW1ldGhhc29uZV8zICsgYnVkZXNvbmlkZV8zKSAlPiUgCiAgbXV0YXRlKGltbXVubyA9IG1ldGhvdHJleGF0ZV8zICsgYXphdGhpb3ByaW5lXzMgKyBtZXJjYXB0b3B1cmluZV8zKSAlPiUgCm11dGF0ZShzbWFsbCA9IHRvZmFjaXRpbmliXzMgKyB1cGFkYWNpdGluaWJfMyArIG96YW5pbW9kXzMpICU+JSAKCm11dGF0ZShzdGVyb2lkX2NvdW50ID0gUFJFRE5JU09ORSArIFBSRUROSVNPTE9ORSArIE1FVEhZTFBSRUROSVNPTE9ORSArIERFWEFNRVRIQVNPTkUgKyBCVURFU09OSURFKSAtPiByeF9jbGFzc19maW5hbAoKClZpZXcocnhfY2xhc3NfZmluYWwpCmBgYAoKIyMgTWVkIGFjY2VzcyB5ZXMvbm8gYnkgY2xhc3MKYGBge3J9CnJ4X2NsYXNzX2ZpbmFsICU+JSAgCm11dGF0ZShBU0FfMyA9IGNhc2Vfd2hlbihBU0E+PSAxIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgCm11dGF0ZShpbW11bm9fMyA9IGNhc2Vfd2hlbihpbW11bm8+PSAxIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgIAptdXRhdGUoYmlvbG9naWNfMyA9IGNhc2Vfd2hlbihiaW9sb2dpYz49IDEgfiAnMScsVFJVRSB+ICIwIikpICU+JSAKbXV0YXRlKHNtYWxsXzMgPSBjYXNlX3doZW4oc21hbGw+PSAxIH4gJzEnLFRSVUUgfiAiMCIpKSAlPiUgCm11dGF0ZShzdGVyb2lkc18zID0gY2FzZV93aGVuKHN0ZXJvaWRzPj0gMSB+ICcxJyxUUlVFIH4gIjAiKSkgLT4gYWNjZXNzX2NsYXNzX2RpY2gKYGBgCgojIyBNYWtlIG51bWVyaWMgCmBgYHtyfQphY2Nlc3NfY2xhc3NfZGljaCRBU0FfMyA9IGFzLm51bWVyaWMoYWNjZXNzX2NsYXNzX2RpY2gkQVNBXzMpCmFjY2Vzc19jbGFzc19kaWNoJGltbXVub18zID0gYXMubnVtZXJpYyhhY2Nlc3NfY2xhc3NfZGljaCRpbW11bm9fMykKYWNjZXNzX2NsYXNzX2RpY2gkYmlvbG9naWNfMyA9IGFzLm51bWVyaWMoYWNjZXNzX2NsYXNzX2RpY2gkYmlvbG9naWNfMykKYWNjZXNzX2NsYXNzX2RpY2gkc21hbGxfMyA9IGFzLm51bWVyaWMoYWNjZXNzX2NsYXNzX2RpY2gkc21hbGxfMykKYWNjZXNzX2NsYXNzX2RpY2gkc3Rlcm9pZHNfMyA9IGFzLm51bWVyaWMoYWNjZXNzX2NsYXNzX2RpY2gkc3Rlcm9pZHNfMykKCmBgYAoKIyMgTWFrZSBVQyBvbmx5IGNvaG9ydCAKYGBge3J9ClVDX21lZHNfMyA8LSBhY2Nlc3NfY2xhc3NfZGljaFsgd2hpY2goYWNjZXNzX2NsYXNzX2RpY2gkaWJkXzM9PSdVQycpLF0KVmlldyhVQ19tZWRzXzMpCmBgYAoKIyBCYXNlbGluZSBDaGFyYWN0ZXJpc3RpY3Mgey50YWJzZXR9CgojIyBCeSBtZWRpY2F0aW9uIGNsYXNzIApgYGB7cn0KYWNjZXNzX2NsYXNzX2RpY2ggJT4lIAogIGRwbHlyOjpzZWxlY3QoaWJkXzMsIGFnZV95cnMsIGdlbmRlciwgcmFjZV81LCBldGhuaWNfMywgbGFuZ18zLCBtYXhfY2gsIEFTQV8zLCBpbW11bm9fMywgYmlvbG9naWNfMywgc21hbGxfMywgc3Rlcm9pZHNfMywgUlBMX1RIRU1FUywgUlBMXzQsIFJQTF9USEVNRTEsIFJQTF9USEVNRTIsIFJQTF9USEVNRTMsIFJQTF9USEVNRTQpIC0+IGJhc2VsaW5lCmJhc2VsaW5lICU+JSB0Ymxfc3VtbWFyeShsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iLCBSUExfNCB+ICJTVkkgUXVhcnRpbGVzIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiwgQVNBXzMgfiAiQVNBIEFjY2Vzc2VkIixpbW11bm9fMyB+ICJJbW11bm9tb2R1bGF0b3IgQWNjZXNzZWQiLCBiaW9sb2dpY18zIH4gIkJpb2xvZ2ljIEFjY2Vzc2VkIiwgc21hbGxfMyB+ICJTbWFsbCBNb2xlY3VsZSBBY2Nlc3NlZCIsIHN0ZXJvaWRzXzMgfiAiU3Rlcm9pZHMgQWNjZXNzZWQiICksCiAgICAgICAgc3RhdGlzdGljID0gbGlzdChhbGxfY29udGludW91cygpIH4gInttZWFufSAoe3NkfSkiKSwKICAgICAgICBtaXNzaW5nX3RleHQgPSAiKE1pc3NpbmcpIikKYGBgCgoKIyMgQnkgaW5kaXZpZHVhbCBtZWRpY2F0aW9uIApgYGB7cn0KcnhfY2xhc3NfZmluYWwgJT4lIAogIGRwbHlyOjpzZWxlY3QoaWJkXzMsIGFnZV95cnMsIGdlbmRlciwgcmFjZV81LCBldGhuaWNfMywgbGFuZ18zLCBtYXhfY2gsIG1lc2FsYW1pbmVfMywgYXphdGhpb3ByaW5lXzMsIG1lcmNhcHRvcHVyaW5lXzMsIG1ldGhvdHJleGF0ZV8zLCBpbmZsaXhpbWFiXzMsIGFkYWxpbXVtYWJfMywgY2VydG9saXp1bWFiXzMsIGdvbGltdW1hYl8zLCB1c3Rla2ludW1hYl8zLCB2ZWRvbGl6dW1hYl8zLCBwcmVkbmlzb25lXzMsIGJ1ZGVzb25pZGVfMywgc3Rlcm9pZF9jb3VudCwgUlBMX1RIRU1FUywgUlBMXzQsIFJQTF9USEVNRTEsIFJQTF9USEVNRTIsIFJQTF9USEVNRTMsIFJQTF9USEVNRTQpIC0+IGJhc2VsaW5lMgpiYXNlbGluZTIgJT4lIHRibF9zdW1tYXJ5KGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBtZXNhbGFtaW5lXzMgfiAiTWVzYWxhbWluZSIsIGF6YXRoaW9wcmluZV8zIH4gIkFaQSIsIG1lcmNhcHRvcHVyaW5lXzMgfiAiNk1QIiwgbWV0aG90cmV4YXRlXzMgfiAiTWV0aG90cmV4YXRlIiwgaW5mbGl4aW1hYl8zIH4gIkluZmxpeGltYWIiLCBhZGFsaW11bWFiXzMgfiAiQWRhbGltdW1hYiIsIGNlcnRvbGl6dW1hYl8zIH4gIkNlcnRvbGl6dW1hYiIsIGdvbGltdW1hYl8zIH4gICJHb2xpbXVtYWIiLCB1c3Rla2ludW1hYl8zIH4gIlVzdGVraW51bWFiIiwgdmVkb2xpenVtYWJfMyB+ICJWZWRvbGl6dW1hYiIsIHByZWRuaXNvbmVfMyB+ICJQcmVkbmlzb25lIiwgYnVkZXNvbmlkZV8zIH4gIkJ1ZGVzb25pZGUiLCBzdGVyb2lkX2NvdW50IH4gIlRvdGFsIFN0ZXJvaWQgUHJlc2NyaXB0aW9ucyIpLAogICAgICAgIHN0YXRpc3RpYyA9IGxpc3QoYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIiksCiAgICAgICAgbWlzc2luZ190ZXh0ID0gIihNaXNzaW5nKSIpCmBgYAoKIyMgQnkgU1ZJIFF1YXJ0aWxlIApgYGB7cn0KYmFzZWxpbmUgJT4lICAKdGJsX3N1bW1hcnkoYnkgPSBSUExfNCwKICAgICAgICAgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiwgUlBMXzQgfiAiU1ZJIFF1YXJ0aWxlcyIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIsIG1lc2FsYW1pbmVfMyB+ICJNZXNhbGFtaW5lIiwgYXphdGhpb3ByaW5lXzMgfiAiQVpBIiwgbWVyY2FwdG9wdXJpbmVfMyB+ICI2TVAiLCBtZXRob3RyZXhhdGVfMyB+ICJNZXRob3RyZXhhdGUiLCBpbmZsaXhpbWFiXzMgfiAiSW5mbGl4aW1hYiIsIGFkYWxpbXVtYWJfMyB+ICJBZGFsaW11bWFiIiwgY2VydG9saXp1bWFiXzMgfiAiQ2VydG9saXp1bWFiIiwgZ29saW11bWFiXzMgfiAgIkdvbGltdW1hYiIsIHVzdGVraW51bWFiXzMgfiAiVXN0ZWtpbnVtYWIiLCB2ZWRvbGl6dW1hYl8zIH4gIlZlZG9saXp1bWFiIiwgcHJlZG5pc29uZV8zIH4gIlByZWRuaXNvbmUiLCBidWRlc29uaWRlXzMgfiAiQnVkZXNvbmlkZSIsIHN0ZXJvaWRfY291bnQgfiAiVG90YWwgU3Rlcm9pZCBQcmVzY3JpcHRpb25zIiksCnN0YXRpc3RpYyA9IGxpc3QoYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIiksCiAgICAgICAgbWlzc2luZ190ZXh0ID0gIihNaXNzaW5nKSIpICU+JSBhZGRfcCgpCmBgYAojIEJpdmFyaWF0ZSBhbmFseXNpcyBieSBjbGFzcyB7LnRhYnNldH0KIyMgQVNBCmBgYHtyfQpVQ19tZWRzXzMkQVNBXzMgPSBhcy5udW1lcmljKFVDX21lZHNfMyRBU0FfMykKdGJsX3V2X0FTQV8zPC0KICB0YmxfdXZyZWdyZXNzaW9uKAogICAgVUNfbWVkc18zW2MoImFnZV95cnMiLCAiZ2VuZGVyIiwgInJhY2VfNSIsICJldGhuaWNfMyIsICJsYW5nXzMiLCAibWF4X2NoIiwgIlJQTF9USEVNRVMiLCAiUlBMXzQiLCAiUlBMX1RIRU1FMSIsICJSUExfVEhFTUUyIiwgIlJQTF9USEVNRTMiLCAiUlBMX1RIRU1FNCIsICJBU0FfMyIpXSwKICAgIG1ldGhvZCA9IGdsbSwKICAgIHkgPSBBU0FfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl9BU0FfMywgbWV0aG9kID0gcmVuZGVyKQpgYGAKCiMjIEltbXVub21vZHVsYXRvcnMgCmBgYHtyfQp0YmxfdXZfaW1tdW5vPC0KICB0YmxfdXZyZWdyZXNzaW9uKAogICAgYWNjZXNzX2NsYXNzX2RpY2hbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgImltbXVub18zIildLAogICAgbWV0aG9kID0gZ2xtLAogICAgeSA9IGltbXVub18zLAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9IGJpbm9taWFsKSwKICAgIGxhYmVsID0gbGlzdChhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiwgUlBMXzQgfiAiU1ZJIFF1YXJ0aWxlcyIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLAogICAgZXhwb25lbnRpYXRlID0gVFJVRQogICkKcHJpbnQodGJsX3V2X2ltbXVubywgbWV0aG9kID0gcmVuZGVyKQpgYGAKCgojIyBCaW9sb2dpY3MgCmBgYHtyfQp0YmxfdXZfYmlvbG9naWNzPC0KICB0YmxfdXZyZWdyZXNzaW9uKAogICAgYWNjZXNzX2NsYXNzX2RpY2hbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgImJpb2xvZ2ljXzMiKV0sCiAgICBtZXRob2QgPSBnbG0sCiAgICB5ID0gYmlvbG9naWNfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl9iaW9sb2dpY3MsIG1ldGhvZCA9IHJlbmRlcikKYGBgCgojIyBTbWFsbCBNb2xlY3VsZXMgKFVDIG9ubHkpCmBgYHtyfQpVQ19tZWRzXzMkc21hbGwgPSBhcy5udW1lcmljKFVDX21lZHNfMyRzbWFsbF8zKQp0YmxfdXZfc21hbGxfMzwtCiAgdGJsX3V2cmVncmVzc2lvbigKICAgIFVDX21lZHNfM1tjKCJhZ2VfeXJzIiwgImdlbmRlciIsICJyYWNlXzUiLCAiZXRobmljXzMiLCAibGFuZ18zIiwgIm1heF9jaCIsICJSUExfVEhFTUVTIiwgIlJQTF80IiwgIlJQTF9USEVNRTEiLCAiUlBMX1RIRU1FMiIsICJSUExfVEhFTUUzIiwgIlJQTF9USEVNRTQiLCAic21hbGxfMyIpXSwKICAgIG1ldGhvZCA9IGdsbSwKICAgIHkgPSBzbWFsbF8zLAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9IGJpbm9taWFsKSwKICAgIGxhYmVsID0gbGlzdChhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiwgUlBMXzQgfiAiU1ZJIFF1YXJ0aWxlcyIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLAogICAgZXhwb25lbnRpYXRlID0gVFJVRQogICkKcHJpbnQodGJsX3V2X3NtYWxsXzMsIG1ldGhvZCA9IHJlbmRlcikKYGBgCgojIyBTdGVyb2lkcyAKYGBge3J9CnRibF91dl9zdGVyb2lkczwtCiAgdGJsX3V2cmVncmVzc2lvbigKICAgIGFjY2Vzc19jbGFzc19kaWNoW2MoImFnZV95cnMiLCAiZ2VuZGVyIiwgInJhY2VfNSIsICJldGhuaWNfMyIsICJsYW5nXzMiLCAibWF4X2NoIiwgIlJQTF9USEVNRVMiLCAiUlBMXzQiLCAiUlBMX1RIRU1FMSIsICJSUExfVEhFTUUyIiwgIlJQTF9USEVNRTMiLCAiUlBMX1RIRU1FNCIsICJzdGVyb2lkc18zIildLAogICAgbWV0aG9kID0gZ2xtLAogICAgeSA9IHN0ZXJvaWRzXzMsCiAgICBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gYmlub21pYWwpLAogICAgbGFiZWwgPSBsaXN0KGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iLCBSUExfNCB+ICJTVkkgUXVhcnRpbGVzIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksCiAgICBleHBvbmVudGlhdGUgPSBUUlVFCiAgKQpwcmludCh0YmxfdXZfc3Rlcm9pZHMsIG1ldGhvZCA9IHJlbmRlcikKYGBgCgoKIyBCaXZhcmlhdGUgQW5hbHlzaXMgYnkgTWVkaWNhdGlvbiB7LnRhYnNldH0KCiMjIE1lc2FsYW1pbmUgKipsaW1pdGVkIHRvIFVDIHBhdGllbnRzIG9ubHkqKgpgYGB7cn0KCnRibF91dl9tZXM8LQogIHRibF91dnJlZ3Jlc3Npb24oCiAgICBVQ19tZWRzXzNbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgIm1lc2FsYW1pbmVfMyIpXSwKICAgIG1ldGhvZCA9IGdsbSwKICAgIHkgPSBtZXNhbGFtaW5lXzMsCiAgICBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gYmlub21pYWwpLAogICAgbGFiZWwgPSBsaXN0KGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iLCBSUExfNCB+ICJTVkkgUXVhcnRpbGVzIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksCiAgICBleHBvbmVudGlhdGUgPSBUUlVFCiAgKQpwcmludCh0YmxfdXZfbWVzLCBtZXRob2QgPSByZW5kZXIpCmBgYAojIyBJbW11bm9tb2R1bGF0b3JzIApgYGB7cn0KCiMjIE1UWAp0YmxfdXZfbXR4PC0KICB0YmxfdXZyZWdyZXNzaW9uKAogICAgYmFzZWxpbmVbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgIm1ldGhvdHJleGF0ZV8zIildLAogICAgbWV0aG9kID0gZ2xtLAogICAgeSA9IG1ldGhvdHJleGF0ZV8zLAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9IGJpbm9taWFsKSwKICAgIGxhYmVsID0gbGlzdChhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiwgUlBMXzQgfiAiU1ZJIFF1YXJ0aWxlcyIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLAogICAgZXhwb25lbnRpYXRlID0gVFJVRQogICkKcHJpbnQodGJsX3V2X210eCwgbWV0aG9kID0gcmVuZGVyKQoKIyMgNk1QCnRibF91dl9tcDwtCiAgdGJsX3V2cmVncmVzc2lvbigKICAgIGJhc2VsaW5lW2MoImFnZV95cnMiLCAiZ2VuZGVyIiwgInJhY2VfNSIsICJldGhuaWNfMyIsICJsYW5nXzMiLCAibWF4X2NoIiwgIlJQTF9USEVNRVMiLCAiUlBMXzQiLCAiUlBMX1RIRU1FMSIsICJSUExfVEhFTUUyIiwgIlJQTF9USEVNRTMiLCAiUlBMX1RIRU1FNCIsICJtZXJjYXB0b3B1cmluZV8zIildLAogICAgbWV0aG9kID0gZ2xtLAogICAgeSA9IG1lcmNhcHRvcHVyaW5lXzMsCiAgICBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gYmlub21pYWwpLAogICAgbGFiZWwgPSBsaXN0KGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iLCBSUExfNCB+ICJTVkkgUXVhcnRpbGVzIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksCiAgICBleHBvbmVudGlhdGUgPSBUUlVFCiAgKQpwcmludCh0YmxfdXZfbXAsIG1ldGhvZCA9IHJlbmRlcikKCiMjIEFaQSAKdGJsX3V2X2F6YTwtCiAgdGJsX3V2cmVncmVzc2lvbigKICAgIGJhc2VsaW5lW2MoImFnZV95cnMiLCAiZ2VuZGVyIiwgInJhY2VfNSIsICJldGhuaWNfMyIsICJsYW5nXzMiLCAibWF4X2NoIiwgIlJQTF9USEVNRVMiLCAiUlBMXzQiLCAiUlBMX1RIRU1FMSIsICJSUExfVEhFTUUyIiwgIlJQTF9USEVNRTMiLCAiUlBMX1RIRU1FNCIsICJhemF0aGlvcHJpbmVfMyIpXSwKICAgIG1ldGhvZCA9IGdsbSwKICAgIHkgPSBhemF0aGlvcHJpbmVfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl9hemEsIG1ldGhvZCA9IHJlbmRlcikKYGBgCgojIyBCaW9sb2dpY3MgCmBgYHtyfQojIyBJRlgKdGJsX3V2X2lmeDwtCiAgdGJsX3V2cmVncmVzc2lvbigKICAgIGJhc2VsaW5lW2MoImFnZV95cnMiLCAiZ2VuZGVyIiwgInJhY2VfNSIsICJldGhuaWNfMyIsICJsYW5nXzMiLCAibWF4X2NoIiwgIlJQTF9USEVNRVMiLCAiUlBMXzQiLCAiUlBMX1RIRU1FMSIsICJSUExfVEhFTUUyIiwgIlJQTF9USEVNRTMiLCAiUlBMX1RIRU1FNCIsICJpbmZsaXhpbWFiXzMiKV0sCiAgICBtZXRob2QgPSBnbG0sCiAgICB5ID0gaW5mbGl4aW1hYl8zLAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9IGJpbm9taWFsKSwKICAgIGxhYmVsID0gbGlzdChhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiwgUlBMXzQgfiAiU1ZJIFF1YXJ0aWxlcyIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLAogICAgZXhwb25lbnRpYXRlID0gVFJVRQogICkKcHJpbnQodGJsX3V2X2lmeCwgbWV0aG9kID0gcmVuZGVyKQoKIyMgQURBCnRibF91dl9hZGE8LQogIHRibF91dnJlZ3Jlc3Npb24oCiAgICBiYXNlbGluZVtjKCJhZ2VfeXJzIiwgImdlbmRlciIsICJyYWNlXzUiLCAiZXRobmljXzMiLCAibGFuZ18zIiwgIm1heF9jaCIsICJSUExfVEhFTUVTIiwgIlJQTF80IiwgIlJQTF9USEVNRTEiLCAiUlBMX1RIRU1FMiIsICJSUExfVEhFTUUzIiwgIlJQTF9USEVNRTQiLCAiYWRhbGltdW1hYl8zIildLAogICAgbWV0aG9kID0gZ2xtLAogICAgeSA9IGFkYWxpbXVtYWJfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl9hZGEsIG1ldGhvZCA9IHJlbmRlcikKCiMjIFZlZG8gCnRibF91dl92ZWRvPC0KICB0YmxfdXZyZWdyZXNzaW9uKAogICAgYmFzZWxpbmVbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgInZlZG9saXp1bWFiXzMiKV0sCiAgICBtZXRob2QgPSBnbG0sCiAgICB5ID0gdmVkb2xpenVtYWJfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl92ZWRvLCBtZXRob2QgPSByZW5kZXIpCgojIyB1c3RlCnRibF91dl91c3RlPC0KICB0YmxfdXZyZWdyZXNzaW9uKAogICAgYmFzZWxpbmVbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgInVzdGVraW51bWFiXzMiKV0sCiAgICBtZXRob2QgPSBnbG0sCiAgICB5ID0gdXN0ZWtpbnVtYWJfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl91c3RlLCBtZXRob2QgPSByZW5kZXIpCmBgYAojIyBTbWFsbCBtb2xlY3VsZXMgKipsaW1pdGVkIHRvIFVDIG9ubHkgcGF0aWVudHMqKgpgYGB7cn0KIyMgVG9mYSAKdGJsX3V2X3RvZmE8LQogIHRibF91dnJlZ3Jlc3Npb24oCiAgICBVQ19tZWRzXzNbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgInRvZmFjaXRpbmliXzMiKV0sCiAgICBtZXRob2QgPSBnbG0sCiAgICB5ID0gdG9mYWNpdGluaWJfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl90b2ZhLCBtZXRob2QgPSByZW5kZXIpCgojIyBVcGEgCnRibF91dl91cGE8LQogIHRibF91dnJlZ3Jlc3Npb24oCiAgICBVQ19tZWRzXzNbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgInVwYWRhY2l0aW5pYl8zIildLAogICAgbWV0aG9kID0gZ2xtLAogICAgeSA9IHVwYWRhY2l0aW5pYl8zLAogICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9IGJpbm9taWFsKSwKICAgIGxhYmVsID0gbGlzdChhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiwgUlBMXzQgfiAiU1ZJIFF1YXJ0aWxlcyIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLAogICAgZXhwb25lbnRpYXRlID0gVFJVRQogICkKcHJpbnQodGJsX3V2X3VwYSwgbWV0aG9kID0gcmVuZGVyKQoKIyMgT3phbmltb2QKdGJsX3V2X296YW48LQogIHRibF91dnJlZ3Jlc3Npb24oCiAgICBVQ19tZWRzXzNbYygiYWdlX3lycyIsICJnZW5kZXIiLCAicmFjZV81IiwgImV0aG5pY18zIiwgImxhbmdfMyIsICJtYXhfY2giLCAiUlBMX1RIRU1FUyIsICJSUExfNCIsICJSUExfVEhFTUUxIiwgIlJQTF9USEVNRTIiLCAiUlBMX1RIRU1FMyIsICJSUExfVEhFTUU0IiwgIm96YW5pbW9kXzMiKV0sCiAgICBtZXRob2QgPSBnbG0sCiAgICB5ID0gb3phbmltb2RfMywKICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSBiaW5vbWlhbCksCiAgICBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIsIFJQTF80IH4gIlNWSSBRdWFydGlsZXMiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwKICAgIGV4cG9uZW50aWF0ZSA9IFRSVUUKICApCnByaW50KHRibF91dl9vemFuLCBtZXRob2QgPSByZW5kZXIpCmBgYAoKIyBNdWx0aXZhcmlhYmxlIE1vZGVscyBieSBDbGFzcyAoUlBMX1RIRU1FUykgey50YWJzZXR9CiMjIEFTQQpgYGB7cn0KCiMjIFRvdGFsIFNWSSAKQVNBX2FjY2VzcyA8LSBnbG0oQVNBXzMgfiAgYWdlX3lycyArIGdlbmRlciArIHJhY2VfNSArIGV0aG5pY18zICsgbGFuZ18zIAogICAgICAgICAgICAgICAgICAgICArIG1heF9jaCArIFJQTF9USEVNRVMsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gVUNfbWVkc18zKQpzdW1tYXJ5KEFTQV9hY2Nlc3MgKQpicm9vbTo6Z2xhbmNlKEFTQV9hY2Nlc3MgKQpicm9vbTo6dGlkeShBU0FfYWNjZXNzICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24oQVNBX2FjY2VzcywgbGFiZWwgPSBsaXN0KGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShBU0FfYWNjZXNzKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoQVNBX2FjY2VzcywgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChBU0FfYWNjZXNzLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgTWVzYWxhbWluZSBSeCBHaXZlbiBTVkkiKQoKIyMgQWxsIFRoZW1lcyAKQVNBX2FjY2VzczIgPC0gZ2xtKEFTQV8zIH4gIGFnZV95cnMgKyBnZW5kZXIgKyByYWNlXzUgKyBldGhuaWNfMyArIGxhbmdfMyAKICAgICAgICAgICAgICAgICAgICAgKyBtYXhfY2ggKyBSUExfVEhFTUUxICsgUlBMX1RIRU1FMiArIFJQTF9USEVNRTMgKyBSUExfVEhFTUU0LAogICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgZGF0YSA9IFVDX21lZHNfMykKc3VtbWFyeShBU0FfYWNjZXNzMiApCmJyb29tOjpnbGFuY2UoQVNBX2FjY2VzczIgKQpicm9vbTo6dGlkeShBU0FfYWNjZXNzMiAsIGV4cG9uZW50aWF0ZSA9IFRSVUUpCnRibF9yZWdyZXNzaW9uKEFTQV9hY2Nlc3MyLCBsYWJlbCA9IGxpc3QoYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iKSwgZXhwb25lbnRpYXRlID0gVFJVRSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKEFTQV9hY2Nlc3MyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoQVNBX2FjY2VzczIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QoQVNBX2FjY2VzczIsICJSUExfVEhFTUUxIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBBU0EgUnggR2l2ZW4gVGhlbWUgMSIpCmNwbG90KEFTQV9hY2Nlc3MyLCAiUlBMX1RIRU1FMiIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgQVNBIFJ4IEdpdmVuIFRIRU1FMiIpCmNwbG90KEFTQV9hY2Nlc3MyLCAiUlBMX1RIRU1FMyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgQVNBIFJ4IEdpdmVuIFRIRU1FMyIpCmNwbG90KEFTQV9hY2Nlc3MyLCAiUlBMX1RIRU1FNCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgQVNBIFJ4IEdpdmVuIFRIRU1FNCIpCmBgYAojIyBJbW11bm9tb2R1bGF0b3IgCmBgYHtyfQojIFRvdGFsIFNWSSAKaW1tdW5vX2FjY2VzcyA8LSBnbG0oaW1tdW5vXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgcmFjZV81ICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aG5pY18zICsgbGFuZ18zICArIG1heF9jaCArIFJQTF9USEVNRVMsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUpCnN1bW1hcnkoaW1tdW5vX2FjY2VzcyApCmJyb29tOjpnbGFuY2UoaW1tdW5vX2FjY2VzcyApCmJyb29tOjp0aWR5KGltbXVub19hY2Nlc3MgLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihpbW11bm9fYWNjZXNzLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShpbW11bm9fYWNjZXNzKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoaW1tdW5vX2FjY2VzcywgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChpbW11bm9fYWNjZXNzLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgSW1tdW5vbW9kdWxhdG9yIFJ4IEdpdmVuIFNWSSIpCgojIyBBbGwgdGhlbWVzCmltbXVub19hY2Nlc3MyIDwtIGdsbShpbW11bm9fMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyAKICAgICAgICAgICAgICAgICAgICByYWNlXzUgKyBldGhuaWNfMyArIGxhbmdfMyArIG1heF9jaCArIFJQTF9USEVNRTEgKyAKICAgICAgICAgICAgICAgICAgICAgIFJQTF9USEVNRTIgKyBSUExfVEhFTUUzICsgUlBMX1RIRU1FNCwKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBiYXNlbGluZSkKc3VtbWFyeShpbW11bm9fYWNjZXNzMiApCmJyb29tOjpnbGFuY2UoaW1tdW5vX2FjY2VzczIgKQpicm9vbTo6dGlkeShpbW11bm9fYWNjZXNzMiAsIGV4cG9uZW50aWF0ZSA9IFRSVUUpCnRibF9yZWdyZXNzaW9uKGltbXVub19hY2Nlc3MyLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShpbW11bm9fYWNjZXNzMikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGltbXVub19hY2Nlc3MyLCBwYW5lbCA9IFRSVUUpCgojIE1hcmdpbnMgCmNwbG90KGltbXVub19hY2Nlc3MyLCAiUlBMX1RIRU1FMSIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgSW1tdW5vbW9kdWxhdG9yIFJ4IEdpdmVuIFRoZW1lIDEiKQpjcGxvdChpbW11bm9fYWNjZXNzMiwgIlJQTF9USEVNRTIiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEltbXVub21vZHVsYXRvciBSeCBHaXZlbiBUSEVNRTIiKQpjcGxvdChpbW11bm9fYWNjZXNzMiwgIlJQTF9USEVNRTMiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEltbXVub21vZHVsYXRvciBSeCBHaXZlbiBUSEVNRTMiKQpjcGxvdChpbW11bm9fYWNjZXNzMiwgIlJQTF9USEVNRTQiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEltbXVub21vZHVsYXRvciBSeCBHaXZlbiBUSEVNRTQiKQpgYGAKIyMgQmlvbG9naWNzIApgYGB7cn0KIyBUb3RhbCBTVkkgCmJpb2xvZ2ljX2FjY2VzcyA8LSBnbG0oYmlvbG9naWNfMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyByYWNlXzUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRobmljXzMgKyBsYW5nXzMgICsgbWF4X2NoICsgUlBMX1RIRU1FUywKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBiYXNlbGluZSkKc3VtbWFyeShiaW9sb2dpY19hY2Nlc3MgKQpicm9vbTo6Z2xhbmNlKGJpb2xvZ2ljX2FjY2VzcyApCmJyb29tOjp0aWR5KGJpb2xvZ2ljX2FjY2VzcyAsIGV4cG9uZW50aWF0ZSA9IFRSVUUpCnRibF9yZWdyZXNzaW9uKGJpb2xvZ2ljX2FjY2VzcywgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2UoYmlvbG9naWNfYWNjZXNzKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoYmlvbG9naWNfYWNjZXNzLCBwYW5lbCA9IFRSVUUpCgojIE1hcmdpbnMgCmNwbG90KGJpb2xvZ2ljX2FjY2VzcywgIlJQTF9USEVNRVMiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEltbXVub21vZHVsYXRvciBSeCBHaXZlbiBTVkkiKQoKIyMgQWxsIHRoZW1lcwpiaW9sb2dpY19hY2Nlc3MyIDwtIGdsbShiaW9sb2dpY18zIH4gIGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIAogICAgICAgICAgICAgICAgICAgIHJhY2VfNSArIGV0aG5pY18zICsgbGFuZ18zICsgbWF4X2NoICsgUlBMX1RIRU1FMSArIAogICAgICAgICAgICAgICAgICAgICAgUlBMX1RIRU1FMiArIFJQTF9USEVNRTMgKyBSUExfVEhFTUU0LAogICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgZGF0YSA9IGJhc2VsaW5lKQpzdW1tYXJ5KGJpb2xvZ2ljX2FjY2VzczIgKQpicm9vbTo6Z2xhbmNlKGJpb2xvZ2ljX2FjY2VzczIgKQpicm9vbTo6dGlkeShiaW9sb2dpY19hY2Nlc3MyICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24oYmlvbG9naWNfYWNjZXNzMiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2UoYmlvbG9naWNfYWNjZXNzMikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGJpb2xvZ2ljX2FjY2VzczIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QoYmlvbG9naWNfYWNjZXNzMiwgIlJQTF9USEVNRTEiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEJpb2xvZ2ljIEFjY2VzcyBHaXZlbiBUaGVtZSAxIikKY3Bsb3QoYmlvbG9naWNfYWNjZXNzMiwgIlJQTF9USEVNRTIiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEJpb2xvZ2ljIEFjY2VzcyBHaXZlbiBUSEVNRTIiKQpjcGxvdChiaW9sb2dpY19hY2Nlc3MyLCAiUlBMX1RIRU1FMyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgQmlvbG9naWMgQWNjZXNzIEdpdmVuIFRIRU1FMyIpCmNwbG90KGJpb2xvZ2ljX2FjY2VzczIsICJSUExfVEhFTUU0Iiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBCaW9sb2dpYyBBY2Nlc3MgR2l2ZW4gVEhFTUU0IikKYGBgCgojIyBJbmZsaXhpbWFiCmBgYHtyfQppbmZsaXhpbWFiX2FjY2VzcyA8LSBnbG0oaW5mbGl4aW1hYl8zIH4gIGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIHJhY2VfNSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICBldGhuaWNfMyArIGxhbmdfMyAgKyBtYXhfY2ggKyBSUExfVEhFTUVTLAogICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsCiAgICAgICAgICAgICAgZGF0YSA9IGJhc2VsaW5lMikKc3VtbWFyeShpbmZsaXhpbWFiX2FjY2VzcyApCmJyb29tOjpnbGFuY2UoaW5mbGl4aW1hYl9hY2Nlc3MgKQpicm9vbTo6dGlkeShpbmZsaXhpbWFiX2FjY2VzcyAsIGV4cG9uZW50aWF0ZSA9IFRSVUUpCnRibF9yZWdyZXNzaW9uKGluZmxpeGltYWJfYWNjZXNzLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShpbmZsaXhpbWFiX2FjY2VzcykKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGluZmxpeGltYWJfYWNjZXNzLCBwYW5lbCA9IFRSVUUpCgojIE1hcmdpbnMgCmNwbG90KGluZmxpeGltYWJfYWNjZXNzLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgSW1tdW5vbW9kdWxhdG9yIFJ4IEdpdmVuIFNWSSIpCgojIyBBbGwgdGhlbWVzCmluZmxpeGltYWJfYWNlc3MyIDwtIGdsbShpbmZsaXhpbWFiXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgCiAgICAgICAgICAgICAgICAgICAgcmFjZV81ICsgZXRobmljXzMgKyBsYW5nXzMgKyBtYXhfY2ggKyBSUExfVEhFTUUxICsgCiAgICAgICAgICAgICAgICAgICAgICBSUExfVEhFTUUyICsgUlBMX1RIRU1FMyArIFJQTF9USEVNRTQsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUyKQpzdW1tYXJ5KGluZmxpeGltYWJfYWNlc3MyICkKYnJvb206OmdsYW5jZShpbmZsaXhpbWFiX2FjZXNzMiApCmJyb29tOjp0aWR5KGluZmxpeGltYWJfYWNlc3MyICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24oaW5mbGl4aW1hYl9hY2VzczIsIGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iKSwgZXhwb25lbnRpYXRlID0gVFJVRSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKGluZmxpeGltYWJfYWNlc3MyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoaW5mbGl4aW1hYl9hY2VzczIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QoaW5mbGl4aW1hYl9hY2VzczIsICJSUExfVEhFTUUxIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBJbmZsaXhpbWFiIEFjY2VzcyBHaXZlbiBUaGVtZSAxIikKY3Bsb3QoaW5mbGl4aW1hYl9hY2VzczIsICJSUExfVEhFTUUyIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBJbmZsaXhpbWFiIEFjY2VzcyBHaXZlbiBUSEVNRTIiKQpjcGxvdChpbmZsaXhpbWFiX2FjZXNzMiwgIlJQTF9USEVNRTMiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEluZmxpeGltYWIgQWNjZXNzIEdpdmVuIFRIRU1FMyIpCmNwbG90KGluZmxpeGltYWJfYWNlc3MyLCAiUlBMX1RIRU1FNCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgSW5mbGl4aW1hYiBBY2Nlc3MgR2l2ZW4gVEhFTUU0IikKYGBgCiMjIEFkYWxpbXVtYWIKYGBge3J9CmFkYV9hY2Nlc3MgPC0gZ2xtKGFkYWxpbXVtYWJfMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyByYWNlXzUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRobmljXzMgKyBsYW5nXzMgICsgbWF4X2NoICsgUlBMX1RIRU1FUywKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBiYXNlbGluZTIpCnN1bW1hcnkoYWRhX2FjY2VzcyApCmJyb29tOjpnbGFuY2UoYWRhX2FjY2VzcyApCmJyb29tOjp0aWR5KGFkYV9hY2Nlc3MgLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihhZGFfYWNjZXNzLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShhZGFfYWNjZXNzKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoYWRhX2FjY2VzcywgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChhZGFfYWNjZXNzLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgSW1tdW5vbW9kdWxhdG9yIFJ4IEdpdmVuIFNWSSIpCgojIyBBbGwgdGhlbWVzCmFkYV9hY2Nlc3MyIDwtIGdsbShhZGFsaW11bWFiXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgCiAgICAgICAgICAgICAgICAgICAgcmFjZV81ICsgZXRobmljXzMgKyBsYW5nXzMgKyBtYXhfY2ggKyBSUExfVEhFTUUxICsgCiAgICAgICAgICAgICAgICAgICAgICBSUExfVEhFTUUyICsgUlBMX1RIRU1FMyArIFJQTF9USEVNRTQsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUyKQpzdW1tYXJ5KGFkYV9hY2Nlc3MyICkKYnJvb206OmdsYW5jZShhZGFfYWNjZXNzMiApCmJyb29tOjp0aWR5KGFkYV9hY2Nlc3MyICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24oYWRhX2FjY2VzczIsIGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iKSwgZXhwb25lbnRpYXRlID0gVFJVRSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKGFkYV9hY2Nlc3MyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoYWRhX2FjY2VzczIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QoYWRhX2FjY2VzczIsICJSUExfVEhFTUUxIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBBZGFsaW11bWFiIEFjY2VzcyBHaXZlbiBUaGVtZSAxIikKY3Bsb3QoYWRhX2FjY2VzczIsICJSUExfVEhFTUUyIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBBZGFsaW11bWFiIEFjY2VzcyBHaXZlbiBUSEVNRTIiKQpjcGxvdChhZGFfYWNjZXNzMiwgIlJQTF9USEVNRTMiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIEFkYWxpbXVtYWIgQWNjZXNzIEdpdmVuIFRIRU1FMyIpCmNwbG90KGFkYV9hY2Nlc3MyLCAiUlBMX1RIRU1FNCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgQWRhbGltdW1hYiBBY2Nlc3MgR2l2ZW4gVEhFTUU0IikKYGBgCiMjIFZlZG9saXp1bWFiCmBgYHtyfQp2ZWRvbGl6dW1hYl9hY2Nlc3MgPC0gZ2xtKHZlZG9saXp1bWFiXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgcmFjZV81ICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aG5pY18zICsgbGFuZ18zICArIG1heF9jaCArIFJQTF9USEVNRVMsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUyKQpzdW1tYXJ5KHZlZG9saXp1bWFiX2FjY2VzcyApCmJyb29tOjpnbGFuY2UodmVkb2xpenVtYWJfYWNjZXNzICkKYnJvb206OnRpZHkodmVkb2xpenVtYWJfYWNjZXNzICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24odmVkb2xpenVtYWJfYWNjZXNzLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZSh2ZWRvbGl6dW1hYl9hY2Nlc3MpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbCh2ZWRvbGl6dW1hYl9hY2Nlc3MsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QodmVkb2xpenVtYWJfYWNjZXNzLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgVmVkb2xpenVtYWIgQWNjZXNzIEdpdmVuIFNWSSIpCgojIyBBbGwgdGhlbWVzCnZlZG9saXp1bWFiX2FjY2VzczIgPC0gZ2xtKHZlZG9saXp1bWFiXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgCiAgICAgICAgICAgICAgICAgICAgcmFjZV81ICsgZXRobmljXzMgKyBsYW5nXzMgKyBtYXhfY2ggKyBSUExfVEhFTUUxICsgCiAgICAgICAgICAgICAgICAgICAgICBSUExfVEhFTUUyICsgUlBMX1RIRU1FMyArIFJQTF9USEVNRTQsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUyKQpzdW1tYXJ5KHZlZG9saXp1bWFiX2FjY2VzczIgKQpicm9vbTo6Z2xhbmNlKHZlZG9saXp1bWFiX2FjY2VzczIgKQpicm9vbTo6dGlkeSh2ZWRvbGl6dW1hYl9hY2Nlc3MyICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24odmVkb2xpenVtYWJfYWNjZXNzMiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2UodmVkb2xpenVtYWJfYWNjZXNzMikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKHZlZG9saXp1bWFiX2FjY2VzczIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QodmVkb2xpenVtYWJfYWNjZXNzMiwgIlJQTF9USEVNRTEiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFZlZG9saXp1bWFiIEFjY2VzcyBHaXZlbiBUaGVtZSAxIikKY3Bsb3QodmVkb2xpenVtYWJfYWNjZXNzMiwgIlJQTF9USEVNRTIiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFZlZG9saXp1bWFiIEFjY2VzcyBHaXZlbiBUSEVNRTIiKQpjcGxvdCh2ZWRvbGl6dW1hYl9hY2Nlc3MyLCAiUlBMX1RIRU1FMyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgVmVkb2xpenVtYWIgQWNjZXNzIEdpdmVuIFRIRU1FMyIpCmNwbG90KHZlZG9saXp1bWFiX2FjY2VzczIsICJSUExfVEhFTUU0Iiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBWZWRvbGl6dW1hYiBBY2Nlc3MgR2l2ZW4gVEhFTUU0IikKYGBgCiMjIFVzdGVraW51bWFiCmBgYHtyfQp1c3Rla2ludW1hYl9hY2Nlc3MgPC0gZ2xtKHVzdGVraW51bWFiXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgcmFjZV81ICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aG5pY18zICsgbGFuZ18zICArIG1heF9jaCArIFJQTF9USEVNRVMsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUyKQpzdW1tYXJ5KHVzdGVraW51bWFiX2FjY2VzcyApCmJyb29tOjpnbGFuY2UodXN0ZWtpbnVtYWJfYWNjZXNzICkKYnJvb206OnRpZHkodXN0ZWtpbnVtYWJfYWNjZXNzICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24odXN0ZWtpbnVtYWJfYWNjZXNzLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIFJQTF9USEVNRVMgfiAiVG90YWwgU1ZJIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZSh1c3Rla2ludW1hYl9hY2Nlc3MpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbCh1c3Rla2ludW1hYl9hY2Nlc3MsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QodXN0ZWtpbnVtYWJfYWNjZXNzLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgVXN0ZWtpbnVtYWIgQWNjZXNzIEdpdmVuIFNWSSIpCgojIyBBbGwgdGhlbWVzCnVzdGVraW51bWFiX2FjY2VzczIgPC0gZ2xtKHVzdGVraW51bWFiXzMgfiAgaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgCiAgICAgICAgICAgICAgICAgICAgcmFjZV81ICsgZXRobmljXzMgKyBsYW5nXzMgKyBtYXhfY2ggKyBSUExfVEhFTUUxICsgCiAgICAgICAgICAgICAgICAgICAgICBSUExfVEhFTUUyICsgUlBMX1RIRU1FMyArIFJQTF9USEVNRTQsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIiwKICAgICAgICAgICAgICBkYXRhID0gYmFzZWxpbmUyKQpzdW1tYXJ5KHVzdGVraW51bWFiX2FjY2VzczIgKQpicm9vbTo6Z2xhbmNlKHVzdGVraW51bWFiX2FjY2VzczIgKQpicm9vbTo6dGlkeSh1c3Rla2ludW1hYl9hY2Nlc3MyICwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24odXN0ZWtpbnVtYWJfYWNjZXNzMiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2UodXN0ZWtpbnVtYWJfYWNjZXNzMikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKHVzdGVraW51bWFiX2FjY2VzczIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3QodXN0ZWtpbnVtYWJfYWNjZXNzMiwgIlJQTF9USEVNRTEiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFVzdGVraW51bWFiIEFjY2VzcyBHaXZlbiBUaGVtZSAxIikKY3Bsb3QodXN0ZWtpbnVtYWJfYWNjZXNzMiwgIlJQTF9USEVNRTIiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFVzdGVraW51bWFiIEFjY2VzcyBHaXZlbiBUSEVNRTIiKQpjcGxvdCh1c3Rla2ludW1hYl9hY2Nlc3MyLCAiUlBMX1RIRU1FMyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgVXN0ZWtpbnVtYWIgQWNjZXNzIEdpdmVuIFRIRU1FMyIpCmNwbG90KHVzdGVraW51bWFiX2FjY2VzczIsICJSUExfVEhFTUU0Iiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBVc3Rla2ludW1hYiBBY2Nlc3MgR2l2ZW4gVEhFTUU0IikKYGBgCiMjIFNtYWxsIE1vbGVjdWxlcyAKYGBge3J9CnNtYWxsX2FjY2VzcyA8LSBnbG0oc21hbGxfMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyByYWNlXzUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRobmljXzMgKyBsYW5nXzMgICsgbWF4X2NoICsgUlBMX1RIRU1FUywKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBVQ19tZWRzXzMpCnN1bW1hcnkoc21hbGxfYWNjZXNzICkKYnJvb206OmdsYW5jZShzbWFsbF9hY2Nlc3MgKQpicm9vbTo6dGlkeShzbWFsbF9hY2Nlc3MgLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihzbWFsbF9hY2Nlc3MsIGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwgZXhwb25lbnRpYXRlID0gVFJVRSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKHNtYWxsX2FjY2VzcykKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKHNtYWxsX2FjY2VzcywgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChzbWFsbF9hY2Nlc3MsICJSUExfVEhFTUVTIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTbWFsbCBNb2xlY3VsZSBBY2Nlc3MgR2l2ZW4gU1ZJIikKCiMjIEFsbCB0aGVtZXMKc21hbGxfYWNjZXNzMiA8LSBnbG0oc21hbGxfMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyAKICAgICAgICAgICAgICAgICAgICByYWNlXzUgKyBldGhuaWNfMyArIGxhbmdfMyArIG1heF9jaCArIFJQTF9USEVNRTEgKyAKICAgICAgICAgICAgICAgICAgICAgIFJQTF9USEVNRTIgKyBSUExfVEhFTUUzICsgUlBMX1RIRU1FNCwKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBVQ19tZWRzXzMpCnN1bW1hcnkoc21hbGxfYWNjZXNzMiApCmJyb29tOjpnbGFuY2Uoc21hbGxfYWNjZXNzMiApCmJyb29tOjp0aWR5KHNtYWxsX2FjY2VzczIgLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihzbWFsbF9hY2Nlc3MyLCBsYWJlbCA9IGxpc3QoaWJkXzMgfiAiSUJEIERpYWdub3NpcyIsIGFnZV95cnMgfiAiQWdlIiwgZ2VuZGVyfiAiR2VuZGVyIiwgcmFjZV81IH4gIlJhY2UiLCBldGhuaWNfMyB+ICJFdGhuaWNpdHkiLCBsYW5nXzMgfiAiUHJpbWFyeSBMYW5ndWFnZSIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIsIFJQTF9USEVNRTEgfiAiU29jZWlvZWNvbm9taWMgU3RhdHVzIiwgUlBMX1RIRU1FMiB+ICJIb3VzZWhvbGQgQ29tcG9zaXRpb24iLCBSUExfVEhFTUUzIH4gIk1pbm9yaXR5IFN0YXR1cyBhbmQgTGFuZ3VhZ2UiLCBSUExfVEhFTUU0IH4gIkhvdXNpbmcgYW5kIFRyYW5zcG9ydGF0aW9uIiksIGV4cG9uZW50aWF0ZSA9IFRSVUUpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShzbWFsbF9hY2Nlc3MyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoc21hbGxfYWNjZXNzMiwgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChzbWFsbF9hY2Nlc3MyLCAiUlBMX1RIRU1FMSIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgU21hbGwgTW9sZWN1bGUgQWNjZXNzIEdpdmVuIFRoZW1lIDEiKQpjcGxvdChzbWFsbF9hY2Nlc3MyLCAiUlBMX1RIRU1FMiIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgU21hbGwgTW9sZWN1bGUgQWNjZXNzIEdpdmVuIFRIRU1FMiIpCmNwbG90KHNtYWxsX2FjY2VzczIsICJSUExfVEhFTUUzIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTbWFsbCBNb2xlY3VsZSBBY2Nlc3MgR2l2ZW4gVEhFTUUzIikKY3Bsb3Qoc21hbGxfYWNjZXNzMiwgIlJQTF9USEVNRTQiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFNtYWxsIE1vbGVjdWxlIEFjY2VzcyBHaXZlbiBUSEVNRTQiKQpgYGAKIyMgU3Rlcm9pZHMgCmBgYHtyfQpzdGVyb2lkX2FjY2VzcyA8LSBnbG0oc3Rlcm9pZHNfMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyByYWNlXzUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRobmljXzMgKyBsYW5nXzMgICsgbWF4X2NoICsgUlBMX1RIRU1FUywKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBiYXNlbGluZSkKc3VtbWFyeShzdGVyb2lkX2FjY2VzcykKYnJvb206OmdsYW5jZShzdGVyb2lkX2FjY2VzcykKYnJvb206OnRpZHkoc3Rlcm9pZF9hY2Nlc3MgLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihzdGVyb2lkX2FjY2VzcywgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2Uoc3Rlcm9pZF9hY2Nlc3MpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChzdGVyb2lkX2FjY2VzcywgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChzdGVyb2lkX2FjY2VzcywgIlJQTF9USEVNRVMiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFN0ZXJvaWQgQWNjZXNzIEdpdmVuIFNWSSIpCgojIyBBbGwgdGhlbWVzCnN0ZXJvaWRfYWNjZXNzMiA8LSBnbG0oc3Rlcm9pZHNfMyB+ICBpYmRfMyArIGFnZV95cnMgKyBnZW5kZXIgKyAKICAgICAgICAgICAgICAgICAgICByYWNlXzUgKyBldGhuaWNfMyArIGxhbmdfMyArIG1heF9jaCArIFJQTF9USEVNRTEgKyAKICAgICAgICAgICAgICAgICAgICAgIFJQTF9USEVNRTIgKyBSUExfVEhFTUUzICsgUlBMX1RIRU1FNCwKICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiLAogICAgICAgICAgICAgIGRhdGEgPSBiYXNlbGluZSkKc3VtbWFyeShzdGVyb2lkX2FjY2VzczIgKQpicm9vbTo6Z2xhbmNlKHN0ZXJvaWRfYWNjZXNzMiApCmJyb29tOjp0aWR5KHN0ZXJvaWRfYWNjZXNzMiAsIGV4cG9uZW50aWF0ZSA9IFRSVUUpCnRibF9yZWdyZXNzaW9uKHN0ZXJvaWRfYWNjZXNzMiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2Uoc3Rlcm9pZF9hY2Nlc3MyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoc3Rlcm9pZF9hY2Nlc3MyLCBwYW5lbCA9IFRSVUUpCgojIE1hcmdpbnMgCmNwbG90KHN0ZXJvaWRfYWNjZXNzMiwgIlJQTF9USEVNRTEiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFN0ZXJvaWQgQWNjZXNzIEdpdmVuIFRoZW1lIDEiKQpjcGxvdChzdGVyb2lkX2FjY2VzczIsICJSUExfVEhFTUUyIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTU3Rlcm9pZCBBY2Nlc3MgR2l2ZW4gVEhFTUUyIikKY3Bsb3Qoc3Rlcm9pZF9hY2Nlc3MyLCAiUlBMX1RIRU1FMyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgU3Rlcm9pZGUgQWNjZXNzIEdpdmVuIFRIRU1FMyIpCmNwbG90KHN0ZXJvaWRfYWNjZXNzMiwgIlJQTF9USEVNRTQiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFN0ZXJvaWQgQWNjZXNzIEdpdmVuIFRIRU1FNCIpCmBgYAoKIyBTdGVyb2lkcyAtIFBvaXNzb24KYGBge3J9CnN0ZXJvaWRfY291bnQucCA8LSBnbG0oc3Rlcm9pZF9jb3VudCB+IGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIHJhY2VfNSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICBldGhuaWNfMyArIGxhbmdfMyAgKyBtYXhfY2ggKyBSUExfVEhFTUVTLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJwb2lzc29uIiwgCiAgICAgICAgICAgICAgIGRhdGEgPSBhY2Nlc3NfY2xhc3NfZGljaCkgCnN1bW1hcnkoc3Rlcm9pZF9jb3VudC5wKQpicm9vbTo6Z2xhbmNlKHN0ZXJvaWRfY291bnQucCkKYnJvb206OnRpZHkoc3Rlcm9pZF9jb3VudC5wLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihzdGVyb2lkX2NvdW50LnAsIGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSwgZXhwb25lbnRpYXRlID0gVFJVRSkKCiMgTkIgUmVzaWR1YWwgUGxvdApzdGVyb2lkX2NvdW50LnAucmVzIDwtIHJlc2lkKHN0ZXJvaWRfY291bnQucCkKcGxvdChmaXR0ZWQoc3Rlcm9pZF9jb3VudC5wKSwgc3Rlcm9pZF9jb3VudC5wLnJlcywgY29sPSdzdGVlbGJsdWUnLCBwY2g9MTYsCiAgICAgeGxhYj0nUHJlZGljdGVkIFZhY2NpbmVzJywgeWxhYj0nU3RhbmRhcmRpemVkIFJlc2lkdWFscycsIG1haW49J05lZ2F0aXZlIEJpbm9taWFsJykKYWJsaW5lKDAsMCkKIyBOQiByZWdyZXNzaW9uIG1vcmUgYXBwcm9wcmlhdGUgYmVjYXVzZSByZXNpZHVhbHMgb2YgdGhlIG1vZGVsIGFyZSBzbWFsbGVyIAoKIyBMaWtlbGlob29kIHJhdGlvIHRlc3QgCnBjaGlzcSgyICogKGxvZ0xpayhzdGVyb2lkX2NvdW50LnApIC0gbG9nTGlrKHN0ZXJvaWRfY291bnQucCkpLCBkZiA9IDEsIGxvd2VyLnRhaWwgPSBGQUxTRSkKIyBwLXZhbHVlIG9mIGxvZ2xpayBpcyA8IDAuMDUgc28gTkIgcmVncmVzc2lvbiBpcyB0aGUgbW9yZSBhcHByb3ByaWF0ZSBtb2RlbCAKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKHN0ZXJvaWRfY291bnQucCkKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKHN0ZXJvaWRfY291bnQucCwgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChzdGVyb2lkX2NvdW50Lm5iLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgU3Rlcm9pZCBSeCBHaXZlbiBTVkkiKQoKIyMgQWxsIHRoZW1lcyAKc3Rlcm9pZF9jb3VudC5wMiA8LSBnbG0oc3Rlcm9pZF9jb3VudCB+IGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIHJhY2VfNSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICBldGhuaWNfMyArIGxhbmdfMyAgKyBtYXhfY2ggKyBSUExfVEhFTUUxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgUlBMX1RIRU1FMiArIFJQTF9USEVNRTMgKyBSUExfVEhFTUU0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSAicG9pc3NvbiIsIAogICAgICAgICAgICAgICBkYXRhID0gYWNjZXNzX2NsYXNzX2RpY2gpIApzdW1tYXJ5KHN0ZXJvaWRfY291bnQucDIpCmJyb29tOjpnbGFuY2Uoc3Rlcm9pZF9jb3VudC5wMikKYnJvb206OnRpZHkoc3Rlcm9pZF9jb3VudC5wMiwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24oc3Rlcm9pZF9jb3VudC5wMiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBOQiBSZXNpZHVhbCBQbG90CnN0ZXJvaWRfY291bnQucDIucmVzMiA8LSByZXNpZChzdGVyb2lkX2NvdW50LnAyKQpwbG90KGZpdHRlZChzdGVyb2lkX2NvdW50LnAyKSwgc3Rlcm9pZF9jb3VudC5wMi5yZXMyLCBjb2w9J3N0ZWVsYmx1ZScsIHBjaD0xNiwKICAgICB4bGFiPSdQcmVkaWN0ZWQgVmFjY2luZXMnLCB5bGFiPSdTdGFuZGFyZGl6ZWQgUmVzaWR1YWxzJywgbWFpbj0nTmVnYXRpdmUgQmlub21pYWwnKQphYmxpbmUoMCwwKQojIE5CIHJlZ3Jlc3Npb24gbW9yZSBhcHByb3ByaWF0ZSBiZWNhdXNlIHJlc2lkdWFscyBvZiB0aGUgbW9kZWwgYXJlIHNtYWxsZXIgCgojIExpa2VsaWhvb2QgcmF0aW8gdGVzdCAKcGNoaXNxKDIgKiAobG9nTGlrKHN0ZXJvaWRfY291bnQucDIpIC0gbG9nTGlrKHN0ZXJvaWRfY291bnQucDIpKSwgZGYgPSAxLCBsb3dlci50YWlsID0gRkFMU0UpCiMgcC12YWx1ZSBvZiBsb2dsaWsgaXMgPCAwLjA1IHNvIE5CIHJlZ3Jlc3Npb24gaXMgdGhlIG1vcmUgYXBwcm9wcmlhdGUgbW9kZWwgCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShzdGVyb2lkX2NvdW50LnAyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoc3Rlcm9pZF9jb3VudC5wMiwgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChzdGVyb2lkX2NvdW50LnAyLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgU3Rlcm9pZCBSeCBHaXZlbiBTVkkiKQpgYGAKCiMgU3Rlcm9pZHMgLSBuZWdhdGl2ZSBiaW5vbWlhbCAKYGBge3J9CmxpYnJhcnkoTUFTUykKc3Rlcm9pZF9jb3VudC5uYiA8LSBnbG0ubmIoc3Rlcm9pZF9jb3VudCB+IGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIHJhY2VfNSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICBldGhuaWNfMyArIGxhbmdfMyAgKyBtYXhfY2ggKyBSUExfVEhFTUVTLAogICAgICAgICAgICAgICBkYXRhID0gYWNjZXNzX2NsYXNzX2RpY2gpIApzdW1tYXJ5KHN0ZXJvaWRfY291bnQubmIpCmJyb29tOjpnbGFuY2Uoc3Rlcm9pZF9jb3VudC5uYikKYnJvb206OnRpZHkoc3Rlcm9pZF9jb3VudC5uYiwgZXhwb25lbnRpYXRlID0gVFJVRSkKdGJsX3JlZ3Jlc3Npb24oc3Rlcm9pZF9jb3VudC5uYiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBSUExfVEhFTUVTIH4gIlRvdGFsIFNWSSIsIG1heF9jaCB+ICJDaGFybHNvbiBDb21vcmJpZGl0eSBJbmRleCIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBOQiBSZXNpZHVhbCBQbG90CnN0ZXJvaWRfY291bnQubmIucmVzIDwtIHJlc2lkKHN0ZXJvaWRfY291bnQubmIpCnBsb3QoZml0dGVkKHN0ZXJvaWRfY291bnQubmIpLCBzdGVyb2lkX2NvdW50Lm5iLnJlcywgY29sPSdzdGVlbGJsdWUnLCBwY2g9MTYsCiAgICAgeGxhYj0nUHJlZGljdGVkIFZhY2NpbmVzJywgeWxhYj0nU3RhbmRhcmRpemVkIFJlc2lkdWFscycsIG1haW49J05lZ2F0aXZlIEJpbm9taWFsJykKYWJsaW5lKDAsMCkKIyBOQiByZWdyZXNzaW9uIG1vcmUgYXBwcm9wcmlhdGUgYmVjYXVzZSByZXNpZHVhbHMgb2YgdGhlIG1vZGVsIGFyZSBzbWFsbGVyIAoKIyBMaWtlbGlob29kIHJhdGlvIHRlc3QgCnBjaGlzcSgyICogKGxvZ0xpayhzdGVyb2lkX2NvdW50Lm5iKSAtIGxvZ0xpayhzdGVyb2lkX2NvdW50Lm5iKSksIGRmID0gMSwgbG93ZXIudGFpbCA9IEZBTFNFKQojIHAtdmFsdWUgb2YgbG9nbGlrIGlzIDwgMC4wNSBzbyBOQiByZWdyZXNzaW9uIGlzIHRoZSBtb3JlIGFwcHJvcHJpYXRlIG1vZGVsIAoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2Uoc3Rlcm9pZF9jb3VudC5uYikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKHN0ZXJvaWRfY291bnQubmIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3Qoc3Rlcm9pZF9jb3VudC5uYiwgIlJQTF9USEVNRVMiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBMaWtlbGlob29kIG9mIFN0ZXJvaWQgUnggR2l2ZW4gU1ZJIikKCiMjIEFsbCB0aGVtZXMgCnN0ZXJvaWRfY291bnQubmIyIDwtIGdsbS5uYihzdGVyb2lkX2NvdW50IH4gaWJkXzMgKyBhZ2VfeXJzICsgZ2VuZGVyICsgcmFjZV81ICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aG5pY18zICsgbGFuZ18zICArIG1heF9jaCArIFJQTF9USEVNRTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBSUExfVEhFTUUyICsgUlBMX1RIRU1FMyArIFJQTF9USEVNRTQsCiAgICAgICAgICAgICAgIGRhdGEgPSBhY2Nlc3NfY2xhc3NfZGljaCkgCnN1bW1hcnkoc3Rlcm9pZF9jb3VudC5uYjIpCmJyb29tOjpnbGFuY2Uoc3Rlcm9pZF9jb3VudC5uYjIpCmJyb29tOjp0aWR5KHN0ZXJvaWRfY291bnQubmIyLCBleHBvbmVudGlhdGUgPSBUUlVFKQp0YmxfcmVncmVzc2lvbihzdGVyb2lkX2NvdW50Lm5iMiwgbGFiZWwgPSBsaXN0KGliZF8zIH4gIklCRCBEaWFnbm9zaXMiLCBhZ2VfeXJzIH4gIkFnZSIsIGdlbmRlcn4gIkdlbmRlciIsIHJhY2VfNSB+ICJSYWNlIiwgZXRobmljXzMgfiAiRXRobmljaXR5IiwgbGFuZ18zIH4gIlByaW1hcnkgTGFuZ3VhZ2UiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiLCBSUExfVEhFTUUxIH4gIlNvY2Vpb2Vjb25vbWljIFN0YXR1cyIsIFJQTF9USEVNRTIgfiAiSG91c2Vob2xkIENvbXBvc2l0aW9uIiwgUlBMX1RIRU1FMyB+ICJNaW5vcml0eSBTdGF0dXMgYW5kIExhbmd1YWdlIiwgUlBMX1RIRU1FNCB+ICJIb3VzaW5nIGFuZCBUcmFuc3BvcnRhdGlvbiIpLCBleHBvbmVudGlhdGUgPSBUUlVFKQoKIyBOQiBSZXNpZHVhbCBQbG90CnN0ZXJvaWRfY291bnQubmIucmVzMiA8LSByZXNpZChzdGVyb2lkX2NvdW50Lm5iMikKcGxvdChmaXR0ZWQoc3Rlcm9pZF9jb3VudC5uYjIpLCBzdGVyb2lkX2NvdW50Lm5iLnJlczIsIGNvbD0nc3RlZWxibHVlJywgcGNoPTE2LAogICAgIHhsYWI9J1ByZWRpY3RlZCBWYWNjaW5lcycsIHlsYWI9J1N0YW5kYXJkaXplZCBSZXNpZHVhbHMnLCBtYWluPSdOZWdhdGl2ZSBCaW5vbWlhbCcpCmFibGluZSgwLDApCiMgTkIgcmVncmVzc2lvbiBtb3JlIGFwcHJvcHJpYXRlIGJlY2F1c2UgcmVzaWR1YWxzIG9mIHRoZSBtb2RlbCBhcmUgc21hbGxlciAKCiMgTGlrZWxpaG9vZCByYXRpbyB0ZXN0IApwY2hpc3EoMiAqIChsb2dMaWsoc3Rlcm9pZF9jb3VudC5uYjIpIC0gbG9nTGlrKHN0ZXJvaWRfY291bnQubmIyKSksIGRmID0gMSwgbG93ZXIudGFpbCA9IEZBTFNFKQojIHAtdmFsdWUgb2YgbG9nbGlrIGlzIDwgMC4wNSBzbyBOQiByZWdyZXNzaW9uIGlzIHRoZSBtb3JlIGFwcHJvcHJpYXRlIG1vZGVsIAoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2Uoc3Rlcm9pZF9jb3VudC5uYjIpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChzdGVyb2lkX2NvdW50Lm5iMiwgcGFuZWwgPSBUUlVFKQoKIyBNYXJnaW5zIApjcGxvdChzdGVyb2lkX2NvdW50Lm5iLCAiUlBMX1RIRU1FUyIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIExpa2VsaWhvb2Qgb2YgU3Rlcm9pZCBSeCBHaXZlbiBTVkkiKQpgYGAKCiMjIFN0ZXJvaWRzIC0gbGluZWFyIG1vZGVsIApgYGB7cn0Kc3Rlcm9pZF9jb3VudCA8LSBsbShzdGVyb2lkX2NvdW50IH4gIGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIHJhY2VfNSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICBldGhuaWNfMyArIGxhbmdfMyAgKyBtYXhfY2ggKyBSUExfVEhFTUVTLAogICAgICAgICAgICAgIGRhdGEgPSBhY2Nlc3NfY2xhc3NfZGljaCkKc3VtbWFyeShzdGVyb2lkX2NvdW50KQpicm9vbTo6Z2xhbmNlKHN0ZXJvaWRfY291bnQpCmJyb29tOjp0aWR5KHN0ZXJvaWRfY291bnQpCnRibF9yZWdyZXNzaW9uKHN0ZXJvaWRfY291bnQsIGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgUlBMX1RIRU1FUyB+ICJUb3RhbCBTVkkiLCBtYXhfY2ggfiAiQ2hhcmxzb24gQ29tb3JiaWRpdHkgSW5kZXgiKSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKHN0ZXJvaWRfY291bnQpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChzdGVyb2lkX2NvdW50LCBwYW5lbCA9IFRSVUUpCgojIE1hcmdpbnMgCmNwbG90KHN0ZXJvaWRfY291bnQsICJSUExfVEhFTUVTIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTdGVyb2lkcyBHaXZlbiBTVkkiKQoKIyMgQWxsIHRoZW1lcwpzdGVyb2lkX2NvdW50MiA8LSBsbShzdGVyb2lkX2NvdW50IH4gIGliZF8zICsgYWdlX3lycyArIGdlbmRlciArIAogICAgICAgICAgICAgICAgICAgIHJhY2VfNSArIGV0aG5pY18zICsgbGFuZ18zICsgbWF4X2NoICsgUlBMX1RIRU1FMSArIAogICAgICAgICAgICAgICAgICAgICAgUlBMX1RIRU1FMiArIFJQTF9USEVNRTMgKyBSUExfVEhFTUU0LAogICAgICAgICAgICAgIGRhdGEgPSBhY2Nlc3NfY2xhc3NfZGljaCkKc3VtbWFyeShzdGVyb2lkX2NvdW50MiApCmJyb29tOjpnbGFuY2Uoc3Rlcm9pZF9jb3VudDIgKQpicm9vbTo6dGlkeShzdGVyb2lkX2NvdW50MikKdGJsX3JlZ3Jlc3Npb24oc3Rlcm9pZF9jb3VudDIsIGxhYmVsID0gbGlzdChpYmRfMyB+ICJJQkQgRGlhZ25vc2lzIiwgYWdlX3lycyB+ICJBZ2UiLCBnZW5kZXJ+ICJHZW5kZXIiLCByYWNlXzUgfiAiUmFjZSIsIGV0aG5pY18zIH4gIkV0aG5pY2l0eSIsIGxhbmdfMyB+ICJQcmltYXJ5IExhbmd1YWdlIiwgbWF4X2NoIH4gIkNoYXJsc29uIENvbW9yYmlkaXR5IEluZGV4IiwgUlBMX1RIRU1FMSB+ICJTb2NlaW9lY29ub21pYyBTdGF0dXMiLCBSUExfVEhFTUUyIH4gIkhvdXNlaG9sZCBDb21wb3NpdGlvbiIsIFJQTF9USEVNRTMgfiAiTWlub3JpdHkgU3RhdHVzIGFuZCBMYW5ndWFnZSIsIFJQTF9USEVNRTQgfiAiSG91c2luZyBhbmQgVHJhbnNwb3J0YXRpb24iKSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKHN0ZXJvaWRfY291bnQyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoc3Rlcm9pZF9jb3VudDIsIHBhbmVsID0gVFJVRSkKCiMgTWFyZ2lucyAKY3Bsb3Qoc3Rlcm9pZF9jb3VudDIsICJSUExfVEhFTUUxIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTdGVyb2lkIEFjY2VzcyBHaXZlbiBUaGVtZSAxIikKY3Bsb3Qoc3Rlcm9pZF9jb3VudDIsICJSUExfVEhFTUUyIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTU3Rlcm9pZCBBY2Nlc3MgR2l2ZW4gVEhFTUUyIikKY3Bsb3Qoc3Rlcm9pZF9jb3VudDIsICJSUExfVEhFTUUzIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTdGVyb2lkZSBBY2Nlc3MgR2l2ZW4gVEhFTUUzIikKY3Bsb3Qoc3Rlcm9pZF9jb3VudDIsICJSUExfVEhFTUU0Iiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgTGlrZWxpaG9vZCBvZiBTdGVyb2lkIEFjY2VzcyBHaXZlbiBUSEVNRTQiKQpgYGAKCg==