EFA models
Euthimic
ds %>% select(young1e: young11e) %>%
fa.parallel()
The estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.The estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.The estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.An ultra-Heywood case was detected. Examine the results carefullyThe estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.
Parallel analysis suggests that the number of factors = 1 and the number of components = 1

mod_1e <- ds %>% select(young1e: young11e) %>% fa(., nfactors = 1)
as.data.frame(unclass(mod_1e$loadings)) %>% mutate_if(is.numeric, round,2) %>%
DT::datatable(., options = list(
lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')),
pageLength = 15
))
Maniac (3)
ds %>% select(young1m: young11m) %>%
fa.parallel()
The estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.The estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.An ultra-Heywood case was detected. Examine the results carefullyThe estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.An ultra-Heywood case was detected. Examine the results carefullyThe estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.An ultra-Heywood case was detected. Examine the results carefullyThe estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.An ultra-Heywood case was detected. Examine the results carefully
Parallel analysis suggests that the number of factors = 3 and the number of components = 2

mod_1m <- ds %>% select(young1m: young11m) %>% fa(., nfactors = 1)
as.data.frame(unclass(mod_1m$loadings)) %>% mutate_if(is.numeric, round,2) %>%
DT::datatable(., options = list(
lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')),
pageLength = 15
))
Depression (3)
ds %>% select(young1d: young11d) %>%
fa.parallel()
The estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.the standard deviation is zeroThe estimated weights for the factor scores are probably incorrect. Try a different factor score estimation method.An ultra-Heywood case was detected. Examine the results carefully
Parallel analysis suggests that the number of factors = 1 and the number of components = 1

mod_1d <- ds %>% select(young1d: young11d) %>% fa(., nfactors = 1)
as.data.frame(unclass(mod_1d$loadings)) %>% mutate_if(is.numeric, round,2) %>%
DT::datatable(., options = list(
lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')),
pageLength = 15
))
IRT models
irt_1d <- mirt(ds_young, 1, itemtype = "graded")
"young5m" re-mapped to ensure all categories have a distance of 1
"young6m" re-mapped to ensure all categories have a distance of 1
"young8m" re-mapped to ensure all categories have a distance of 1
"young9m" re-mapped to ensure all categories have a distance of 1
Iteration: 1, Log-Lik: -1506.248, Max-Change: 0.69950
Iteration: 2, Log-Lik: -1476.506, Max-Change: 0.39171
Iteration: 3, Log-Lik: -1468.973, Max-Change: 0.15796
Iteration: 4, Log-Lik: -1467.487, Max-Change: 0.11639
Iteration: 5, Log-Lik: -1467.039, Max-Change: 0.07047
Iteration: 6, Log-Lik: -1466.891, Max-Change: 0.04741
Iteration: 7, Log-Lik: -1466.815, Max-Change: 0.02686
Iteration: 8, Log-Lik: -1466.796, Max-Change: 0.01870
Iteration: 9, Log-Lik: -1466.788, Max-Change: 0.01629
Iteration: 10, Log-Lik: -1466.781, Max-Change: 0.00483
Iteration: 11, Log-Lik: -1466.779, Max-Change: 0.00710
Iteration: 12, Log-Lik: -1466.778, Max-Change: 0.00396
Iteration: 13, Log-Lik: -1466.778, Max-Change: 0.00402
Iteration: 14, Log-Lik: -1466.777, Max-Change: 0.00214
Iteration: 15, Log-Lik: -1466.777, Max-Change: 0.00027
Iteration: 16, Log-Lik: -1466.777, Max-Change: 0.00024
Iteration: 17, Log-Lik: -1466.777, Max-Change: 0.00137
Iteration: 18, Log-Lik: -1466.777, Max-Change: 0.00045
Iteration: 19, Log-Lik: -1466.777, Max-Change: 0.00016
Iteration: 20, Log-Lik: -1466.777, Max-Change: 0.00011
Iteration: 21, Log-Lik: -1466.777, Max-Change: 0.00044
Iteration: 22, Log-Lik: -1466.777, Max-Change: 0.00052
Iteration: 23, Log-Lik: -1466.777, Max-Change: 0.00032
Iteration: 24, Log-Lik: -1466.777, Max-Change: 0.00021
Iteration: 25, Log-Lik: -1466.777, Max-Change: 0.00041
Iteration: 26, Log-Lik: -1466.777, Max-Change: 0.00039
Iteration: 27, Log-Lik: -1466.777, Max-Change: 0.00025
Iteration: 28, Log-Lik: -1466.777, Max-Change: 0.00008
M2(irt_1d)
plot(irt_1d, type = "trace")

Item info
Theta <- seq(-4,4, by = .1)
nitems <- ncol(ds_young)
for(i in 1:nitems){
info <- iteminfo(extract.item(irt_1d, i), Theta)
plot(Theta, info, type = "l", main = paste("Information for ",
names(ds_young)[[i]], sep = ""), ylab = "Information", xlab = "Theta")
lines(Theta, info, col = "steelblue")
}











Curva com 3 itens
mod_elie2 <- mirt(ds_2 , 1, "graded")
Iteration: 1, Log-Lik: -419.715, Max-Change: 0.73766
Iteration: 2, Log-Lik: -416.027, Max-Change: 0.25178
Iteration: 3, Log-Lik: -414.582, Max-Change: 0.19273
Iteration: 4, Log-Lik: -413.765, Max-Change: 0.08312
Iteration: 5, Log-Lik: -413.696, Max-Change: 0.06303
Iteration: 6, Log-Lik: -413.661, Max-Change: 0.05092
Iteration: 7, Log-Lik: -413.613, Max-Change: 0.02411
Iteration: 8, Log-Lik: -413.609, Max-Change: 0.01573
Iteration: 9, Log-Lik: -413.607, Max-Change: 0.00890
Iteration: 10, Log-Lik: -413.605, Max-Change: 0.02795
Iteration: 11, Log-Lik: -413.604, Max-Change: 0.00904
Iteration: 12, Log-Lik: -413.603, Max-Change: 0.00797
Iteration: 13, Log-Lik: -413.602, Max-Change: 0.00332
Iteration: 14, Log-Lik: -413.602, Max-Change: 0.00293
Iteration: 15, Log-Lik: -413.602, Max-Change: 0.01231
Iteration: 16, Log-Lik: -413.601, Max-Change: 0.00378
Iteration: 17, Log-Lik: -413.601, Max-Change: 0.00126
Iteration: 18, Log-Lik: -413.601, Max-Change: 0.00920
Iteration: 19, Log-Lik: -413.601, Max-Change: 0.00207
Iteration: 20, Log-Lik: -413.601, Max-Change: 0.00171
Iteration: 21, Log-Lik: -413.601, Max-Change: 0.00168
Iteration: 22, Log-Lik: -413.601, Max-Change: 0.00064
Iteration: 23, Log-Lik: -413.601, Max-Change: 0.00026
Iteration: 24, Log-Lik: -413.601, Max-Change: 0.00097
Iteration: 25, Log-Lik: -413.601, Max-Change: 0.00478
Iteration: 26, Log-Lik: -413.601, Max-Change: 0.00032
Iteration: 27, Log-Lik: -413.601, Max-Change: 0.00067
Iteration: 28, Log-Lik: -413.601, Max-Change: 0.00017
Iteration: 29, Log-Lik: -413.601, Max-Change: 0.00066
Iteration: 30, Log-Lik: -413.601, Max-Change: 0.00018
Iteration: 31, Log-Lik: -413.601, Max-Change: 0.00013
Iteration: 32, Log-Lik: -413.601, Max-Change: 0.00067
Iteration: 33, Log-Lik: -413.601, Max-Change: 0.00019
Iteration: 34, Log-Lik: -413.601, Max-Change: 0.00013
Iteration: 35, Log-Lik: -413.601, Max-Change: 0.00065
Iteration: 36, Log-Lik: -413.601, Max-Change: 0.00027
Iteration: 37, Log-Lik: -413.601, Max-Change: 0.00012
Iteration: 38, Log-Lik: -413.601, Max-Change: 0.00062
Iteration: 39, Log-Lik: -413.601, Max-Change: 0.00028
Iteration: 40, Log-Lik: -413.601, Max-Change: 0.00012
Iteration: 41, Log-Lik: -413.601, Max-Change: 0.00058
Iteration: 42, Log-Lik: -413.601, Max-Change: 0.00028
Iteration: 43, Log-Lik: -413.601, Max-Change: 0.00011
Iteration: 44, Log-Lik: -413.601, Max-Change: 0.00054
Iteration: 45, Log-Lik: -413.601, Max-Change: 0.00027
Iteration: 46, Log-Lik: -413.601, Max-Change: 0.00010
Iteration: 47, Log-Lik: -413.601, Max-Change: 0.00050
Iteration: 48, Log-Lik: -413.601, Max-Change: 0.00025
Iteration: 49, Log-Lik: -413.601, Max-Change: 0.00010
M2(mod_elie2)
Error: M2() statistic cannot be calculated due to too few degrees of freedom



Plots
p1 <-itemplot(object = mod_elie2, item = 1, type = "info")
p2 <-itemplot(object = mod_elie2, item = 2, type = "info")
p3 <-itemplot(object = mod_elie2, item = 3, type = "info")

x3 <- p3$panel.args[[1]]$x
y3 <- p3$panel.args[[1]]$y
u3 <- p3$panel.args.common$upper
l3 <- p3$panel.args.common$lower
plot(x3,y3, type ="l")
lines(x3,u3)
lines(x3,l3)

NA
NA
plt <- itemplot(mod_elie2, 1, type = 'info') #store the object
plt2 <- itemplot(mod_elie2, 2, type = 'info') #store the object
plt3 <- itemplot(mod_elie2, 3, type = 'info') #store the object
print(plt) #plot the object

print(plt2) #plot the object

print(plt3) #plot the object

#str(plt) #find the data
plt$panel.args
[[1]]
[[1]]$x
[1] -6.00000000 -5.93969849 -5.87939698 -5.81909548 -5.75879397 -5.69849246 -5.63819095 -5.57788945
[9] -5.51758794 -5.45728643 -5.39698492 -5.33668342 -5.27638191 -5.21608040 -5.15577889 -5.09547739
[17] -5.03517588 -4.97487437 -4.91457286 -4.85427136 -4.79396985 -4.73366834 -4.67336683 -4.61306533
[25] -4.55276382 -4.49246231 -4.43216080 -4.37185930 -4.31155779 -4.25125628 -4.19095477 -4.13065327
[33] -4.07035176 -4.01005025 -3.94974874 -3.88944724 -3.82914573 -3.76884422 -3.70854271 -3.64824121
[41] -3.58793970 -3.52763819 -3.46733668 -3.40703518 -3.34673367 -3.28643216 -3.22613065 -3.16582915
[49] -3.10552764 -3.04522613 -2.98492462 -2.92462312 -2.86432161 -2.80402010 -2.74371859 -2.68341709
[57] -2.62311558 -2.56281407 -2.50251256 -2.44221106 -2.38190955 -2.32160804 -2.26130653 -2.20100503
[65] -2.14070352 -2.08040201 -2.02010050 -1.95979899 -1.89949749 -1.83919598 -1.77889447 -1.71859296
[73] -1.65829146 -1.59798995 -1.53768844 -1.47738693 -1.41708543 -1.35678392 -1.29648241 -1.23618090
[81] -1.17587940 -1.11557789 -1.05527638 -0.99497487 -0.93467337 -0.87437186 -0.81407035 -0.75376884
[89] -0.69346734 -0.63316583 -0.57286432 -0.51256281 -0.45226131 -0.39195980 -0.33165829 -0.27135678
[97] -0.21105528 -0.15075377 -0.09045226 -0.03015075 0.03015075 0.09045226 0.15075377 0.21105528
[105] 0.27135678 0.33165829 0.39195980 0.45226131 0.51256281 0.57286432 0.63316583 0.69346734
[113] 0.75376884 0.81407035 0.87437186 0.93467337 0.99497487 1.05527638 1.11557789 1.17587940
[121] 1.23618090 1.29648241 1.35678392 1.41708543 1.47738693 1.53768844 1.59798995 1.65829146
[129] 1.71859296 1.77889447 1.83919598 1.89949749 1.95979899 2.02010050 2.08040201 2.14070352
[137] 2.20100503 2.26130653 2.32160804 2.38190955 2.44221106 2.50251256 2.56281407 2.62311558
[145] 2.68341709 2.74371859 2.80402010 2.86432161 2.92462312 2.98492462 3.04522613 3.10552764
[153] 3.16582915 3.22613065 3.28643216 3.34673367 3.40703518 3.46733668 3.52763819 3.58793970
[161] 3.64824121 3.70854271 3.76884422 3.82914573 3.88944724 3.94974874 4.01005025 4.07035176
[169] 4.13065327 4.19095477 4.25125628 4.31155779 4.37185930 4.43216080 4.49246231 4.55276382
[177] 4.61306533 4.67336683 4.73366834 4.79396985 4.85427136 4.91457286 4.97487437 5.03517588
[185] 5.09547739 5.15577889 5.21608040 5.27638191 5.33668342 5.39698492 5.45728643 5.51758794
[193] 5.57788945 5.63819095 5.69849246 5.75879397 5.81909548 5.87939698 5.93969849 6.00000000
[[1]]$y
[1] 0.11303179 0.12116970 0.12977974 0.13887130 0.14845079 0.15852118 0.16908134 0.18012547
[9] 0.19164242 0.20361510 0.21601982 0.22882570 0.24199419 0.25547858 0.26922374 0.28316591
[17] 0.29723279 0.31134372 0.32541027 0.33933698 0.35302244 0.36636069 0.37924291 0.39155935
[25] 0.40320159 0.41406490 0.42405077 0.43306951 0.44104277 0.44790591 0.45361015 0.45812440
[33] 0.46143663 0.46355477 0.46450706 0.46434187 0.46312693 0.46094799 0.45790706 0.45412020
[41] 0.44971491 0.44482740 0.43959958 0.43417610 0.42870135 0.42331660 0.41815736 0.41335089
[49] 0.40901402 0.40525126 0.40215323 0.39979532 0.39823675 0.39751987 0.39766974 0.39869407
[57] 0.40058332 0.40331119 0.40683533 0.41109834 0.41602908 0.42154423 0.42755014 0.43394496
[65] 0.44062103 0.44746739 0.45437260 0.46122746 0.46792792 0.47437777 0.48049122 0.48619515
[73] 0.49143096 0.49615599 0.50034427 0.50398670 0.50709059 0.50967849 0.51178644 0.51346164
[81] 0.51475972 0.51574165 0.51647047 0.51700800 0.51741177 0.51773212 0.51800982 0.51827426
[89] 0.51854224 0.51881749 0.51909092 0.51934161 0.51953841 0.51964215 0.51960830 0.51939001
[97] 0.51894116 0.51821959 0.51719007 0.51582689 0.51411617 0.51205737 0.50966437 0.50696570
[105] 0.50400414 0.50083562 0.49752750 0.49415639 0.49080541 0.48756134 0.48451145 0.48174039
[113] 0.47932717 0.47734233 0.47584546 0.47488315 0.47448735 0.47467434 0.47544423 0.47678104
[121] 0.47865337 0.48101559 0.48380954 0.48696668 0.49041060 0.49405977 0.49783042 0.50163953
[129] 0.50540758 0.50906118 0.51253525 0.51577480 0.51873611 0.52138723 0.52370794 0.52568893
[137] 0.52733045 0.52864043 0.52963210 0.53032146 0.53072455 0.53085476 0.53072044 0.53032283
[145] 0.52965445 0.52869818 0.52742697 0.52580416 0.52378459 0.52131621 0.51834226 0.51480373
[153] 0.51064217 0.50580249 0.50023569 0.49390137 0.48676984 0.47882384 0.47005964 0.46048762
[161] 0.45013226 0.43903162 0.42723628 0.41480792 0.40181758 0.38834365 0.37446988 0.36028322
[169] 0.34587180 0.33132311 0.31672221 0.30215035 0.28768373 0.27339256 0.25934040 0.24558366
[177] 0.23217145 0.21914556 0.20654053 0.19438404 0.18269721 0.17149514 0.16078736 0.15057845
[185] 0.14086856 0.13165398 0.12292767 0.11467978 0.10689817 0.09956878 0.09267609 0.08620345
[193] 0.08013343 0.07444807 0.06912915 0.06415836 0.05951754 0.05518876 0.05115448 0.04739761
pltdata <- data.frame(lapply(plt$panel.args, function(x) do.call(cbind, x))[[1]])
pltdata$item <- rep("1", each = 50)
pltdata2 <- data.frame(lapply(plt2$panel.args, function(x) do.call(cbind, x))[[1]])
pltdata2$item <- rep("2", each = 50)
pltdata3 <- data.frame(lapply(plt3$panel.args, function(x) do.call(cbind, x))[[1]])
pltdata3$item <- rep("3", each = 50)
ggplot(pltdata, aes(x, y, colour=item)) + geom_line() + ggtitle('ggplot2 Tracelines') +
xlab(expression(theta)) + ylab(expression(P(theta)))

ggplot(pltdata2, aes(x, y, colour=item)) + geom_line() + ggtitle('ggplot2 Tracelines') +
xlab(expression(theta)) + ylab(expression(P(theta)))

ggplot(pltdata3, aes(x, y, colour=item)) + geom_line() + ggtitle('ggplot2 Tracelines') +
xlab(expression(theta)) + ylab(expression(P(theta)))

ggplot(plot_combinado, aes(x, y, colour=item)) + geom_line(aes(linetype = item), size = 1) + ggtitle('') +
xlab(expression(theta)) + ylab("item information") +
theme_bw()

LS0tDQp0aXRsZTogIklSVCBFbGllIExhbmRlaXJhIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBMb2FkIHBhY2thZ2VzDQpgYGB7cn0NCnBhY21hbjo6cF9sb2FkKHRpZHl2ZXJzZSwgcHN5Y2gsIG1pcnQsIGFyc2VuYWwsIGhhdmVuKQ0KYGBgDQoNCg0KIyBJbXBvcnQgZHMNCmBgYHtyfQ0KZHMgPC0gcmVhZF9zYXYoIkM6L1VzZXJzL2x1aXNmL0Rvd25sb2Fkcy9FbGllMS5zYXYiKQ0KYmFja3VwIDwtIGRzDQpgYGANCg0KIyBDbGVhbiBkcw0KDQpgYGB7cn0NCmRzIDwtIGphbml0b3I6OmNsZWFuX25hbWVzKGRzKQ0KYGBgDQoNCiMgUmVtb3ZlIHNwc3MgYXR0cmlidXRlcw0KDQpgYGB7cn0NCmRzW10gPC0gbGFwcGx5KGRzLCBmdW5jdGlvbih4KSB7IGF0dHJpYnV0ZXMoeCkgPC0gTlVMTDsgeCB9KQ0KYGBgDQoNCiMgRFMgDQoNCmBgYHtyfQ0KZHMgJT4lIG5hbWVzDQpgYGANCiMgRFMgZm9yIGFsbCBJdGVtcw0KDQpgYGB7cn0NCmRzX3lvdW5nIDwtIGRzICU+JSBzZWxlY3QoeW91bmcxbTp5b3VuZzExbSkNCmBgYA0KDQojIyBDaGVjayBpdGVtcycgZGlzdHJpYnV0aW9uDQoNCmBgYHtyfQ0KZHNfeW91bmcgJT4lIG11dGF0ZV9hbGwoLiwgYXMuZmFjdG9yKSAlPiUgRGF0YUV4cGxvcmVyOjpwbG90X2JhcigpDQpgYGANCg0KIyMgQ2hlY2sgaXRlbXMnIGRpc3RyaWJ1dGlvbg0KDQpgYGB7cn0NCmRzX3lvdW5nICU+JSANCiAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSkgJT4lIA0KICBjb3VudCh2YWx1ZSkgJT4lIA0KICBtdXRhdGUocGVyY2VudCA9ICgxMDAgKiBuIC8gc3VtKG4pKSAlPiUgcm91bmQoZGlnaXRzID0gMSkpDQpgYGANCiMgRUZBIG1vZGVscw0KDQojIyBFdXRoaW1pYw0KYGBge3J9DQpkcyAlPiUgc2VsZWN0KHlvdW5nMWU6IHlvdW5nMTFlKSAlPiUgDQogIGZhLnBhcmFsbGVsKCkNCmBgYA0KYGBge3J9DQptb2RfMWUgPC0gZHMgJT4lIHNlbGVjdCh5b3VuZzFlOiB5b3VuZzExZSkgJT4lIGZhKC4sIG5mYWN0b3JzID0gMSkNCmFzLmRhdGEuZnJhbWUodW5jbGFzcyhtb2RfMWUkbG9hZGluZ3MpKSAlPiUgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLDIpICU+JSAgDQogIERUOjpkYXRhdGFibGUoLiwgb3B0aW9ucyA9IGxpc3QoDQogICAgICAgICAgbGVuZ3RoTWVudSA9IGxpc3QoYyg1LCAxNSwgLTEpLCBjKCc1JywgJzE1JywgJ0FsbCcpKSwNCiAgICAgICAgICBwYWdlTGVuZ3RoID0gMTUNCiAgICAgICAgKSkNCmBgYA0KDQoNCiMjIE1hbmlhYyAoMykNCg0KYGBge3J9DQpkcyAlPiUgc2VsZWN0KHlvdW5nMW06IHlvdW5nMTFtKSAlPiUgDQogIGZhLnBhcmFsbGVsKCkNCmBgYA0KYGBge3J9DQptb2RfMW0gPC0gZHMgJT4lIHNlbGVjdCh5b3VuZzFtOiB5b3VuZzExbSkgJT4lIGZhKC4sIG5mYWN0b3JzID0gMSkNCmFzLmRhdGEuZnJhbWUodW5jbGFzcyhtb2RfMW0kbG9hZGluZ3MpKSAlPiUgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLDIpICU+JSANCiAgRFQ6OmRhdGF0YWJsZSguLCBvcHRpb25zID0gbGlzdCgNCiAgICBsZW5ndGhNZW51ID0gbGlzdChjKDUsIDE1LCAtMSksIGMoJzUnLCAnMTUnLCAnQWxsJykpLA0KICAgIHBhZ2VMZW5ndGggPSAxNQ0KICApKQ0KYGBgDQoNCg0KDQojIyBEZXByZXNzaW9uICgzKQ0KDQpgYGB7cn0NCmRzICU+JSBzZWxlY3QoeW91bmcxZDogeW91bmcxMWQpICU+JSANCiAgZmEucGFyYWxsZWwoKQ0KYGBgDQoNCg0KYGBge3J9DQptb2RfMWQgPC0gZHMgJT4lIHNlbGVjdCh5b3VuZzFkOiB5b3VuZzExZCkgJT4lIGZhKC4sIG5mYWN0b3JzID0gMSkNCmFzLmRhdGEuZnJhbWUodW5jbGFzcyhtb2RfMWQkbG9hZGluZ3MpKSAlPiUgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLDIpICU+JSANCiAgICBEVDo6ZGF0YXRhYmxlKC4sIG9wdGlvbnMgPSBsaXN0KA0KICAgICAgICAgIGxlbmd0aE1lbnUgPSBsaXN0KGMoNSwgMTUsIC0xKSwgYygnNScsICcxNScsICdBbGwnKSksDQogICAgICAgICAgcGFnZUxlbmd0aCA9IDE1DQogICAgICAgICkpDQpgYGANCg0KDQojIElSVCBtb2RlbHMNCg0KDQpgYGB7cn0NCmlydF8xZCA8LSBtaXJ0KGRzX3lvdW5nLCAxLCBpdGVtdHlwZSA9ICJncmFkZWQiKQ0KYGBgDQoNCmBgYHtyfQ0KTTIoaXJ0XzFkKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChpcnRfMWQsIHR5cGUgPSAidHJhY2UiKQ0KYGBgDQoNCiMjIEl0ZW0gaW5mbw0KDQpgYGB7cn0NClRoZXRhIDwtIHNlcSgtNCw0LCBieSA9IC4xKQ0Kbml0ZW1zIDwtIG5jb2woZHNfeW91bmcpDQpmb3IoaSBpbiAxOm5pdGVtcyl7DQogIGluZm8gPC0gaXRlbWluZm8oZXh0cmFjdC5pdGVtKGlydF8xZCwgaSksIFRoZXRhKQ0KICAgIHBsb3QoVGhldGEsIGluZm8sIHR5cGUgPSAibCIsIG1haW4gPSBwYXN0ZSgiSW5mb3JtYXRpb24gZm9yICIsIA0KICAgICAgICAgICAgICAgIG5hbWVzKGRzX3lvdW5nKVtbaV1dLCBzZXAgPSAiIiksIHlsYWIgPSAiSW5mb3JtYXRpb24iLCB4bGFiID0gIlRoZXRhIikNCiAgICBsaW5lcyhUaGV0YSwgaW5mbywgY29sID0gInN0ZWVsYmx1ZSIpDQp9DQpgYGANCg0KIyMgQ3VydmEgY29tIDMgaXRlbnMNCg0KDQpgYGB7cn0NCm1vZF9lbGllMiA8LSBtaXJ0KGRzXzIgLCAxLCAiZ3JhZGVkIikNCmBgYA0KDQpgYGB7cn0NCk0yKG1vZF9lbGllMikNCmBgYA0KDQoNCmBgYHtyfQ0KaXRlbXBsb3Qob2JqZWN0ID0gbW9kX2VsaWUyLCBpdGVtID0gMSwgdHlwZSA9ICJpbmZvIikNCmBgYA0KDQpgYGB7cn0NCml0ZW1wbG90KG9iamVjdCA9IG1vZF9lbGllMiwgaXRlbSA9IDIsIHR5cGUgPSAiaW5mbyIpDQpgYGANCg0KYGBge3J9DQppdGVtcGxvdChvYmplY3QgPSBtb2RfZWxpZTIsIGl0ZW0gPSAzLCB0eXBlID0gImluZm8iKQ0KYGBgDQojIyBQbG90cw0KDQoNCmBgYHtyfQ0KcDEgPC1pdGVtcGxvdChvYmplY3QgPSBtb2RfZWxpZTIsIGl0ZW0gPSAxLCB0eXBlID0gImluZm8iKQ0KcDIgPC1pdGVtcGxvdChvYmplY3QgPSBtb2RfZWxpZTIsIGl0ZW0gPSAyLCB0eXBlID0gImluZm8iKQ0KcDMgPC1pdGVtcGxvdChvYmplY3QgPSBtb2RfZWxpZTIsIGl0ZW0gPSAzLCB0eXBlID0gImluZm8iKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCngxIDwtIHAkcGFuZWwuYXJnc1tbMV1dJHgNCnkxIDwtIHAkcGFuZWwuYXJnc1tbMV1dJHkNCnUxIDwtIHAkcGFuZWwuYXJncy5jb21tb24kdXBwZXINCmwxIDwtIHAkcGFuZWwuYXJncy5jb21tb24kbG93ZXINCg0KDQp4MSAlPiUgZGF0YS5mcmFtZQ0KDQpwbG90KHgxLHkxLCB0eXBlID0ibCIpDQpsaW5lcyh4MSx1MSkNCmxpbmVzKHgxLGwxKQ0KYGBgDQpgYGB7cn0NCngyIDwtIHAyJHBhbmVsLmFyZ3NbWzFdXSR4DQp5MiA8LSBwMiRwYW5lbC5hcmdzW1sxXV0keQ0KdTIgPC0gcDIkcGFuZWwuYXJncy5jb21tb24kdXBwZXINCmwyIDwtIHAyJHBhbmVsLmFyZ3MuY29tbW9uJGxvd2VyDQoNCnBsb3QoeDIseTIsIHR5cGUgPSJsIikNCmxpbmVzKHgyLHUyKQ0KbGluZXMoeDIsbDIpDQpgYGANCg0KDQpgYGB7cn0NCngzIDwtIHAzJHBhbmVsLmFyZ3NbWzFdXSR4DQp5MyA8LSBwMyRwYW5lbC5hcmdzW1sxXV0keQ0KdTMgPC0gcDMkcGFuZWwuYXJncy5jb21tb24kdXBwZXINCmwzIDwtIHAzJHBhbmVsLmFyZ3MuY29tbW9uJGxvd2VyDQoNCg0KcGxvdCh4Myx5MywgdHlwZSA9ImwiKQ0KbGluZXMoeDMsdTMpDQpsaW5lcyh4MyxsMykNCg0KDQpgYGANCg0KDQoNCg0KDQpgYGB7cn0NCnBsdCA8LSBpdGVtcGxvdChtb2RfZWxpZTIsIDEsIHR5cGUgPSAnaW5mbycpICNzdG9yZSB0aGUgb2JqZWN0DQpwbHQyIDwtIGl0ZW1wbG90KG1vZF9lbGllMiwgMiwgdHlwZSA9ICdpbmZvJykgI3N0b3JlIHRoZSBvYmplY3QNCnBsdDMgPC0gaXRlbXBsb3QobW9kX2VsaWUyLCAzLCB0eXBlID0gJ2luZm8nKSAjc3RvcmUgdGhlIG9iamVjdA0KDQpwcmludChwbHQpICNwbG90IHRoZSBvYmplY3QNCnByaW50KHBsdDIpICNwbG90IHRoZSBvYmplY3QNCnByaW50KHBsdDMpICNwbG90IHRoZSBvYmplY3QNCg0KI3N0cihwbHQpICNmaW5kIHRoZSBkYXRhDQpwbHQkcGFuZWwuYXJncw0KcGx0ZGF0YSA8LSBkYXRhLmZyYW1lKGxhcHBseShwbHQkcGFuZWwuYXJncywgZnVuY3Rpb24oeCkgZG8uY2FsbChjYmluZCwgeCkpW1sxXV0pDQpwbHRkYXRhJGl0ZW0gPC0gcmVwKCIxIiwgZWFjaCA9IDUwKQ0KDQpwbHRkYXRhMiA8LSBkYXRhLmZyYW1lKGxhcHBseShwbHQyJHBhbmVsLmFyZ3MsIGZ1bmN0aW9uKHgpIGRvLmNhbGwoY2JpbmQsIHgpKVtbMV1dKQ0KcGx0ZGF0YTIkaXRlbSA8LSByZXAoIjIiLCBlYWNoID0gNTApDQoNCg0KcGx0ZGF0YTMgPC0gZGF0YS5mcmFtZShsYXBwbHkocGx0MyRwYW5lbC5hcmdzLCBmdW5jdGlvbih4KSBkby5jYWxsKGNiaW5kLCB4KSlbWzFdXSkNCnBsdGRhdGEzJGl0ZW0gPC0gcmVwKCIzIiwgZWFjaCA9IDUwKQ0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dwbG90KHBsdGRhdGEsIGFlcyh4LCB5LCBjb2xvdXI9aXRlbSkpICsgZ2VvbV9saW5lKCkgKyBnZ3RpdGxlKCdnZ3Bsb3QyIFRyYWNlbGluZXMnKSArDQogICAgeGxhYihleHByZXNzaW9uKHRoZXRhKSkgKyB5bGFiKGV4cHJlc3Npb24oUCh0aGV0YSkpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KHBsdGRhdGEyLCBhZXMoeCwgeSwgY29sb3VyPWl0ZW0pKSArIGdlb21fbGluZSgpICsgZ2d0aXRsZSgnZ2dwbG90MiBUcmFjZWxpbmVzJykgKw0KICAgIHhsYWIoZXhwcmVzc2lvbih0aGV0YSkpICsgeWxhYihleHByZXNzaW9uKFAodGhldGEpKSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChwbHRkYXRhMywgYWVzKHgsIHksIGNvbG91cj1pdGVtKSkgKyBnZW9tX2xpbmUoKSArIGdndGl0bGUoJ2dncGxvdDIgVHJhY2VsaW5lcycpICsNCiAgICB4bGFiKGV4cHJlc3Npb24odGhldGEpKSArIHlsYWIoZXhwcmVzc2lvbihQKHRoZXRhKSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KcGxvdF9jb21iaW5hZG8gPC0gcmJpbmQocGx0ZGF0YSwgcGx0ZGF0YTIsIHBsdGRhdGEzKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KHBsb3RfY29tYmluYWRvLCBhZXMoeCwgeSwgY29sb3VyPWl0ZW0pKSArIGdlb21fbGluZShhZXMobGluZXR5cGUgPSBpdGVtKSwgc2l6ZSA9IDEpICsgZ2d0aXRsZSgnJykgKw0KICB4bGFiKGV4cHJlc3Npb24odGhldGEpKSArIHlsYWIoIml0ZW0gaW5mb3JtYXRpb24iKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQo=