Introduction
Brain Cancers include primary brain tumours which starts in the brain
and almost never spread to other parts of the body and secondary tumours
which are caused by cancers that began in another part of the body .
There are more than 40 major types of brain tumours, which are
grouped into two main types:
- benign - slow-growing and unlikely to spread. Common types are
meningiomas, neuromas, pituitary tumours and craniopharyngiomas.
- malignant - cancerous and able to spread into other parts of the
brain or spinal cord. Common types include astrocytomas,
oligodendrogliomas, glioblastomas and mixed gliomas.
It is estimated that more than 1,900 people were diagnosed with brain
cancer in 2023. The average age at diagnosis is 59 years old.
Brain cancer signs and symptoms
Headaches are often the first symptom of a brain tumour. The
headaches can be mild, severe, persistent, or come and go. A headache
isn’t always a brain tumour but if you’re worried, be sure to see your
GP.
References
- Understanding Brain Tumours, Cancer Council Australia ©2020. Last
medical review of source booklet: May 2020.
- Australian Institute of Health and Welfare. Cancer data in Australia
[Internet]. Canberra: Australian Institute of Health and Welfare, 2023
[cited 2023 Sept 04]. Available from: https://www.aihw.gov.au/reports/cancer/cancer-data-in-australia
Objectives of the study
- determine factors that determine mortality of brain cancer
patients
- compare survival times of certain groups of breast cancer
patients
- determine the extend to which diagnosis affects survival of
patients
- learn more about using R for biostatistical studies and clinical
research
Methodology
My research aims at patients’ brain cancer survival analysis . In the
analysis I did a detailed research on the variables that determine
whether patients get over a disease or surrender in a certain duration
time. Thus I used a non-parametric statistic estimator to create a
Kaplan-Meier Survival model to measure the survival function from
lifetime duration data. We fit a cox proportional model and Logistic
regression model.
Brain Cancer Data
A data frame with 88 observations and 8 variables:
Setup
library(pacman)
p_load(tidyverse, tidymodels, ISLR2, survival, censored,dlookr,pubh,sjPlot,compareGroups,survminer)
take a look at the dataset
BrainCancer<-readr::read_csv("NCU_braincancer.csv")
Data summary
Name
|
BrainCancer
|
Number of rows
|
88
|
Number of columns
|
8
|
_______________________
|
|
Column type frequency:
|
|
factor
|
4
|
numeric
|
4
|
________________________
|
|
Group variables
|
None
|
Variable type: factor
skim_variable
|
n_missing
|
complete_rate
|
ordered
|
n_unique
|
top_counts
|
sex
|
0
|
1.00
|
FALSE
|
2
|
Fem: 45, Mal: 43
|
diagnosis
|
1
|
0.99
|
FALSE
|
4
|
Men: 42, HG : 22, Oth: 14, LG : 9
|
loc
|
0
|
1.00
|
FALSE
|
2
|
Sup: 69, Inf: 19
|
stereo
|
0
|
1.00
|
FALSE
|
2
|
SRT: 65, SRS: 23
|
Variable type: numeric
skim_variable
|
n_missing
|
complete_rate
|
mean
|
sd
|
p0
|
p25
|
p50
|
p75
|
p100
|
hist
|
ki
|
0
|
1
|
81.02
|
10.51
|
40.00
|
80.00
|
80.00
|
90.0
|
100.00
|
<U+2581><U+2581><U+2583><U+2587><U+2587>
|
gtv
|
0
|
1
|
8.66
|
8.66
|
0.01
|
2.50
|
6.51
|
12.1
|
34.64
|
<U+2587><U+2583><U+2581><U+2581><U+2581>
|
status
|
0
|
1
|
0.40
|
0.49
|
0.00
|
0.00
|
0.00
|
1.0
|
1.00
|
<U+2587><U+2581><U+2581><U+2581><U+2585>
|
time
|
0
|
1
|
27.46
|
20.12
|
0.07
|
10.39
|
24.03
|
41.6
|
82.56
|
<U+2587><U+2585><U+2585><U+2582><U+2581>
|
Data wrangling
data<-BrainCancer |>
mutate(brain_status=ifelse(status==1,"dead","alive"))
## check missing values
colSums(is.na(data))
#> sex diagnosis loc ki gtv stereo
#> 0 1 0 0 0 0
#> status time brain_status
#> 0 0 0
- there is only one missing value
## remove the missing values
cases<-complete.cases(data)
data<-data[cases,]
Explanatory data Analysis(EDA)
distribution of numeric variables
# Histogram of all numeric variables
data %>%
keep(is.numeric) %>%
gather() %>%
ggplot(aes(value)) +
facet_wrap(~ key, scales = "free") +
geom_histogram(bins=30,fill=tvthemes::avatar_pal()(1))+
ggthemes::theme_wsj()

- Time and gtv are generally right skewed
Correlations
## select only numeric values
cor_data<-data %>%
keep(is.numeric)
## create a correlation matrix
corl<-cor(cor_data)
corrplot::corrplot(corl,method="color",addCoef.col = "black")

- status is really not supposed to be numeric but rather a factor
variable
- time and gross tumor volume are all positively skewed
- karnofsky index is as good as being a factor so i will further
categorize the data
- the correlations are not really significant given the variables at
hand
further manipulation
data <- data |>
mutate(kan_index = ifelse(ki>=80,"index>79","index<80"))
data |>
janitor::tabyl(kan_index)
kan_index | n | percent |
index<80 | 20 | 0.23 |
index>79 | 67 | 0.77 |
comparing dependent variable with numeric variables
subset <- data |>
dplyr::select(gtv,time,ki,status)
# Bring in external file for visualisations
source('functions/visualisations.R')
# Use plot function
plot <- histoplotter(subset, status,
chart_x_axis_lbl = "survival status",
chart_y_axis_lbl = 'Measures',
boxplot_color = 'navy',
boxplot_fill = tvthemes::avatar_pal()(1),
box_fill_transparency = 0.2)
# Add extras to plot
plot +
ggthemes::theme_fivethirtyeight() +
tvthemes::scale_color_avatar()

categorical data
iv_rates <- data |>
dplyr::mutate(status = ifelse(status==1,"yes","no")) |>
select(kan_index,loc,stereo,status) |>
gather() |>
group_by(key,value) |>
summarize(count = n()) |>
mutate(prop = count/sum(count)) |>
ungroup()
plot<-iv_rates |>
ggplot(aes(fill=key, y=prop, x=value)) +
geom_col(color="black",width = 0.5)+
facet_wrap(~key,scales="free") +
theme(legend.position="bottom") +
geom_label(aes(label=scales::percent(prop)), color="white") +
labs(
title = "survival ratio",
subtitle = "Brain Cancer Analysis",
y = "proportion(%)",
x = "",
fill="status",
caption="B.Ncube::Data enthusiast") +
scale_y_continuous(labels = scales::percent)+
tvthemes::scale_fill_kimPossible()+
ggthemes::theme_fivethirtyeight() +
theme(legend.position = 'none')+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
plot

mortality Rate
data|>
dplyr::group_by(brain_status)|>
dplyr::summarize(count=n(),
mean=mean(gtv, na.rm = T),
std_dev=sd(gtv, na.rm = T),
median=median(gtv, na.rm = T),
min=min(gtv, na.rm = T),
max=max(gtv, na.rm = T))|>
tibble::column_to_rownames(var = "brain_status") |>
base::as.matrix()
#> count mean std_dev median min max
#> alive 52 7.034423 7.828455 4.36 0.01 31.74
#> dead 35 11.142286 9.451387 11.38 0.14 34.64
#Calculate mortality rate
print(paste('Mortality rate (%) is ',round(35/(35+53)*100,digits=2)))
#> [1] "Mortality rate (%) is 39.77"
- Mortality rate is approximately: 40%
- we can view this in a plot or chart
library(extrafont)
loadfonts(quiet=TRUE)
iv_rates <- data |>
group_by(brain_status) |>
summarize(count = n()) |>
mutate(prop = count/sum(count)) |>
ungroup()
plot<-iv_rates |>
ggplot(aes(x=brain_status, y=prop, fill=brain_status)) +
geom_col(color="black",width = 0.5)+
theme(legend.position="bottom") +
geom_label(aes(label=scales::percent(prop)), color="white") +
labs(
title = "mortality ratio",
subtitle = "Brain Cancer Analysis",
y = "proportion(%)",
x = "",
fill="status",
caption="B.Ncube::Data enthusiast") +
scale_y_continuous(labels = scales::percent)+
geom_hline(yintercept = (sum(data$status)/nrow(data)), col = "white", lty = 2) +
tvthemes::scale_fill_kimPossible()+
ggthemes::theme_fivethirtyeight() +
theme(legend.position = 'right')
plot

Cancer outcome by diagnosis type
ggplot(data) +
aes(x=brain_status) +
aes(fill=diagnosis) +
geom_bar(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..]),
position="dodge",
color="black") +
tvthemes::scale_color_kimPossible() +
tvthemes::scale_fill_avatar() +
geom_text(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..],
label=scales::percent(..count../tapply(..count.., ..x.. ,sum)[..x..]) ),
stat="count",
position=position_dodge(1.0),
vjust=-0.5,
size=3) +
scale_y_continuous(limits=c(0,100)) +
scale_y_continuous(labels = scales::percent) +
ggtitle("Cancer Outcome, diagnosis type") + # title and axis labels=
xlab("Diagnosis") +
ylab("% of Group") +
theme_minimal()

- Many of those who died where diagnosed with
HG glioma
- lets see the values in the following table
sjt.xtab(data$diagnosis,data$brain_status,
show.row.prc=TRUE,
show.summary=FALSE,
title="Cross Tab Diagnosis x Cancer")
Cross Tab Diagnosis x Cancer
diagnosis
|
brain_status
|
Total
|
alive
|
dead
|
Meningioma
|
33 78.6 %
|
9 21.4 %
|
42 100 %
|
LG glioma
|
5 55.6 %
|
4 44.4 %
|
9 100 %
|
HG glioma
|
5 22.7 %
|
17 77.3 %
|
22 100 %
|
Other
|
9 64.3 %
|
5 35.7 %
|
14 100 %
|
Total
|
52 59.8 %
|
35 40.2 %
|
87 100 %
|
mortality rate by sex
Create a customised function for summarising categorical data per
status
summarize_status <- function(tbl){tbl %>%
summarise(n_died = sum(brain_status == "yes"),
n_total = n()) %>%
ungroup() %>%
mutate(pct_died = n_died / n_total) %>%
arrange(desc(pct_died)) %>%
mutate(low = qbeta(0.025, n_died + 5, n_total - n_died + .5),
high = qbeta(0.975, n_died + 5, n_total - n_died + .5),
pct = n_total / sum(n_total),
percentage=scales::percent(pct_died))
}
mortality rate summary per sex
data |>
group_by(sex) |>
summarize_status()
sex | n_died | n_total | pct_died | low | high | pct | percentage |
Female | 0 | 45 | 0 | 0.0336 | 0.194 | 0.517 | 0% |
Male | 0 | 42 | 0 | 0.0358 | 0.206 | 0.483 | 0% |
- from the dataset , \(\frac{20}{43}\) men died while the other 15
where woman who died
- we can present these more visually with the graphs below

- mortality is greater in males than it is in females
- the white dashed line indicate the overal mortality rate
Outcome by diagnosis faceted by sex
ggplot(data) + # data to use
aes(x=brain_status) + # x = predictor (factor)
aes(fill=diagnosis) + # fill = outcome (factor)
geom_bar( position="dodge", # side-by-side
color="black") + # choose color of bar borders
tvthemes::scale_color_kimPossible() + # choose colors of bars
tvthemes::scale_fill_avatar() + # bars
geom_text(aes(label=after_stat(count)), # required
stat='count', # required
position=position_dodge(1.0), # required for centering
vjust= -0.5,
size=3) +
scale_x_discrete(limits = rev) + # reverse order to 0 cups first
# FORCE y-axis ticks
facet_grid(~ sex) + # Strata in 1 row
ggtitle("Cancer Outcome, diagnosis type\nStratified") + # title and axis labels
xlab("") +
ylab("Count") +
theme_bw() +
theme(legend.title=element_blank()) +
theme(legend.text=element_text(color="black", size=6)) +
theme(legend.position="right")
+ Meningioma affects more women than it affects men. + both men and
women diagnosed with HG glioma are more likely to die
is there any association between diagnosis and cancer outcome
data %>% contingency(brain_status ~ diagnosis)
#> Outcome
#> Predictor dead alive
#> Other 5 9
#> HG glioma 17 5
#> LG glioma 4 5
#> Meningioma 9 33
#>
#> Outcome + Outcome - Total Inc risk *
#> Exposed + 5 4 9 55.56 (21.20 to 86.30)
#> Exposed - 17 9 26 65.38 (44.33 to 82.79)
#> Total 22 13 35 62.86 (44.92 to 78.53)
#>
#> Point estimates and 95% CIs:
#> -------------------------------------------------------------------
#> Inc risk ratio 0.85 (0.44, 1.62)
#> Inc odds ratio 0.66 (0.14, 3.10)
#> Attrib risk in the exposed * -9.83 (-47.09, 27.43)
#> Attrib fraction in the exposed (%) -17.69 (-124.96, 38.43)
#> Attrib risk in the population * -2.53 (-26.83, 21.78)
#> Attrib fraction in the population (%) -4.02 (-20.73, 10.38)
#> -------------------------------------------------------------------
#> Yates corrected chi2 test that OR = 1: chi2(1) = 0.016 Pr>chi2 = 0.900
#> Fisher exact test that OR = 1: Pr>chi2 = 0.698
#> Wald confidence limits
#> CI: confidence interval
#> * Outcomes per 100 population units
#>
#>
#> Fisher's Exact Test for Count Data
#>
#> data: dat
#> p-value = 0.0001994
#> alternative hypothesis: two.sided
Comments + the outcome is a result of a
fisher's exact test
for association + the plimenary
analysis suggests that at 5% level of significance ,diagnosis(
Meningioma , LG glioma ,HG glioma and other diagnostics) and stereo
variable are significantly associated with survival of patients.
Bivarate relationships for all variables
results <- compareGroups(brain_status ~ diagnosis+ki+sex+loc+stereo+gtv, data = data)
results
#>
#>
#> -------- Summary of results by groups of 'brain_status'---------
#>
#>
#> var N p.value method selection
#> 1 diagnosis 87 <0.001** categorical ALL
#> 2 ki 87 0.023** continuous normal ALL
#> 3 sex 87 0.255 categorical ALL
#> 4 loc 87 0.096* categorical ALL
#> 5 stereo 87 0.063* categorical ALL
#> 6 gtv 87 0.037** continuous normal ALL
#> -----
#> Signif. codes: 0 '**' 0.05 '*' 0.1 ' ' 1
- the above results show the relationship between the cancer outcome
and patient characteristics
- the p-values correspond to
chi-squared test
for
categorical data and t.test
for numeric data
- diagnosis as mentioned in previous results is associated with cancer
outcome.
- Gross tumor volume and kanrfsky index have p-values less than 5%
implying there is significant mean differences for these values per each
outcome category
readytable <- createTable(results, show.ratio=TRUE, show.p.overall = FALSE)
print(readytable, header.labels = c(p.ratio = "p-value"))
#>
#> --------Summary descriptives table by 'brain_status'---------
#>
#> ___________________________________________________________________
#> alive dead OR p-value
#> N=52 N=35
#> ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
#> diagnosis:
#> Meningioma 33 (63.5%) 9 (25.7%) Ref. Ref.
#> LG glioma 5 (9.62%) 4 (11.4%) 2.87 [0.58;13.7] 0.191
#> HG glioma 5 (9.62%) 17 (48.6%) 11.6 [3.55;45.2] <0.001
#> Other 9 (17.3%) 5 (14.3%) 2.02 [0.50;7.71] 0.314
#> ki 83.1 (9.61) 77.7 (11.1) 0.95 [0.91;0.99] 0.025
#> sex:
#> Female 30 (57.7%) 15 (42.9%) Ref. Ref.
#> Male 22 (42.3%) 20 (57.1%) 1.80 [0.76;4.38] 0.185
#> loc:
#> Infratentorial 15 (28.8%) 4 (11.4%) Ref. Ref.
#> Supratentorial 37 (71.2%) 31 (88.6%) 3.03 [0.97;11.9] 0.057
#> stereo:
#> SRS 18 (34.6%) 5 (14.3%) Ref. Ref.
#> SRT 34 (65.4%) 30 (85.7%) 3.08 [1.07;10.5] 0.037
#> gtv 7.03 (7.83) 11.1 (9.45) 1.06 [1.00;1.11] 0.036
#> ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- the extended output shows more significant categories that determine
cancer outcome
- LG glioma is the most significant category associated with cancer
outcome since its p-value value is
p<0.001
which is less
than 5%
- the same applies for
stereo:SRT
extended Analysis
library(glue)
bind_count = function(x){
as_tibble(x) %>%
add_count(value) %>%
mutate(value = glue("{value} ({n})")) %>%
pull(value)
}
# Scatter plot
data %>%
na.omit() %>%
group_by(diagnosis = bind_count(diagnosis)) %>%
summarize_status() %>%
mutate(diagnosis = fct_reorder(diagnosis, pct_died)) %>%
ggplot(mapping = aes(x = pct_died, y = diagnosis)) +
geom_point(aes(size = pct), show.legend = T) +
geom_errorbarh(aes(xmin = low, xmax = high), height = .3) +
labs(
x = "Percentage of patients in each category who died",
title = "Distribution of status by diagnosis",
size = "%prevalence",
subtitle = ""
) +
scale_x_continuous(labels = percent) +
scale_size_continuous(labels = percent) +
theme(plot.title = element_text(hjust = 0.5))

It can also be noted that cumulatively, people with LG
glioma and HG glioma had high chances of
death.
Survival Analysis.
fit <- survfit(Surv(time, status) ~ sex, data = data)
# Access to the sort summary table
summary(fit)$table
#> records n.max n.start events rmean se(rmean) median 0.95LCL
#> sex=Female 45 45 45 15 53.15313 5.645267 51.02 46.16
#> sex=Male 42 42 42 20 45.20122 5.732211 31.25 20.69
#> 0.95UCL
#> sex=Female NA
#> sex=Male NA
ggsurvplot(fit, data = data,
surv.median.line = "hv", # Add medians survival
# Change legends: title & labels
legend.title = "Sex",
legend.labs = c("Male", "Female"),
# Add p-value and tervals
pval = TRUE,
conf.int = TRUE,
# Add risk table
risk.table = TRUE,
tables.height = 0.2,
tables.theme = theme_cleantable(),
# Color palettes. Use custom color: c("#E7B800", "#2E9FDF"),
# or brewer color (e.g.: "Dark2"), or ggsci color (e.g.: "jco")
palette = "#Dark2",
ggtheme = theme_bw(), # Change ggplot2 theme
font.main = c(14, "bold", "darkblue"),
font.x = c(12, "bold.italic", "darkblue"),
font.y = c(12, "bold.italic", "darkblue"),
font.tickslab = c(10, "plain", "darkgreen")
)

- females tend to survive longer than men
- the difference in survival time is not statistically significant at
5% level of significance
difference in survival per diagnosis

Meningioma patients have a longer survival time as compared to
other patients
there is significant difference in survival times between
patients of different diagnosis type at 5% level of
significance
the median survival times for
LG glioma, HG glioma, and Other
are approximately 49,11 and
29 months respectively .
difference in survival per Stereotactic

- those with location at supratentorial have a longer survival time as
compared to their counterparts
- the difference in survival time is rather not statistically
significant
Now lets fit a model
Logistic regression
data<- data |>
select(-brain_status)
data$status<-as.factor(data$status)
lr_mod <- parsnip::logistic_reg()|>
set_engine('glm') |>
set_mode("classification")
model<-lr_mod |>
fit(status~. -time,data=data)
model %>%
pluck("fit") %>%
summary()
#>
#> Call:
#> stats::glm(formula = status ~ . - time, family = stats::binomial,
#> data = data)
#>
#> Coefficients:
#> Estimate Std. Error z value Pr(>|z|)
#> (Intercept) 5.36393 3.50137 1.532 0.125535
#> sexMale 0.30110 0.56563 0.532 0.594500
#> diagnosisLG glioma 1.14990 0.84737 1.357 0.174777
#> diagnosisHG glioma 2.64083 0.73785 3.579 0.000345 ***
#> diagnosisOther 1.01974 0.90625 1.125 0.260492
#> locSupratentorial 0.96505 0.89706 1.076 0.282021
#> ki -0.11264 0.05147 -2.189 0.028630 *
#> gtv 0.03413 0.03468 0.984 0.325042
#> stereoSRT 0.34450 0.73961 0.466 0.641369
#> kan_indexindex>79 1.05054 1.08104 0.972 0.331158
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> (Dispersion parameter for binomial family taken to be 1)
#>
#> Null deviance: 117.264 on 86 degrees of freedom
#> Residual deviance: 84.789 on 77 degrees of freedom
#> AIC: 104.79
#>
#> Number of Fisher Scoring iterations: 5
Now we fit a Cox proportional hazards model:
cox_spec <-
proportional_hazards() %>%
set_engine("survival")
cox_fit <- cox_spec |>
fit(Surv(time, status) ~ ., data = BrainCancer)
cox_fit %>%
pluck("fit") %>%
summary()
#> Call:
#> survival::coxph(formula = Surv(time, status) ~ ., data = data,
#> model = TRUE, x = TRUE)
#>
#> n= 87, number of events= 35
#> (1 observation deleted due to missingness)
#>
#> coef exp(coef) se(coef) z Pr(>|z|)
#> sexMale 0.18375 1.20171 0.36036 0.510 0.61012
#> diagnosisLG glioma 0.91502 2.49683 0.63816 1.434 0.15161
#> diagnosisHG glioma 2.15457 8.62414 0.45052 4.782 1.73e-06 ***
#> diagnosisOther 0.88570 2.42467 0.65787 1.346 0.17821
#> locSupratentorial 0.44119 1.55456 0.70367 0.627 0.53066
#> ki -0.05496 0.94653 0.01831 -3.001 0.00269 **
#> gtv 0.03429 1.03489 0.02233 1.536 0.12466
#> stereoSRT 0.17778 1.19456 0.60158 0.296 0.76760
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> exp(coef) exp(-coef) lower .95 upper .95
#> sexMale 1.2017 0.8321 0.5930 2.4352
#> diagnosisLG glioma 2.4968 0.4005 0.7148 8.7215
#> diagnosisHG glioma 8.6241 0.1160 3.5664 20.8546
#> diagnosisOther 2.4247 0.4124 0.6678 8.8031
#> locSupratentorial 1.5546 0.6433 0.3914 6.1741
#> ki 0.9465 1.0565 0.9132 0.9811
#> gtv 1.0349 0.9663 0.9906 1.0812
#> stereoSRT 1.1946 0.8371 0.3674 3.8839
#>
#> Concordance= 0.794 (se = 0.04 )
#> Likelihood ratio test= 41.37 on 8 df, p=2e-06
#> Wald test = 38.7 on 8 df, p=6e-06
#> Score (logrank) test = 46.59 on 8 df, p=2e-07
Hazard Ratios
Recall that the Cox model is expressed by the hazard function \(h(t)\):
\(h(t) = h_0(t) \times exp(\beta_1x_1 +
\beta_2x_2 + \ldots + \beta_px_p)\)
The quantity of interest from a Cox regression model is the hazard
ratio. The quantities \(exp(\beta_i)\)
are the hazard ratios.
The Hazard Ratio (HR) can be interpreted as follows:
- HR = 1: No effect
- HR < 1: indicates a decreased risk of death
- HR > 1: indicates an increased risk of death
How to Interpret Results
The estimate
column in the summary above is the
regression parameter \(\beta_i\) of the
Cox model.
The estimate
column quantifies the
effect size (the impact) that the covariate has on the patient’s
survival time.
The expression is \(exp(\beta_i)\)
is the hazard ratio – this is the blah
column of the
summary above.
So for example, we obtained a regression parameter \(\beta_1 = 0.9152\) for the diagnosisLG
glioma vs other type diagnosis. The hazard ratio for this covariate is
\(HR = exp(\beta_1) = 2.4968\).
A HR > 1 indicates increased hazard of death.
Therefore, we would say that patients diagnosed with the
LG glioma
have a 2.4968 times increased hazard of
death compared to other patients. The p-value associated with this
regression parameter is \(p=0.15161\),
which indicates that the difference is not significant.
LS0tDQp0aXRsZTogJ0JyYWluIENhbmNlciBzdXJ2aXZhbCBhbmFseXNpcycNCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjc3M6IHN0eWxlXzcuY3NzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIGhpZ2hsaWdodDogYnJlZXplZGFyaw0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNhY2hlID0gVFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgZWNobyA9IFRSVUUsIA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy5wYXRoID0gInN0YXRpYyIsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLmhlaWdodD02LCANCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSAxLjc3Nzc3Nyo2LA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy5hbGlnbj0nY2VudGVyJywNCiAgICAgICAgICAgICAgICAgICAgICB0aWR5ID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSwgDQogICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gVFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgcHJvbXB0ID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgICAgICAgIGNyb3AgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSAiIz4iLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlID0gVFJVRSkNCmtuaXRyOjpvcHRzX2tuaXQkc2V0KHdpZHRoID0gNjApDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVzaGFwZTIpDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoYmFzZV9zaXplID0gMTYpKQ0KbWFrZV9sYXRleF9kZWNvcmF0b3IgPC0gZnVuY3Rpb24ob3V0cHV0LCBvdGhlcndpc2UpIHsNCiAgZnVuY3Rpb24oKSB7DQogICAgICBpZiAoa25pdHI6Ojppc19sYXRleF9vdXRwdXQoKSkgb3V0cHV0IGVsc2Ugb3RoZXJ3aXNlDQogIH0NCn0NCmluc2VydF9wYXVzZSA8LSBtYWtlX2xhdGV4X2RlY29yYXRvcigiLiAuIC4iLCAiXG4iKQ0KaW5zZXJ0X3NsaWRlX2JyZWFrIDwtIG1ha2VfbGF0ZXhfZGVjb3JhdG9yKCItLS0tIiwgIlxuIikNCmluc2VydF9pbmNfYnVsbGV0IDwtIG1ha2VfbGF0ZXhfZGVjb3JhdG9yKCI+ICoiLCAiKiIpDQppbnNlcnRfaHRtbF9tYXRoIDwtIG1ha2VfbGF0ZXhfZGVjb3JhdG9yKCIiLCAiJCQiKQ0KYGBgDQoNCg0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KQnJhaW4gQ2FuY2VycyBpbmNsdWRlIHByaW1hcnkgYnJhaW4gdHVtb3VycyB3aGljaCBzdGFydHMgaW4gdGhlIGJyYWluIGFuZCBhbG1vc3QgbmV2ZXIgc3ByZWFkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBib2R5IGFuZCBzZWNvbmRhcnkgdHVtb3VycyB3aGljaCBhcmUgY2F1c2VkIGJ5IGNhbmNlcnMgdGhhdCBiZWdhbiBpbiBhbm90aGVyIHBhcnQgb2YgdGhlIGJvZHkgLg0KDQo+VGhlcmUgYXJlIG1vcmUgdGhhbiA0MCBtYWpvciB0eXBlcyBvZiBicmFpbiB0dW1vdXJzLCB3aGljaCBhcmUgZ3JvdXBlZCBpbnRvIHR3byBtYWluIHR5cGVzOg0KDQorIGJlbmlnbiAtIHNsb3ctZ3Jvd2luZyBhbmQgdW5saWtlbHkgdG8gc3ByZWFkLiBDb21tb24gdHlwZXMgYXJlIG1lbmluZ2lvbWFzLCBuZXVyb21hcywgcGl0dWl0YXJ5IHR1bW91cnMgYW5kIGNyYW5pb3BoYXJ5bmdpb21hcy4NCisgbWFsaWduYW50IC0gY2FuY2Vyb3VzIGFuZCBhYmxlIHRvIHNwcmVhZCBpbnRvIG90aGVyIHBhcnRzIG9mIHRoZSBicmFpbiBvciBzcGluYWwgY29yZC4gQ29tbW9uIHR5cGVzIGluY2x1ZGUgYXN0cm9jeXRvbWFzLCBvbGlnb2RlbmRyb2dsaW9tYXMsIGdsaW9ibGFzdG9tYXMgYW5kIG1peGVkIGdsaW9tYXMuDQoNCj4gSXQgaXMgZXN0aW1hdGVkIHRoYXQgbW9yZSB0aGFuIDEsOTAwIHBlb3BsZSB3ZXJlIGRpYWdub3NlZCB3aXRoIGJyYWluIGNhbmNlciBpbiAyMDIzLiBUaGUgYXZlcmFnZSBhZ2UgYXQgZGlhZ25vc2lzIGlzIDU5IHllYXJzIG9sZC4NCg0KIyMjIEJyYWluIGNhbmNlciBzaWducyBhbmQgc3ltcHRvbXMNCg0KSGVhZGFjaGVzIGFyZSBvZnRlbiB0aGUgZmlyc3Qgc3ltcHRvbSBvZiBhIGJyYWluIHR1bW91ci4gVGhlIGhlYWRhY2hlcyBjYW4gYmUgbWlsZCwgc2V2ZXJlLCBwZXJzaXN0ZW50LCBvciBjb21lIGFuZCBnby4gQSBoZWFkYWNoZSBpc24ndCBhbHdheXMgYSBicmFpbiB0dW1vdXIgYnV0IGlmIHlvdSdyZSB3b3JyaWVkLCBiZSBzdXJlIHRvIHNlZSB5b3VyIEdQLg0KDQojIyMjIE90aGVyIHN5bXB0b21zIGluY2x1ZGU6DQoNCi0gW3hdIHNlaXp1cmVzOiBzZXZlcmUgKGUuZy4gYSBjb252dWxzaW9uKSBvciBtaWxkIChhIGZsZWV0aW5nIGRpc3R1cmJhbmNlIG9mIGF3YXJlbmVzcywgc2Vuc2F0aW9uIG9yIGplcmtpbmcgbXVzY2xlcykgd2Vha25lc3Mgb3IgcGFyYWx5c2lzIGluIHBhcnQgb2YgdGhlIGJvZHkNCi0gW3hdIGxvc3Mgb2YgYmFsYW5jZQ0KLSBbeF0gZ2VuZXJhbCBpcnJpdGFiaWxpdHksIGRyb3dzaW5lc3Mgb3IgYSBjaGFuZ2UgaW4gcGVyc29uYWxpdHkgbmF1c2VhIGFuZCB2b21pdGluZw0KLSBbeF0gZGlzdHVyYmVkIHZpc2lvbiwgaGVhcmluZywgc21lbGwgb3IgdGFzdGUuDQoNCg0KIyMgUmVmZXJlbmNlcw0KDQorIFVuZGVyc3RhbmRpbmcgQnJhaW4gVHVtb3VycywgQ2FuY2VyIENvdW5jaWwgQXVzdHJhbGlh4oCvwqkyMDIwLuKAr0xhc3QgbWVkaWNhbCByZXZpZXcgb2Ygc291cmNlIGJvb2tsZXQ6IE1heSAyMDIwLiANCisgQXVzdHJhbGlhbiBJbnN0aXR1dGUgb2YgSGVhbHRoIGFuZCBXZWxmYXJlLiBDYW5jZXIgZGF0YSBpbiBBdXN0cmFsaWEgW0ludGVybmV0XS4gQ2FuYmVycmE6IEF1c3RyYWxpYW4gSW5zdGl0dXRlIG9mIEhlYWx0aCBhbmQgV2VsZmFyZSwgMjAyMyBbY2l0ZWQgMjAyMyBTZXB0IDA0XS4gQXZhaWxhYmxlIGZyb206IGh0dHBzOi8vd3d3LmFpaHcuZ292LmF1L3JlcG9ydHMvY2FuY2VyL2NhbmNlci1kYXRhLWluLWF1c3RyYWxpYQ0KDQoNCiMjIE9iamVjdGl2ZXMgb2YgdGhlIHN0dWR5DQoNCisgZGV0ZXJtaW5lIGZhY3RvcnMgdGhhdCBkZXRlcm1pbmUgbW9ydGFsaXR5IG9mIGJyYWluIGNhbmNlciBwYXRpZW50cw0KKyBjb21wYXJlIHN1cnZpdmFsIHRpbWVzIG9mIGNlcnRhaW4gZ3JvdXBzIG9mIGJyZWFzdCBjYW5jZXIgcGF0aWVudHMNCisgZGV0ZXJtaW5lIHRoZSBleHRlbmQgdG8gd2hpY2ggZGlhZ25vc2lzIGFmZmVjdHMgc3Vydml2YWwgb2YgcGF0aWVudHMNCisgbGVhcm4gbW9yZSBhYm91dCB1c2luZyBSIGZvciBiaW9zdGF0aXN0aWNhbCBzdHVkaWVzIGFuZCBjbGluaWNhbCByZXNlYXJjaA0KDQojIyMgTWV0aG9kb2xvZ3kNCg0KTXkgcmVzZWFyY2ggYWltcyBhdCBwYXRpZW50c+KAmSBicmFpbiBjYW5jZXIgc3Vydml2YWwgYW5hbHlzaXMgLiBJbiB0aGUgYW5hbHlzaXMgSSBkaWQgYSBkZXRhaWxlZCByZXNlYXJjaCBvbiB0aGUgdmFyaWFibGVzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgcGF0aWVudHMgZ2V0IG92ZXIgYSBkaXNlYXNlIG9yIHN1cnJlbmRlciBpbiBhIGNlcnRhaW4gZHVyYXRpb24gdGltZS4gVGh1cyBJIHVzZWQgYSAgbm9uLXBhcmFtZXRyaWMgc3RhdGlzdGljIGVzdGltYXRvciB0byBjcmVhdGUgYSBLYXBsYW4tTWVpZXIgU3Vydml2YWwgbW9kZWwgdG8gbWVhc3VyZSB0aGUgc3Vydml2YWwgZnVuY3Rpb24gZnJvbSBsaWZldGltZSBkdXJhdGlvbiBkYXRhLiBXZSBmaXQgYSBjb3ggcHJvcG9ydGlvbmFsIG1vZGVsIGFuZCBMb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVsLiANCg0KDQojIyBCcmFpbiBDYW5jZXIgRGF0YQ0KDQpBIGRhdGEgZnJhbWUgd2l0aCA4OCBvYnNlcnZhdGlvbnMgYW5kIDggdmFyaWFibGVzOg0KDQotIFt4XSBzZXggICAgICAgOiBGYWN0b3Igd2l0aCBsZXZlbHMgIkZlbWFsZSIgYW5kICJNYWxlIg0KLSBbeF0gZGlhZ25vc2lzIDogRmFjdG9yIHdpdGggbGV2ZWxzICJNZW5pbmdpb21hIiwgIkxHIGdsaW9tYSIsICJIRyBnbGlvbWEiLCBhbmQgIk90aGVyIi4NCi0gW3hdIExvY2F0aW9uICA6IGZhY3RvciB3aXRoIGxldmVscyAiSW5mcmF0ZW50b3JpYWwiIGFuZCAiU3VwcmF0ZW50b3JpYWwiLg0KLSBbeF0ga2kgICAgICAgIDogS2Fybm9mc2t5IGluZGV4Lg0KLSBbeF0gZ3R2ICAgICAgIDogR3Jvc3MgdHVtb3Igdm9sdW1lLCBpbiBjdWJpYyBjZW50aW1ldGVycy4NCi0gW3hdIHN0ZXJlbyAgICA6IFN0ZXJlb3RhY3RpYyBtZXRob2QgZmFjdG9yIHdpdGggbGV2ZWxzICJTUlMiIGFuZCAiU1JUIi4NCi0gW3hdIHN0YXR1cyAgICA6IFdoZXRoZXIgdGhlIHBhdGllbnQgaXMgZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzdHVkeTogMD1ObywgMT15ZXMuDQotIFt4XSB0aW1lICAgICAgOiBTdXJ2aXZhbCB0aW1lLCBpbiBtb250aHMuDQoNCg0KIyMgU2V0dXANCg0KYGBge3J9DQpsaWJyYXJ5KHBhY21hbikNCnBfbG9hZCh0aWR5dmVyc2UsIHRpZHltb2RlbHMsIElTTFIyLCBzdXJ2aXZhbCwgY2Vuc29yZWQsZGxvb2tyLHB1Ymgsc2pQbG90LGNvbXBhcmVHcm91cHMsc3Vydm1pbmVyKQ0KDQpgYGANCg0KIyMjIHRha2UgYSBsb29rIGF0IHRoZSBkYXRhc2V0DQoNCmBgYHtyLGV2YWw9RkFMU0V9DQpCcmFpbkNhbmNlcjwtcmVhZHI6OnJlYWRfY3N2KCJOQ1VfYnJhaW5jYW5jZXIuY3N2IikNCmBgYA0KDQoNCmBgYHtyfQ0Kc2tpbXI6OnNraW0oQnJhaW5DYW5jZXIpDQpgYGANCg0KDQojIyBEYXRhIHdyYW5nbGluZw0KYGBge3J9DQpkYXRhPC1CcmFpbkNhbmNlciB8PiANCiAgbXV0YXRlKGJyYWluX3N0YXR1cz1pZmVsc2Uoc3RhdHVzPT0xLCJkZWFkIiwiYWxpdmUiKSkNCiMjIGNoZWNrIG1pc3NpbmcgdmFsdWVzDQpjb2xTdW1zKGlzLm5hKGRhdGEpKQ0KYGBgICAgIA0KKyB0aGVyZSBpcyBvbmx5IG9uZSBtaXNzaW5nIHZhbHVlDQoNCmBgYHtyfQ0KIyMgcmVtb3ZlIHRoZSBtaXNzaW5nIHZhbHVlcw0KY2FzZXM8LWNvbXBsZXRlLmNhc2VzKGRhdGEpIA0KZGF0YTwtZGF0YVtjYXNlcyxdDQpgYGANCg0KIyMgRXhwbGFuYXRvcnkgZGF0YSBBbmFseXNpcyhFREEpDQoNCiMjIyBkaXN0cmlidXRpb24gb2YgbnVtZXJpYyB2YXJpYWJsZXMNCg0KYGBge3J9DQojIEhpc3RvZ3JhbSBvZiBhbGwgbnVtZXJpYyB2YXJpYWJsZXMNCmRhdGEgJT4lDQogIGtlZXAoaXMubnVtZXJpYykgJT4lIA0KICBnYXRoZXIoKSAlPiUgDQogIGdncGxvdChhZXModmFsdWUpKSArDQogIGZhY2V0X3dyYXAofiBrZXksIHNjYWxlcyA9ICJmcmVlIikgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW5zPTMwLGZpbGw9dHZ0aGVtZXM6OmF2YXRhcl9wYWwoKSgxKSkrDQogIGdndGhlbWVzOjp0aGVtZV93c2ooKQ0KYGBgDQoNCjxkaXYgY2xhc3MgPSAiYmx1ZSI+DQotICoqVGltZSBhbmQgZ3R2IGFyZSBnZW5lcmFsbHkgcmlnaHQgc2tld2VkKiogDQo8L2Rpdj4NCg0KIyMgQ29ycmVsYXRpb25zDQpgYGB7cn0NCiMjIHNlbGVjdCBvbmx5IG51bWVyaWMgdmFsdWVzDQpjb3JfZGF0YTwtZGF0YSAlPiUNCiAga2VlcChpcy5udW1lcmljKQ0KIyMgY3JlYXRlIGEgY29ycmVsYXRpb24gbWF0cml4DQpjb3JsPC1jb3IoY29yX2RhdGEpDQpjb3JycGxvdDo6Y29ycnBsb3QoY29ybCxtZXRob2Q9ImNvbG9yIixhZGRDb2VmLmNvbCA9ICJibGFjayIpDQpgYGANCg0KDQoNCg0KKyBzdGF0dXMgaXMgcmVhbGx5IG5vdCBzdXBwb3NlZCB0byBiZSBudW1lcmljIGJ1dCByYXRoZXIgYSBmYWN0b3IgdmFyaWFibGUNCisgdGltZSBhbmQgZ3Jvc3MgdHVtb3Igdm9sdW1lIGFyZSBhbGwgcG9zaXRpdmVseSBza2V3ZWQNCisga2Fybm9mc2t5IGluZGV4IGlzIGFzIGdvb2QgYXMgYmVpbmcgYSBmYWN0b3Igc28gaSB3aWxsIGZ1cnRoZXIgY2F0ZWdvcml6ZSB0aGUgZGF0YQ0KKyB0aGUgY29ycmVsYXRpb25zIGFyZSBub3QgcmVhbGx5IHNpZ25pZmljYW50IGdpdmVuIHRoZSB2YXJpYWJsZXMgYXQgaGFuZA0KDQoNCg0KIyMgZnVydGhlciBtYW5pcHVsYXRpb24NCg0KYGBge3J9DQpkYXRhIDwtIGRhdGEgfD4gDQogIG11dGF0ZShrYW5faW5kZXggPSBpZmVsc2Uoa2k+PTgwLCJpbmRleD43OSIsImluZGV4PDgwIikpDQoNCmRhdGEgfD4gDQogIGphbml0b3I6OnRhYnlsKGthbl9pbmRleCkNCmBgYA0KDQojIyBjb21wYXJpbmcgZGVwZW5kZW50IHZhcmlhYmxlIHdpdGggbnVtZXJpYyB2YXJpYWJsZXMNCg0KYGBge3J9DQpzdWJzZXQgPC0gZGF0YSB8Pg0KICBkcGx5cjo6c2VsZWN0KGd0dix0aW1lLGtpLHN0YXR1cykNCg0KIyBCcmluZyBpbiBleHRlcm5hbCBmaWxlIGZvciB2aXN1YWxpc2F0aW9ucw0Kc291cmNlKCdmdW5jdGlvbnMvdmlzdWFsaXNhdGlvbnMuUicpDQoNCiMgVXNlIHBsb3QgZnVuY3Rpb24NCnBsb3QgPC0gaGlzdG9wbG90dGVyKHN1YnNldCwgc3RhdHVzLCANCiAgICAgICAgICAgICAgICAgICAgIGNoYXJ0X3hfYXhpc19sYmwgPSAic3Vydml2YWwgc3RhdHVzIiwgDQogICAgICAgICAgICAgICAgICAgICBjaGFydF95X2F4aXNfbGJsID0gJ01lYXN1cmVzJywNCiAgICAgICAgICAgICAgICAgICAgIGJveHBsb3RfY29sb3IgPSAnbmF2eScsIA0KICAgICAgICAgICAgICAgICAgICAgYm94cGxvdF9maWxsID0gdHZ0aGVtZXM6OmF2YXRhcl9wYWwoKSgxKSwgDQogICAgICAgICAgICAgICAgICAgICBib3hfZmlsbF90cmFuc3BhcmVuY3kgPSAwLjIpIA0KDQojIEFkZCBleHRyYXMgdG8gcGxvdA0KcGxvdCArIA0KICBnZ3RoZW1lczo6dGhlbWVfZml2ZXRoaXJ0eWVpZ2h0KCkgKw0KICB0dnRoZW1lczo6c2NhbGVfY29sb3JfYXZhdGFyKCkgDQogDQoNCmBgYA0KDQojIyBjYXRlZ29yaWNhbCBkYXRhDQoNCmBgYHtyfQ0KaXZfcmF0ZXMgPC0gZGF0YSB8Pg0KICBkcGx5cjo6bXV0YXRlKHN0YXR1cyA9IGlmZWxzZShzdGF0dXM9PTEsInllcyIsIm5vIikpIHw+DQogIHNlbGVjdChrYW5faW5kZXgsbG9jLHN0ZXJlbyxzdGF0dXMpIHw+IA0KICBnYXRoZXIoKSB8PiANCiAgZ3JvdXBfYnkoa2V5LHZhbHVlKSB8Pg0KICBzdW1tYXJpemUoY291bnQgPSBuKCkpIHw+IA0KICBtdXRhdGUocHJvcCA9IGNvdW50L3N1bShjb3VudCkpIHw+DQogIHVuZ3JvdXAoKSANCg0KcGxvdDwtaXZfcmF0ZXMgfD4NCiAgZ2dwbG90KGFlcyhmaWxsPWtleSwgeT1wcm9wLCB4PXZhbHVlKSkgKyANCiAgZ2VvbV9jb2woY29sb3I9ImJsYWNrIix3aWR0aCA9IDAuNSkrIA0KICBmYWNldF93cmFwKH5rZXksc2NhbGVzPSJmcmVlIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgDQogIGdlb21fbGFiZWwoYWVzKGxhYmVsPXNjYWxlczo6cGVyY2VudChwcm9wKSksIGNvbG9yPSJ3aGl0ZSIpICsgDQogIGxhYnMoDQogICAgdGl0bGUgPSAic3Vydml2YWwgcmF0aW8iLA0KICAgIHN1YnRpdGxlID0gIkJyYWluIENhbmNlciBBbmFseXNpcyIsDQogICAgeSA9ICJwcm9wb3J0aW9uKCUpIiwgDQogICAgeCA9ICIiLA0KICAgIGZpbGw9InN0YXR1cyIsDQogICAgY2FwdGlvbj0iQi5OY3ViZTo6RGF0YSBlbnRodXNpYXN0IikgKyANCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkrDQogIHR2dGhlbWVzOjpzY2FsZV9maWxsX2tpbVBvc3NpYmxlKCkrDQogZ2d0aGVtZXM6OnRoZW1lX2ZpdmV0aGlydHllaWdodCgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ25vbmUnKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkgDQpwbG90DQpgYGANCg0KDQojIyMgbW9ydGFsaXR5IFJhdGUNCg0KYGBge3J9DQpkYXRhfD4NCiAgZHBseXI6Omdyb3VwX2J5KGJyYWluX3N0YXR1cyl8PiANCiAgZHBseXI6OnN1bW1hcml6ZShjb3VudD1uKCksDQogICAgICAgICAgICAgbWVhbj1tZWFuKGd0diwgbmEucm0gPSBUKSwNCiAgICAgICAgICAgICBzdGRfZGV2PXNkKGd0diwgbmEucm0gPSBUKSwNCiAgICAgICAgICAgICBtZWRpYW49bWVkaWFuKGd0diwgbmEucm0gPSBUKSwgDQogICAgICAgICAgICAgbWluPW1pbihndHYsIG5hLnJtID0gVCksDQogICAgICAgICAgICAgbWF4PW1heChndHYsIG5hLnJtID0gVCkpfD4gDQogdGliYmxlOjpjb2x1bW5fdG9fcm93bmFtZXModmFyID0gImJyYWluX3N0YXR1cyIpIHw+IA0KIGJhc2U6OmFzLm1hdHJpeCgpDQoNCiNDYWxjdWxhdGUgbW9ydGFsaXR5IHJhdGUNCnByaW50KHBhc3RlKCdNb3J0YWxpdHkgcmF0ZSAoJSkgaXMgJyxyb3VuZCgzNS8oMzUrNTMpKjEwMCxkaWdpdHM9MikpKQ0KYGBgDQoNCjxkaXYgY2xhc3MgPSAiYmx1ZSI+DQotICoqTW9ydGFsaXR5IHJhdGUgaXMgYXBwcm94aW1hdGVseTogNDAlKiogDQo8L2Rpdj4NCisgd2UgY2FuIHZpZXcgdGhpcyBpbiBhIHBsb3Qgb3IgY2hhcnQNCg0KYGBge3IgLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShleHRyYWZvbnQpDQpsb2FkZm9udHMocXVpZXQ9VFJVRSkNCg0KaXZfcmF0ZXMgPC0gZGF0YSB8Pg0KICBncm91cF9ieShicmFpbl9zdGF0dXMpIHw+DQogIHN1bW1hcml6ZShjb3VudCA9IG4oKSkgfD4gDQogIG11dGF0ZShwcm9wID0gY291bnQvc3VtKGNvdW50KSkgfD4NCiAgdW5ncm91cCgpIA0KDQpwbG90PC1pdl9yYXRlcyB8Pg0KICBnZ3Bsb3QoYWVzKHg9YnJhaW5fc3RhdHVzLCB5PXByb3AsIGZpbGw9YnJhaW5fc3RhdHVzKSkgKyANCiAgZ2VvbV9jb2woY29sb3I9ImJsYWNrIix3aWR0aCA9IDAuNSkrIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgDQogIGdlb21fbGFiZWwoYWVzKGxhYmVsPXNjYWxlczo6cGVyY2VudChwcm9wKSksIGNvbG9yPSJ3aGl0ZSIpICsgDQogIGxhYnMoDQogICAgdGl0bGUgPSAibW9ydGFsaXR5IHJhdGlvIiwNCiAgICBzdWJ0aXRsZSA9ICJCcmFpbiBDYW5jZXIgQW5hbHlzaXMiLA0KICAgIHkgPSAicHJvcG9ydGlvbiglKSIsIA0KICAgIHggPSAiIiwNCiAgICBmaWxsPSJzdGF0dXMiLA0KICAgIGNhcHRpb249IkIuTmN1YmU6OkRhdGEgZW50aHVzaWFzdCIpICsgDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpKyANCmdlb21faGxpbmUoeWludGVyY2VwdCA9IChzdW0oZGF0YSRzdGF0dXMpL25yb3coZGF0YSkpLCBjb2wgPSAid2hpdGUiLCBsdHkgPSAyKSArDQogIHR2dGhlbWVzOjpzY2FsZV9maWxsX2tpbVBvc3NpYmxlKCkrDQogIGdndGhlbWVzOjp0aGVtZV9maXZldGhpcnR5ZWlnaHQoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdyaWdodCcpDQpwbG90DQpgYGANCg0KDQojIyBDYW5jZXIgb3V0Y29tZSBieSBkaWFnbm9zaXMgdHlwZQ0KDQpgYGB7cn0NCmdncGxvdChkYXRhKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIGFlcyh4PWJyYWluX3N0YXR1cykgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBhZXMoZmlsbD1kaWFnbm9zaXMpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBnZW9tX2JhcihhZXMoIHk9Li5jb3VudC4uL3RhcHBseSguLmNvdW50Li4sIC4ueC4uICxzdW0pWy4ueC4uXSksICAgDQogICAgICBwb3NpdGlvbj0iZG9kZ2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICBjb2xvcj0iYmxhY2siKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIHR2dGhlbWVzOjpzY2FsZV9jb2xvcl9raW1Qb3NzaWJsZSgpICsgICANCiAgICB0dnRoZW1lczo6c2NhbGVfZmlsbF9hdmF0YXIoKSAgKw0KICBnZW9tX3RleHQoYWVzKCB5PS4uY291bnQuLi90YXBwbHkoLi5jb3VudC4uLCAuLnguLiAsc3VtKVsuLnguLl0sICAgICAgICAgICANCiAgICAgbGFiZWw9c2NhbGVzOjpwZXJjZW50KC4uY291bnQuLi90YXBwbHkoLi5jb3VudC4uLCAuLnguLiAsc3VtKVsuLnguLl0pICksICAgIA0KICAgICBzdGF0PSJjb3VudCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDEuMCksICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICB2anVzdD0tMC41LCANCiAgICAgc2l6ZT0zKSArIA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoMCwxMDApKSArICAgICAgICAgICAgICAgICAgICANCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKyAgICAgDQogIA0KIGdndGl0bGUoIkNhbmNlciBPdXRjb21lLCBkaWFnbm9zaXMgdHlwZSIpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aXRsZSBhbmQgYXhpcyBsYWJlbHM9DQogICAgIHhsYWIoIkRpYWdub3NpcyIpICsgIA0KICAgICB5bGFiKCIlIG9mIEdyb3VwIikgKyANCiAgdGhlbWVfbWluaW1hbCgpICAgDQpgYGANCg0KKyBNYW55IG9mIHRob3NlIHdobyBkaWVkIHdoZXJlIGRpYWdub3NlZCB3aXRoIGBIRyBnbGlvbWFgDQorIGxldHMgc2VlIHRoZSB2YWx1ZXMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZQ0KDQoNCg0KYGBge3J9DQpzanQueHRhYihkYXRhJGRpYWdub3NpcyxkYXRhJGJyYWluX3N0YXR1cywgICAgICANCiAgICAgICAgIHNob3cucm93LnByYz1UUlVFLCAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgc2hvdy5zdW1tYXJ5PUZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgIHRpdGxlPSJDcm9zcyBUYWIgRGlhZ25vc2lzIHggQ2FuY2VyIikgDQpgYGANCg0KIyMgbW9ydGFsaXR5IHJhdGUgYnkgc2V4DQojIyMgQ3JlYXRlIGEgY3VzdG9taXNlZCBmdW5jdGlvbiBmb3Igc3VtbWFyaXNpbmcgIGNhdGVnb3JpY2FsIGRhdGEgcGVyIHN0YXR1cw0KDQpgYGB7cn0NCnN1bW1hcml6ZV9zdGF0dXMgPC0gZnVuY3Rpb24odGJsKXt0YmwgJT4lIA0KICBzdW1tYXJpc2Uobl9kaWVkID0gc3VtKGJyYWluX3N0YXR1cyA9PSAieWVzIiksDQogICAgICAgICAgICBuX3RvdGFsID0gbigpKSAlPiUNCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKHBjdF9kaWVkID0gbl9kaWVkIC8gbl90b3RhbCkgJT4lIA0KICBhcnJhbmdlKGRlc2MocGN0X2RpZWQpKSAlPiUgDQogIG11dGF0ZShsb3cgPSBxYmV0YSgwLjAyNSwgbl9kaWVkICsgNSwgbl90b3RhbCAtIG5fZGllZCArIC41KSwNCiAgICAgICAgIGhpZ2ggPSBxYmV0YSgwLjk3NSwgbl9kaWVkICsgNSwgbl90b3RhbCAtIG5fZGllZCArIC41KSwNCiAgICAgICAgIHBjdCA9IG5fdG90YWwgLyBzdW0obl90b3RhbCksDQogICAgICAgICBwZXJjZW50YWdlPXNjYWxlczo6cGVyY2VudChwY3RfZGllZCkpDQogIH0gDQpgYGANCg0KIyMjIG1vcnRhbGl0eSByYXRlIHN1bW1hcnkgcGVyIHNleA0KDQpgYGB7cn0NCmRhdGEgfD4gDQogIGdyb3VwX2J5KHNleCkgfD4gDQogIHN1bW1hcml6ZV9zdGF0dXMoKQ0KYGBgDQoNCg0KKyBmcm9tIHRoZSBkYXRhc2V0ICwgJFxmcmFjezIwfXs0M30kIG1lbiBkaWVkIHdoaWxlIHRoZSBvdGhlciAxNSB3aGVyZSB3b21hbiB3aG8gZGllZA0KKyB3ZSBjYW4gcHJlc2VudCB0aGVzZSBtb3JlIHZpc3VhbGx5IHdpdGggdGhlIGdyYXBocyBiZWxvdw0KDQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0NCml2X3JhdGVzIDwtIGRhdGEgfD4gDQogIGdyb3VwX2J5KGJyYWluX3N0YXR1cyxzZXgpIHw+DQogIHN1bW1hcml6ZShjb3VudCA9IG4oKSkgfD4gDQogIG11dGF0ZShwcm9wID0gY291bnQvc3VtKGNvdW50KSkgfD4NCiAgdW5ncm91cCgpIA0KDQpwbG90PC1pdl9yYXRlcyB8Pg0KICBnZ3Bsb3QoYWVzKGZpbGw9YnJhaW5fc3RhdHVzLCB5PXByb3AsIHg9c2V4KSkgKyANCiAgZ2VvbV9jb2woY29sb3I9ImJsYWNrIix3aWR0aCA9IDAuNSxwb3NpdGlvbj0iZG9kZ2UiKSsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyANCiAgZ2VvbV9sYWJlbChhZXMobGFiZWw9c2NhbGVzOjpwZXJjZW50KHByb3ApKSwgY29sb3I9IndoaXRlIikgKyANCiAgbGFicygNCiAgICB0aXRsZSA9ICJNb3J0YWxpdHkgcmF0aW8iLA0KICAgIHN1YnRpdGxlID0gIkJyYWluIENhbmNlciBBbmFseXNpcyIsDQogICAgeSA9ICJwcm9wb3J0aW9uKCUpIiwgDQogICAgeCA9ICIiLA0KICAgIGZpbGw9InN0YXR1cyIsDQogICAgY2FwdGlvbj0iQi5OY3ViZTo6RGF0YSBlbnRodXNpYXN0IikgKyANCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkrIA0KZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gKHN1bShkYXRhJHN0YXR1cykvbnJvdyhkYXRhKSksIA0KICAgICAgICAgICBjb2wgPSAid2hpdGUiLCBsdHkgPSAyKSArDQogIHR2dGhlbWVzOjpzY2FsZV9maWxsX2tpbVBvc3NpYmxlKCkrDQogIHR2dGhlbWVzOjp0aGVtZV90aGVMYXN0QWlyYmVuZGVyKHRpdGxlLmZvbnQ9IlNsYXllciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuZm9udCA9ICJTbGF5ZXIiKSsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ3JpZ2h0JykNCnBsb3QNCmBgYA0KDQoNCisgbW9ydGFsaXR5IGlzIGdyZWF0ZXIgaW4gbWFsZXMgdGhhbiBpdCBpcyBpbiBmZW1hbGVzDQorIHRoZSB3aGl0ZSBkYXNoZWQgbGluZSBpbmRpY2F0ZSB0aGUgb3ZlcmFsIG1vcnRhbGl0eSByYXRlDQoNCg0KIyMgT3V0Y29tZSBieSBkaWFnbm9zaXMgZmFjZXRlZCBieSBzZXgNCmBgYHtyfQ0KZ2dwbG90KGRhdGEpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSB0byB1c2UgDQogIGFlcyh4PWJyYWluX3N0YXR1cykgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHggPSBwcmVkaWN0b3IgIChmYWN0b3IpIA0KICBhZXMoZmlsbD1kaWFnbm9zaXMpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlsbCA9IG91dGNvbWUgKGZhY3RvcikgIA0KICBnZW9tX2JhciggcG9zaXRpb249ImRvZGdlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaWRlLWJ5LXNpZGUgIA0KICAgICAgIGNvbG9yPSJibGFjayIpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hvb3NlIGNvbG9yIG9mIGJhciBib3JkZXJzIA0KICAgIHR2dGhlbWVzOjpzY2FsZV9jb2xvcl9raW1Qb3NzaWJsZSgpICsgICAgICAgIyBjaG9vc2UgY29sb3JzIG9mIGJhcnMgDQogICAgdHZ0aGVtZXM6OnNjYWxlX2ZpbGxfYXZhdGFyKCkgICsgICAjIGJhcnMgDQogIGdlb21fdGV4dChhZXMobGFiZWw9YWZ0ZXJfc3RhdChjb3VudCkpLCAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCAgDQogICAgIHN0YXQ9J2NvdW50JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCANCiAgICAgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMS4wKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcXVpcmVkIGZvciBjZW50ZXJpbmcgIA0KICAgICB2anVzdD0gLTAuNSwgDQogICAgIHNpemU9MykgKyANCiAgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gcmV2KSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXZlcnNlIG9yZGVyIHRvIDAgY3VwcyBmaXJzdCANCiAgICMgRk9SQ0UgeS1heGlzIHRpY2tzIA0KICBmYWNldF9ncmlkKH4gc2V4KSAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN0cmF0YSBpbiAxIHJvdyANCiAgZ2d0aXRsZSgiQ2FuY2VyIE91dGNvbWUsIGRpYWdub3NpcyB0eXBlXG5TdHJhdGlmaWVkIikgKyAgICAgICAgICAgIyB0aXRsZSBhbmQgYXhpcyBsYWJlbHMgDQogIHhsYWIoIiIpICsgIA0KICB5bGFiKCJDb3VudCIpICsgDQogIHRoZW1lX2J3KCkgKyANCiAgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSkgKyANCiAgdGhlbWUobGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KGNvbG9yPSJibGFjayIsIHNpemU9NikpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiKSANCmBgYA0KKyBNZW5pbmdpb21hIGFmZmVjdHMgbW9yZSB3b21lbiB0aGFuIGl0IGFmZmVjdHMgbWVuLg0KKyBib3RoIG1lbiBhbmQgd29tZW4gZGlhZ25vc2VkIHdpdGggSEcgZ2xpb21hIGFyZSBtb3JlIGxpa2VseSB0byBkaWUNCg0KIyMgaXMgdGhlcmUgYW55IGFzc29jaWF0aW9uIGJldHdlZW4gZGlhZ25vc2lzIGFuZCBjYW5jZXIgb3V0Y29tZQ0KDQpgYGB7cn0NCmRhdGEgJT4lIGNvbnRpbmdlbmN5KGJyYWluX3N0YXR1cyB+IGRpYWdub3NpcykgDQpgYGANCg0KDQoqKkNvbW1lbnRzKioNCisgdGhlIG91dGNvbWUgaXMgYSByZXN1bHQgb2YgYSBgZmlzaGVyJ3MgZXhhY3QgdGVzdGAgZm9yIGFzc29jaWF0aW9uDQorIHRoZSBwbGltZW5hcnkgYW5hbHlzaXMgc3VnZ2VzdHMgdGhhdCBhdCA1XCUgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlICxkaWFnbm9zaXMoIE1lbmluZ2lvbWEgLCBMRyBnbGlvbWEgLEhHIGdsaW9tYSBhbmQgb3RoZXIgZGlhZ25vc3RpY3MpIGFuZCBzdGVyZW8gdmFyaWFibGUgYXJlIHNpZ25pZmljYW50bHkgYXNzb2NpYXRlZCB3aXRoIHN1cnZpdmFsIG9mIHBhdGllbnRzLg0KDQoNCiMjIyBCaXZhcmF0ZSByZWxhdGlvbnNoaXBzIGZvciBhbGwgdmFyaWFibGVzDQoNCmBgYHtyfQ0KcmVzdWx0cyA8LSBjb21wYXJlR3JvdXBzKGJyYWluX3N0YXR1cyB+IGRpYWdub3NpcytraStzZXgrbG9jK3N0ZXJlbytndHYsIGRhdGEgPSBkYXRhKSANCnJlc3VsdHMNCmBgYA0KDQorIHRoZSBhYm92ZSByZXN1bHRzIHNob3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjYW5jZXIgb3V0Y29tZSBhbmQgcGF0aWVudCBjaGFyYWN0ZXJpc3RpY3MNCisgdGhlIHAtdmFsdWVzIGNvcnJlc3BvbmQgdG8gYGNoaS1zcXVhcmVkIHRlc3RgIGZvciBjYXRlZ29yaWNhbCBkYXRhIGFuZCBgdC50ZXN0YCBmb3IgbnVtZXJpYyBkYXRhDQorIGRpYWdub3NpcyBhcyBtZW50aW9uZWQgaW4gcHJldmlvdXMgcmVzdWx0cyBpcyBhc3NvY2lhdGVkIHdpdGggY2FuY2VyIG91dGNvbWUuDQorIEdyb3NzIHR1bW9yIHZvbHVtZSBhbmQga2FucmZza3kgaW5kZXggaGF2ZSBwLXZhbHVlcyBsZXNzIHRoYW4gNSUgaW1wbHlpbmcgdGhlcmUgaXMgc2lnbmlmaWNhbnQgbWVhbiBkaWZmZXJlbmNlcyBmb3IgdGhlc2UgdmFsdWVzIHBlciBlYWNoIG91dGNvbWUgY2F0ZWdvcnkNCg0KDQpgYGB7cn0NCnJlYWR5dGFibGUgPC0gY3JlYXRlVGFibGUocmVzdWx0cywgc2hvdy5yYXRpbz1UUlVFLCBzaG93LnAub3ZlcmFsbCA9IEZBTFNFKSAgICAgICANCnByaW50KHJlYWR5dGFibGUsIGhlYWRlci5sYWJlbHMgPSBjKHAucmF0aW8gPSAicC12YWx1ZSIpKSAgICAgIA0KYGBgDQoNCg0KKyB0aGUgZXh0ZW5kZWQgb3V0cHV0IHNob3dzIG1vcmUgc2lnbmlmaWNhbnQgY2F0ZWdvcmllcyB0aGF0IGRldGVybWluZSBjYW5jZXIgb3V0Y29tZQ0KKyBMRyBnbGlvbWEgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2F0ZWdvcnkgYXNzb2NpYXRlZCB3aXRoIGNhbmNlciBvdXRjb21lIHNpbmNlIGl0cyBwLXZhbHVlIHZhbHVlIGlzIGBwPDAuMDAxYCB3aGljaCBpcyBsZXNzIHRoYW4gNSUNCisgdGhlIHNhbWUgYXBwbGllcyBmb3IgYHN0ZXJlbzpTUlRgDQoNCg0KIyMgZXh0ZW5kZWQgQW5hbHlzaXMNCg0KYGBge3J9DQpsaWJyYXJ5KGdsdWUpDQpiaW5kX2NvdW50ID0gZnVuY3Rpb24oeCl7DQogIGFzX3RpYmJsZSh4KSAlPiUgDQogIGFkZF9jb3VudCh2YWx1ZSkgJT4lIA0KICBtdXRhdGUodmFsdWUgPSBnbHVlKCJ7dmFsdWV9ICh7bn0pIikpICU+JQ0KICAgIHB1bGwodmFsdWUpDQogIA0KfQ0KYGBgDQoNCmBgYHtyfQ0KIyBTY2F0dGVyIHBsb3QNCmRhdGEgJT4lIA0KICBuYS5vbWl0KCkgJT4lIA0KICBncm91cF9ieShkaWFnbm9zaXMgPSBiaW5kX2NvdW50KGRpYWdub3NpcykpICU+JSANCiAgc3VtbWFyaXplX3N0YXR1cygpICU+JSANCiAgbXV0YXRlKGRpYWdub3NpcyA9IGZjdF9yZW9yZGVyKGRpYWdub3NpcywgcGN0X2RpZWQpKSAlPiUgDQogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBwY3RfZGllZCwgeSA9IGRpYWdub3NpcykpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHBjdCksIHNob3cubGVnZW5kID0gVCkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IGxvdywgeG1heCA9IGhpZ2gpLCBoZWlnaHQgPSAuMykgKw0KICBsYWJzKA0KICAgIHggPSAiUGVyY2VudGFnZSBvZiBwYXRpZW50cyBpbiBlYWNoIGNhdGVnb3J5IHdobyBkaWVkIiwNCiAgICB0aXRsZSA9ICJEaXN0cmlidXRpb24gb2Ygc3RhdHVzIGJ5IGRpYWdub3NpcyIsDQogICAgc2l6ZSA9ICIlcHJldmFsZW5jZSIsDQogICAgc3VidGl0bGUgPSAiIg0KICApICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpICsNCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KDQoNCkl0IGNhbiBhbHNvIGJlIG5vdGVkIHRoYXQgY3VtdWxhdGl2ZWx5LCBwZW9wbGUgd2l0aCAqKkxHIGdsaW9tYSoqIGFuZCAqKkhHIGdsaW9tYSoqICBoYWQgaGlnaCBjaGFuY2VzIG9mIGRlYXRoLg0KDQoNCg0KDQojIyBTdXJ2aXZhbCBBbmFseXNpcy4NCg0KYGBge3J9DQpmaXQgPC0gc3VydmZpdChTdXJ2KHRpbWUsIHN0YXR1cykgfiBzZXgsIGRhdGEgPSBkYXRhKQ0KIyBBY2Nlc3MgdG8gdGhlIHNvcnQgc3VtbWFyeSB0YWJsZQ0Kc3VtbWFyeShmaXQpJHRhYmxlDQoNCmdnc3VydnBsb3QoZml0LCBkYXRhID0gZGF0YSwNCiBzdXJ2Lm1lZGlhbi5saW5lID0gImh2IiwgIyBBZGQgbWVkaWFucyBzdXJ2aXZhbA0KDQogIyBDaGFuZ2UgbGVnZW5kczogdGl0bGUgJiBsYWJlbHMNCiBsZWdlbmQudGl0bGUgPSAiU2V4IiwNCiBsZWdlbmQubGFicyA9IGMoIk1hbGUiLCAiRmVtYWxlIiksDQogIyBBZGQgcC12YWx1ZSBhbmQgdGVydmFscw0KIHB2YWwgPSBUUlVFLA0KDQogY29uZi5pbnQgPSBUUlVFLA0KICMgQWRkIHJpc2sgdGFibGUNCiByaXNrLnRhYmxlID0gVFJVRSwNCiB0YWJsZXMuaGVpZ2h0ID0gMC4yLA0KIHRhYmxlcy50aGVtZSA9IHRoZW1lX2NsZWFudGFibGUoKSwNCg0KICMgQ29sb3IgcGFsZXR0ZXMuIFVzZSBjdXN0b20gY29sb3I6IGMoIiNFN0I4MDAiLCAiIzJFOUZERiIpLA0KICMgb3IgYnJld2VyIGNvbG9yIChlLmcuOiAiRGFyazIiKSwgb3IgZ2dzY2kgY29sb3IgKGUuZy46ICJqY28iKQ0KIHBhbGV0dGUgPSAiI0RhcmsyIiwNCiBnZ3RoZW1lID0gdGhlbWVfYncoKSwgIyBDaGFuZ2UgZ2dwbG90MiB0aGVtZQ0KIGZvbnQubWFpbiA9IGMoMTQsICJib2xkIiwgImRhcmtibHVlIiksDQogZm9udC54ID0gYygxMiwgImJvbGQuaXRhbGljIiwgImRhcmtibHVlIiksDQogZm9udC55ID0gYygxMiwgImJvbGQuaXRhbGljIiwgImRhcmtibHVlIiksDQogZm9udC50aWNrc2xhYiA9IGMoMTAsICJwbGFpbiIsICJkYXJrZ3JlZW4iKQ0KKQ0KYGBgDQoNCg0KKyBmZW1hbGVzIHRlbmQgdG8gc3Vydml2ZSBsb25nZXIgdGhhbiBtZW4NCisgdGhlIGRpZmZlcmVuY2UgaW4gc3Vydml2YWwgdGltZSBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBhdCA1JSBsZXZlbCBvZiBzaWduaWZpY2FuY2UNCg0KDQojIyBkaWZmZXJlbmNlIGluIHN1cnZpdmFsIHBlciBkaWFnbm9zaXMNCg0KYGBge3IsZWNobz1GQUxTRX0NCmxpYnJhcnkocGFsZXR0ZWVyKQ0KZml0IDwtIHN1cnZmaXQoU3Vydih0aW1lLCBzdGF0dXMpIH4gZGlhZ25vc2lzLCBkYXRhID0gZGF0YSkNCg0KZ2dzdXJ2cGxvdChmaXQsIGRhdGEgPSBkYXRhLA0KIHN1cnYubWVkaWFuLmxpbmUgPSAiaHYiLCAjIEFkZCBtZWRpYW5zIHN1cnZpdmFsDQoNCiAjIENoYW5nZSBsZWdlbmRzOiB0aXRsZSAmIGxhYmVscw0KIGxlZ2VuZC50aXRsZSA9ICJkaWFnbm9zaXMiLA0KICMgQWRkIHAtdmFsdWUgYW5kIHRlcnZhbHMNCiBwdmFsID0gVFJVRSwNCg0KIGNvbmYuaW50ID0gVFJVRSwNCiAjIEFkZCByaXNrIHRhYmxlDQogcmlzay50YWJsZSA9IFRSVUUsDQogdGFibGVzLmhlaWdodCA9IDAuMiwNCiB0YWJsZXMudGhlbWUgPSB0aGVtZV9jbGVhbnRhYmxlKCksDQoNCiAjIENvbG9yIHBhbGV0dGVzLiBVc2UgY3VzdG9tIGNvbG9yOiBjKCIjRTdCODAwIiwgIiMyRTlGREYiKSwNCiAjIG9yIGJyZXdlciBjb2xvciAoZS5nLjogIkRhcmsyIiksIG9yIGdnc2NpIGNvbG9yIChlLmcuOiAiamNvIikNCiBwYWxldHRlID0gIiNEYXJrMiIsDQogZ2d0aGVtZSA9IHRoZW1lX2J3KCksICMgQ2hhbmdlIGdncGxvdDIgdGhlbWUNCiBmb250Lm1haW4gPSBjKDE0LCAiYm9sZCIsICJkYXJrYmx1ZSIpLA0KIGZvbnQueCA9IGMoMTIsICJib2xkLml0YWxpYyIsICJkYXJrYmx1ZSIpLA0KIGZvbnQueSA9IGMoMTIsICJib2xkLml0YWxpYyIsICJkYXJrYmx1ZSIpLA0KIGZvbnQudGlja3NsYWIgPSBjKDEwLCAicGxhaW4iLCAiZGFya2dyZWVuIikNCikNCmBgYA0KDQoNCisgTWVuaW5naW9tYSBwYXRpZW50cyBoYXZlIGEgbG9uZ2VyIHN1cnZpdmFsIHRpbWUgYXMgY29tcGFyZWQgdG8gb3RoZXIgcGF0aWVudHMNCisgdGhlcmUgaXMgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBzdXJ2aXZhbCB0aW1lcyBiZXR3ZWVuIHBhdGllbnRzIG9mIGRpZmZlcmVudCBkaWFnbm9zaXMgdHlwZQ0KYXQgNSUgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlDQoNCisgdGhlIG1lZGlhbiBzdXJ2aXZhbCB0aW1lcyBmb3IgYExHIGdsaW9tYSwgSEcgZ2xpb21hLCBhbmQgT3RoZXJgIGFyZSBhcHByb3hpbWF0ZWx5IDQ5LDExIGFuZCAyOSBtb250aHMgcmVzcGVjdGl2ZWx5ICAuDQoNCg0KIyMgZGlmZmVyZW5jZSBpbiBzdXJ2aXZhbCBwZXIgU3RlcmVvdGFjdGljDQoNCmBgYHtyLGVjaG89RkFMU0V9DQpmaXQgPC0gc3VydmZpdChTdXJ2KHRpbWUsIHN0YXR1cykgfiBsb2MsIGRhdGEgPSBkYXRhKQ0KDQpnZ3N1cnZwbG90KGZpdCwgZGF0YSA9IGRhdGEsDQogc3Vydi5tZWRpYW4ubGluZSA9ICJodiIsICMgQWRkIG1lZGlhbnMgc3Vydml2YWwNCg0KICMgQ2hhbmdlIGxlZ2VuZHM6IHRpdGxlICYgbGFiZWxzDQogbGVnZW5kLnRpdGxlID0gImxvY2F0aW9uIiwNCiAjIEFkZCBwLXZhbHVlIGFuZCB0ZXJ2YWxzDQogcHZhbCA9IFRSVUUsDQoNCiBjb25mLmludCA9IFRSVUUsDQogIyBBZGQgcmlzayB0YWJsZQ0KIHJpc2sudGFibGUgPSBUUlVFLA0KIHRhYmxlcy5oZWlnaHQgPSAwLjIsDQogdGFibGVzLnRoZW1lID0gdGhlbWVfY2xlYW50YWJsZSgpLA0KDQogIyBDb2xvciBwYWxldHRlcy4gVXNlIGN1c3RvbSBjb2xvcjogYygiI0U3QjgwMCIsICIjMkU5RkRGIiksDQogIyBvciBicmV3ZXIgY29sb3IgKGUuZy46ICJEYXJrMiIpLCBvciBnZ3NjaSBjb2xvciAoZS5nLjogImpjbyIpDQogcGFsZXR0ZSA9ICIjRGFyazIiLA0KIGdndGhlbWUgPSB0aGVtZV9idygpLCAjIENoYW5nZSBnZ3Bsb3QyIHRoZW1lDQogZm9udC5tYWluID0gYygxNCwgImJvbGQiLCAiZGFya2JsdWUiKSwNCiBmb250LnggPSBjKDEyLCAiYm9sZC5pdGFsaWMiLCAiZGFya2JsdWUiKSwNCiBmb250LnkgPSBjKDEyLCAiYm9sZC5pdGFsaWMiLCAiZGFya2JsdWUiKSwNCiBmb250LnRpY2tzbGFiID0gYygxMCwgInBsYWluIiwgImRhcmtncmVlbiIpDQopDQpgYGANCg0KDQorIHRob3NlIHdpdGggbG9jYXRpb24gYXQgc3VwcmF0ZW50b3JpYWwgaGF2ZSBhIGxvbmdlciBzdXJ2aXZhbCB0aW1lIGFzIGNvbXBhcmVkIHRvIHRoZWlyIGNvdW50ZXJwYXJ0cw0KKyB0aGUgZGlmZmVyZW5jZSBpbiBzdXJ2aXZhbCB0aW1lIGlzIHJhdGhlciBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudA0KDQoNCiMjIE5vdyBsZXRzIGZpdCBhIG1vZGVsDQojIyMgTG9naXN0aWMgcmVncmVzc2lvbg0KDQpgYGB7ciBsb2dpc3RpY19yZWd9DQpkYXRhPC0gZGF0YSB8PiANCiAgc2VsZWN0KC1icmFpbl9zdGF0dXMpDQoNCmRhdGEkc3RhdHVzPC1hcy5mYWN0b3IoZGF0YSRzdGF0dXMpDQoNCmxyX21vZCA8LSBwYXJzbmlwOjpsb2dpc3RpY19yZWcoKXw+IA0KICAgc2V0X2VuZ2luZSgnZ2xtJykgfD4gDQogIHNldF9tb2RlKCJjbGFzc2lmaWNhdGlvbiIpICANCg0KbW9kZWw8LWxyX21vZCB8PiANCiAgZml0KHN0YXR1c34uIC10aW1lLGRhdGE9ZGF0YSkNCg0KbW9kZWwgJT4lDQogIHBsdWNrKCJmaXQiKSAlPiUNCiAgc3VtbWFyeSgpDQpgYGANCmBgYHtyLGVjaG89RkFMU0V9DQptb2RlbDwtZ2xtKHN0YXR1c34uIC10aW1lLGRhdGE9ZGF0YSxmYW1pbHk9Ymlub21pYWwpDQpgYGANCg0KIyMgcGVyZm9ybSBhIHN0ZXB3aXNlIHJlZ3Jlc3Npb24gDQpgYGB7cn0NCnN0ZXBtb2RlbF9sb2dpdCA8LSBzdGF0czo6c3RlcChtb2RlbCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQ0Kc3VtbWFyeShzdGVwbW9kZWxfbG9naXQpDQoNCmBgYA0KDQoNCiMjICoqY29tbWVudHMgYW5kIGludGVycHJldHRhdGlvbnMqKg0KDQorIGZyb20gdGhlIGxvZ2lzdGljIHJlZ3Jlc3Npb24gYGRpYWdub3Npcy1IRyBnbGlvbWFgIGFuZCBrYXJub2Zza3kgaW5kZXggYXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgcHJlZGljdG9ycyBvZiBzdXJ2aXZhbC4NCisgd2Ugc3BlYWsgb2YgKipvZGRzKiogd2hlbiB3ZSB1c2UgbG9naXN0aWMgcmVncmVzc2lvbiBhbmQgYGRpYWdub3Npcy1IRyBnbGlvbWFgIGluY3JlYXNlcyB0aGUgb2RkcyBvZiBkZWF0aCBvZiBicmFpbiBjYW5jZXIgcGF0aWVudHMgYmVjYXVzZSBgZXhwKGNvZWYpYA0KDQoNCg0KDQojIyBOb3cgd2UgZml0IGEgQ294IHByb3BvcnRpb25hbCBoYXphcmRzIG1vZGVsOg0KDQpgYGB7cn0NCmNveF9zcGVjIDwtIA0KICBwcm9wb3J0aW9uYWxfaGF6YXJkcygpICU+JSANCiAgc2V0X2VuZ2luZSgic3Vydml2YWwiKQ0KDQpjb3hfZml0IDwtIGNveF9zcGVjIHw+IA0KICBmaXQoU3Vydih0aW1lLCBzdGF0dXMpIH4gLiwgZGF0YSA9IEJyYWluQ2FuY2VyKQ0KDQoNCmNveF9maXQgJT4lDQogIHBsdWNrKCJmaXQiKSAlPiUNCiAgc3VtbWFyeSgpDQoNCmBgYA0KPGgzPkhhemFyZCBSYXRpb3M8L2gzPg0KDQpSZWNhbGwgdGhhdCB0aGUgQ294IG1vZGVsIGlzIGV4cHJlc3NlZCBieSB0aGUgaGF6YXJkIGZ1bmN0aW9uICRoKHQpJDoNCg0KJGgodCkgPSBoXzAodCkgXHRpbWVzIGV4cChcYmV0YV8xeF8xICsgXGJldGFfMnhfMiArIFxsZG90cyArIFxiZXRhX3B4X3ApJA0KDQpUaGUgcXVhbnRpdHkgb2YgaW50ZXJlc3QgZnJvbSBhIENveCByZWdyZXNzaW9uIG1vZGVsIGlzIHRoZSBoYXphcmQgcmF0aW8uIFRoZSBxdWFudGl0aWVzICRleHAoXGJldGFfaSkkIGFyZSB0aGUgaGF6YXJkIHJhdGlvcy4gDQoNCg0KVGhlIEhhemFyZCBSYXRpbyAoSFIpIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOg0KDQotIEhSID0gMTogTm8gZWZmZWN0DQotIEhSIDwgMTogaW5kaWNhdGVzIGEgZGVjcmVhc2VkIHJpc2sgb2YgZGVhdGgNCi0gSFIgPiAxOiBpbmRpY2F0ZXMgYW4gaW5jcmVhc2VkIHJpc2sgb2YgZGVhdGgNCg0KDQo8aDM+IEhvdyB0byBJbnRlcnByZXQgUmVzdWx0cyA8L2gzPg0KDQpUaGUgYGVzdGltYXRlYCBjb2x1bW4gaW4gdGhlIHN1bW1hcnkgYWJvdmUgaXMgdGhlIHJlZ3Jlc3Npb24gcGFyYW1ldGVyICRcYmV0YV9pJCBvZiB0aGUgQ294IG1vZGVsLiANCg0KPGRpdj4NCjxwPjxzcGFuIGNsYXNzPSJzdWNjZXNzIj5UaGUgYGVzdGltYXRlYCBjb2x1bW4gcXVhbnRpZmllcyB0aGUgZWZmZWN0IHNpemUgKHRoZSBpbXBhY3QpIHRoYXQgdGhlIGNvdmFyaWF0ZSBoYXMgb24gdGhlIHBhdGllbnQncyBzdXJ2aXZhbCB0aW1lLjwvc3Bhbj48L3A+DQo8L2Rpdj4NCg0KVGhlIGV4cHJlc3Npb24gaXMgJGV4cChcYmV0YV9pKSQgaXMgdGhlIGhhemFyZCByYXRpbyAtLSB0aGlzIGlzIHRoZSBgYmxhaGAgY29sdW1uIG9mIHRoZSBzdW1tYXJ5IGFib3ZlLiANCg0KU28gZm9yIGV4YW1wbGUsIHdlIG9idGFpbmVkIGEgcmVncmVzc2lvbiBwYXJhbWV0ZXIgJFxiZXRhXzEgPSAwLjkxNTIkIGZvciB0aGUgZGlhZ25vc2lzTEcgZ2xpb21hIHZzIG90aGVyIHR5cGUgZGlhZ25vc2lzLiBUaGUgaGF6YXJkIHJhdGlvIGZvciB0aGlzIGNvdmFyaWF0ZSBpcyAkSFIgPSBleHAoXGJldGFfMSkgPSAyLjQ5NjgkLg0KDQoNCkEgSFIgPiAxIGluZGljYXRlcyBpbmNyZWFzZWQgaGF6YXJkIG9mIGRlYXRoLg0KDQpUaGVyZWZvcmUsIHdlIHdvdWxkIHNheSB0aGF0ICBwYXRpZW50cyBkaWFnbm9zZWQgd2l0aCB0aGUgYExHIGdsaW9tYWAgaGF2ZSBhIDIuNDk2OCB0aW1lcyA8Yj5pbmNyZWFzZWQ8L2I+IGhhemFyZCBvZiBkZWF0aCBjb21wYXJlZCB0byBvdGhlciBwYXRpZW50cy4gVGhlIHAtdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVncmVzc2lvbiBwYXJhbWV0ZXIgaXMgJHA9MC4xNTE2MSQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBkaWZmZXJlbmNlIGlzIG5vdCBzaWduaWZpY2FudC4NCg0KDQojIyBwZXJmb3JtIHN0ZXB3aXNlIHJlZ3Jlc3Npb24gb24gYGNveGANCg0KYGBge3IgLCBlY2hvPUZBTFNFfQ0KY294X2ZpdCA8LSBjb3hwaChTdXJ2KHRpbWUsIHN0YXR1cykgfiAuLCBkYXRhID0gQnJhaW5DYW5jZXIpDQpgYGANCg0KYGBge3J9DQpzdGVwbW9kZWxfY294IDwtIE1BU1M6OnN0ZXBBSUMoY294X2ZpdCwgZGlyZWN0aW9uID0gImJvdGgiLCB0cmFjZSA9IEZBTFNFKQ0Kc3VtbWFyeShzdGVwbW9kZWxfY294KQ0KYGBgDQojIyBjb21tZW50cw0KDQorIHRoZSBzdGVwd2lzZSByZWdyZXNzaW9uIG1vZGVsIHJlc3VsdHMgaW4gYSBvcHRpbWFsIHNldCBvZiB2YXJpYWJsZXMgdGhhdCBwcmVkaWN0IGRlYXRoIGJ5IGJyYWluIGNhbmNlcg0KKyBJdCBjYW4gYmUgbm90ZWQgdGhhdCBqdXN0IGxpa2UgaW4gbG9naXN0aWMgcmVncmVzc2lvbiAsIGBkaWFnbm9zaXNIRyBnbGlvbWFgIGhhcyBhbiBpbmNyZWFzZWQgYGhhemFyZGAgb2YgZGVhdGggdGhlIHNhbWUgd2F5IGl0IGluY3JlYXNlcyB0aGUgYG9kZHNgIG9mICBkeWluZw0KDQo8ZGl2IGNsYXNzID0gImJsdWUiPg0KLSAqKlRvIGJlIGNvbnRpbnVlZCoqIA0KPC9kaXY+DQoNCg0KKyB0aGlzIGlzIGEgd29yayBpbiBwcm9ncmVzcw0KKyB5b3UgYXJlIGFsbG93ZWQgdG8gYWRkIGluIHlvdXIgdGhvdWdodHMNCisgSSBhbSBjb25zdGFudGx5IHVwZGF0aW5nIHRoaXMgYmxvZ3Bvc3QNCg0KDQo=
comments and interprettations
diagnosis-HG glioma
and karnofsky index are statistically significant predictors of survival.diagnosis-HG glioma
increases the odds of death of brain cancer patients becauseexp(coef)