# Carga de archivos
padron<-read.xlsx("Padron.xlsx")
abril2021<-read_csv2("Abril2021.csv")
marzo2021<-read_csv2("Marzo 2021.csv")
total2021<-read_csv2("BaseExtrasCompleto.csv")
total2021<-total2021 %>%
left_join(padron, by="Legajo")
marzo21completo<-marzo2021 %>%
left_join(padron, by ="Legajo")
abril21completo<-abril2021 %>%
left_join(padron, by ="Legajo") %>%
arrange(desc(`Cant. Horas`))
ComparativoMensual2021<-read.xlsx("ComparativoMensual2021.xlsx")
Comparativo Mensual
gt(ComparativoMensual2021) %>%
tab_header(title = "Comparativo Mensual",
subtitle = "Año 2021") %>%
cols_label(Meses = "Periodo",
`Hrs.50%` = "Hrs 50%",
`Hrs.100%` = "Hrs 100%",
`Hrs.150%` = "Hrs 150%",
`Ajuste.50%` = "Ajuste 50%",
`Ajuste.100%` = "Ajuste 100%",
`Ajuste.150%` = "Ajuste 150%",
Total = "Total")
| Periodo |
Hrs 50% |
Hrs 100% |
Hrs 150% |
Ajuste 50% |
Ajuste 100% |
Ajuste 150% |
Total |
| Ene 21 |
3794.5 |
4638.0 |
2796.0 |
186.5 |
26.0 |
172.0 |
11658.0 |
| Feb 21 |
4379.0 |
8034.0 |
4029.0 |
8.0 |
10.0 |
0.0 |
16450.0 |
| Mar 21 |
3916.5 |
4483.5 |
2668.0 |
121.5 |
280.0 |
182.0 |
11651.5 |
| Abr 21 |
3667.5 |
4548.5 |
2554.5 |
295.5 |
184.0 |
104.5 |
11354.5 |
| May 21 |
3526.0 |
3161.5 |
1702.0 |
144.0 |
249.0 |
38.0 |
8820.5 |
| Jun 21 |
2625.0 |
5665.0 |
2412.0 |
87.0 |
67.5 |
61.0 |
10917.5 |
Total de horas acumuladas en Julio 2021
HorasPorTipoJulio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(`Tipo de hora`) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
HorasTotalJulio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Cant. Horas`) %>%
summarise(sum=sum(`Cant. Horas`), n = n())
gt(HorasPorTipoJulio) %>%
tab_header(title = "Acumulado Julio según Tipo de Hora",
subtitle = "Año 2021") %>%
cols_label(`Tipo de hora` = "Tipo de hora",
sum = "Suma",
n = "Casos")
| Tipo de hora |
Suma |
Casos |
| Hrs. 100% |
900.5 |
149 |
| Hrs. 50% |
507.0 |
126 |
| Hrs. 150% |
447.0 |
50 |
gt(HorasTotalJulio) %>%
tab_header(title = "Acumulado Julio",
subtitle = "Año 2021") %>%
cols_label(sum = "Suma",
n = "Casos")
horas50julio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 50%") %>%
summarise(sum(`Cant. Horas`))
horas100julio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 100%") %>%
summarise(sum(`Cant. Horas`))
horas150julio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 150%") %>%
summarise(sum(`Cant. Horas`))
ponderadas50julio<-horas50julio*1.5
ponderadas100julio<-horas100julio*2
ponderadas150julio<-horas150julio*2.5
Las horas ponderadas al 50% corresponden a 760.5 horas.
Las horas ponderadas al 100% corresponden a 1801 horas.
Las horas ponderadas al 150% corresponden a 1117.5 horas.
Acumulado Julio por Departamento
HorasPorDepartamentoJulio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(Departamento) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
gt(HorasPorDepartamentoJulio) %>%
tab_header(title = "Acumulado Julio por departamento",
subtitle = "Año 2021") %>%
cols_label(Departamento = "Departamento",
sum = "Suma",
n = "Casos")
| Departamento |
Suma |
Casos |
| ENFERMERÍA |
1268.0 |
202 |
| SERVICIOS GENERALES |
192.5 |
20 |
| HEMOTERAPIA |
105.5 |
19 |
| ALIMENTACIÓN |
61.5 |
11 |
| LABORATORIO |
49.5 |
18 |
| C.I.R.H.E. |
48.0 |
19 |
| QUIRÓFANO |
34.0 |
10 |
| ROPERIA |
25.5 |
4 |
| FARMACIA Y SUMINISTROS |
18.0 |
3 |
| GERENCIA DE OPERACIONES |
18.0 |
2 |
| ESTERILIZACIÓN |
10.5 |
1 |
| CARDIOLOGIA |
7.0 |
4 |
| GERENCIA DE CONTRATACIONES Y COMERCIALIZACION |
5.0 |
5 |
| IMÁGENES |
4.5 |
2 |
| GERENCIA DE FINANZAS |
4.0 |
1 |
| ANATOMIA PALOTÓGICA |
2.0 |
2 |
| GERENCIA CONTABILIDAD |
1.0 |
2 |
graficoJulio<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21")
ggplot(graficoJulio, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
geom_col()+
theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
ggtitle("Cantidad y tipos de hora por departamento Julio 2021")

Top 10 legajos con más horas
los10masTotal<-total2021 %>%
filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Empleado) %>%
group_by(Empleado) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange (desc(sum)) %>%
slice(1:10)
gt(los10masTotal) %>%
tab_header(title = "Legajos Top 10 con horas ",
subtitle = "Julio 2021") %>%
cols_label(Empleado = "Colaborador/a",
sum = "Suma de horas",
n = "Guardias")
| Colaborador/a |
Suma de horas |
Guardias |
| HUANACUNI COPA, SILVIA MERCEDES |
42.0 |
3 |
| LIOTINE, RENEE ALONDRA |
42.0 |
3 |
| OSORIO PINEDA, MARIA CRISTINA |
42.0 |
4 |
| ASCURRA ZENTENO, ABEL MODESTO |
36.0 |
6 |
| FARFAN, CARLA MARIANA |
35.0 |
7 |
| KRUPA, RAMONA DEL CARMEN |
33.5 |
5 |
| DE LUCA, ENRIQUE ANIBAL |
30.0 |
3 |
| CARRIZO, MANUELA |
28.0 |
4 |
| ORTELLADO, EVELYN DENISSE |
27.5 |
2 |
| PORTUGUEZ CUZQUE, LILIANA MAGALI |
25.5 |
4 |
Cantidad de Horas totales según día de la semana
####Resumen por dia de semana###
totalDiaSemana<-total2021 %>%
select(`Dia Sem.`, `Tipo de hora`, `Cant. Horas`) %>%
group_by(`Dia Sem.`) %>%
summarise(mean = mean(`Cant. Horas`), sum = sum(`Cant. Horas`), n = n())
gt(totalDiaSemana) %>%
tab_header(title = "Resumen por día de la semana",
subtitle = "Año 2021") %>%
cols_label(`Dia Sem.` = "Dia de la semana",
mean = "Media",
sum = "Suma",
n = "Casos")
| Dia de la semana |
Media |
Suma |
Casos |
| DO |
7.050441 |
5591.0 |
793 |
| JU |
4.265974 |
5541.5 |
1299 |
| LU |
4.659091 |
6150.0 |
1320 |
| MA |
4.931720 |
6825.5 |
1384 |
| MI |
4.388972 |
5850.5 |
1333 |
| SA |
6.530238 |
6047.0 |
926 |
| VI |
4.419423 |
6280.0 |
1421 |
Total de horas acumuladas en Junio 2021
HorasPorTipoJunio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(`Tipo de hora`) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
HorasTotalJunio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
select(`Cant. Horas`) %>%
summarise(sum=sum(`Cant. Horas`), n = n())
gt(HorasPorTipoJunio) %>%
tab_header(title = "Acumulado Junio según Tipo de Hora",
subtitle = "Año 2021") %>%
cols_label(`Tipo de hora` = "Tipo de hora",
sum = "Suma",
n = "Casos")
| Tipo de hora |
Suma |
Casos |
| Hrs. 100% |
5697.5 |
866 |
| Hrs. 50% |
2629.5 |
823 |
| Hrs. 150% |
2412.0 |
285 |
gt(HorasTotalJunio) %>%
tab_header(title = "Acumulado Junio",
subtitle = "Año 2021") %>%
cols_label(sum = "Suma",
n = "Casos")
horas50junio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 50%") %>%
summarise(sum(`Cant. Horas`))
horas100junio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 100%") %>%
summarise(sum(`Cant. Horas`))
horas150junio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 150%") %>%
summarise(sum(`Cant. Horas`))
ponderadas50junio<-horas50junio*1.5
ponderadas100junio<-horas100junio*2
ponderadas150junio<-horas150junio*2.5
Las horas ponderadas al 50% corresponden a 3944.25 horas.
Las horas ponderadas al 100% corresponden a 1.139510^{4} horas.
Las horas ponderadas al 150% corresponden a 6030 horas.
graficoJunio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21")
ggplot(graficoJunio, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
geom_col()+
theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
ggtitle("Cantidad y tipos de hora por departamento Junio 2021")

Acumulado Junio por Departamento
HorasPorDepartamentoJunio<-total2021 %>%
filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(Departamento) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
gt(HorasPorDepartamentoJunio) %>%
tab_header(title = "Acumulado Junio por departamento",
subtitle = "Año 2021") %>%
cols_label(Departamento = "Departamento",
sum = "Suma",
n = "Casos")
| Departamento |
Suma |
Casos |
| ENFERMERÍA |
5307.5 |
854 |
| SERVICIOS GENERALES |
1534.0 |
197 |
| LABORATORIO |
1149.0 |
346 |
| ALIMENTACIÓN |
537.0 |
52 |
| HEMOTERAPIA |
444.5 |
69 |
| GERENCIA DE OPERACIONES |
444.0 |
120 |
| FARMACIA Y SUMINISTROS |
320.0 |
77 |
| ROPERIA |
196.5 |
40 |
| QUIRÓFANO |
161.0 |
34 |
| IMÁGENES |
134.5 |
26 |
| GERENCIA DE CONTRATACIONES Y COMERCIALIZACION |
97.0 |
33 |
| ANATOMIA PALOTÓGICA |
74.5 |
37 |
| MANTENIMIENTO |
70.0 |
13 |
| C.I.R.H.E. |
63.5 |
14 |
| FARMACIA AMBULATORIA |
54.0 |
9 |
| DIRECCIÓN HUSS |
24.0 |
4 |
| GERENCIA DE FINANZAS |
23.0 |
7 |
| NEUROCIENCIAS |
22.5 |
11 |
| IUC |
21.0 |
9 |
| NA |
14.0 |
1 |
| ESTERILIZACIÓN |
13.0 |
1 |
| DIRECCIÓN ADMINISTRATIVA |
10.0 |
2 |
| DIRECCIÓN DE INVESTIGACIÓN |
9.0 |
6 |
| GERENCIA CONTABILIDAD |
6.5 |
8 |
| BIOINGENIERIA |
4.0 |
1 |
| CARDIOLOGIA |
3.0 |
1 |
| ANESTESIOLOGÍA |
2.0 |
2 |
Total de horas acumuladas en Mayo 2021
HorasPorTipoMayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(`Tipo de hora`) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
HorasTotalMayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
select(`Cant. Horas`) %>%
summarise(sum=sum(`Cant. Horas`), n = n())
gt(HorasPorTipoMayo) %>%
tab_header(title = "Acumulado Mayo según Tipo de Hora",
subtitle = "Año 2021") %>%
cols_label(`Tipo de hora` = "Tipo de hora",
sum = "Suma",
n = "Casos")
| Tipo de hora |
Suma |
Casos |
| Hrs. 50% |
3480.5 |
1130 |
| Hrs. 100% |
3110.0 |
581 |
| Hrs. 150% |
1719.0 |
198 |
gt(HorasTotalMayo) %>%
tab_header(title = "Acumulado Mayo",
subtitle = "Año 2021") %>%
cols_label(sum = "Suma",
n = "Casos")
horas50mayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 50%") %>%
summarise(sum(`Cant. Horas`))
horas100mayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 100%") %>%
summarise(sum(`Cant. Horas`))
horas150mayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%") %>%
filter(`Tipo de hora`=="Hrs. 150%") %>%
summarise(sum(`Cant. Horas`))
ponderadas50mayo<-horas50mayo*1.5
ponderadas100mayo<-horas100mayo*2
ponderadas150mayo<-horas150mayo*2.5
Las horas ponderadas al 50% corresponden a 5220.75 horas.
Las horas ponderadas al 100% corresponden a 6220 horas.
Las horas ponderadas al 150% corresponden a 4297.5 horas.
graficoMayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21")
ggplot(graficoMayo, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
geom_col()+
theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
ggtitle("Cantidad y tipos de hora por departamento Mayo 2021")

Acumulado Mayo por Departamento
HorasPorDepartamentoMayo<-total2021 %>%
filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(Departamento) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
gt(HorasPorDepartamentoMayo) %>%
tab_header(title = "Acumulado Mayo por departamento",
subtitle = "Año 2021") %>%
cols_label(Departamento = "Departamento",
sum = "Suma",
n = "Casos")
| Departamento |
Suma |
Casos |
| ENFERMERÍA |
3827.0 |
676 |
| LABORATORIO |
1352.5 |
443 |
| SERVICIOS GENERALES |
818.0 |
133 |
| GERENCIA DE OPERACIONES |
497.0 |
179 |
| ALIMENTACIÓN |
440.0 |
70 |
| HEMOTERAPIA |
354.5 |
63 |
| FARMACIA Y SUMINISTROS |
194.5 |
54 |
| IMÁGENES |
146.0 |
26 |
| GERENCIA DE CONTRATACIONES Y COMERCIALIZACION |
115.0 |
59 |
| ANATOMIA PALOTÓGICA |
112.0 |
54 |
| QUIRÓFANO |
108.0 |
36 |
| C.I.R.H.E. |
78.5 |
34 |
| ROPERIA |
72.5 |
13 |
| MANTENIMIENTO |
55.0 |
8 |
| GERENCIA DE FINANZAS |
46.5 |
23 |
| FARMACIA AMBULATORIA |
36.0 |
6 |
| CARDIOLOGIA |
16.5 |
7 |
| NA |
10.0 |
2 |
| BIOINGENIERIA |
6.5 |
6 |
| NEUROCIENCIAS |
6.5 |
4 |
| IUC |
5.5 |
3 |
| ANESTESIOLOGÍA |
5.0 |
2 |
| DIRECCIÓN DE INVESTIGACIÓN |
5.0 |
5 |
| GERENCIA CONTABILIDAD |
1.5 |
3 |
Total de horas acumuladas en Abril 2021
HorasPorTipoAbril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(`Tipo de hora`) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
HorasTotalabril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
select(`Cant. Horas`) %>%
summarise(sum=sum(`Cant. Horas`), n = n())
gt(HorasPorTipoAbril) %>%
tab_header(title = "Acumulado Abril según Tipo de Hora",
subtitle = "Año 2021") %>%
cols_label(`Tipo de hora` = "Tipo de hora",
sum = "Suma",
n = "Casos")
| Tipo de hora |
Suma |
Casos |
| Hrs. 100% |
4262.5 |
742 |
| Hrs. 50% |
3578.5 |
1010 |
| Hrs. 150% |
2536.5 |
296 |
gt(HorasTotalabril) %>%
tab_header(title = "Acumulado Abril",
subtitle = "Año 2021") %>%
cols_label(sum = "Suma",
n = "Casos")
horas50abril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 50%") %>%
summarise(sum(`Cant. Horas`))
horas100abril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
filter(`Tipo de hora`=="Hrs. 100%") %>%
summarise(sum(`Cant. Horas`))
horas150abril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%") %>%
filter(`Tipo de hora`=="Hrs. 150%") %>%
summarise(sum(`Cant. Horas`))
ponderadas50abril<-horas50abril*1.5
ponderadas100abril<-horas100abril*2
ponderadas150abril<-horas150abril*2.5
Las horas ponderadas al 50% corresponden a 5367.75 horas.
Las horas ponderadas al 100% corresponden a 8525 horas.
Las horas ponderadas al 150% corresponden a 6341.25 horas.
graficoAbril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21")
ggplot(graficoAbril, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
geom_col()+
theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
ggtitle("Cantidad y tipos de hora por departamento Abril 2021")

Acumulado Abril por Departamento
HorasPorDepartamentoAbril<-total2021 %>%
filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(Departamento) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
gt(HorasPorDepartamentoAbril) %>%
tab_header(title = "Acumulado Abril por departamento",
subtitle = "Año 2021") %>%
cols_label(Departamento = "Departamento",
sum = "Suma",
n = "Casos")
| Departamento |
Suma |
Casos |
| ENFERMERÍA |
4929.0 |
837 |
| SERVICIOS GENERALES |
1551.5 |
246 |
| LABORATORIO |
1142.0 |
326 |
| GERENCIA DE OPERACIONES |
512.5 |
128 |
| ALIMENTACIÓN |
484.5 |
73 |
| IMÁGENES |
374.0 |
58 |
| HEMOTERAPIA |
335.0 |
53 |
| FARMACIA Y SUMINISTROS |
232.5 |
58 |
| QUIRÓFANO |
225.5 |
60 |
| MANTENIMIENTO |
113.0 |
20 |
| GERENCIA DE CONTRATACIONES Y COMERCIALIZACION |
100.0 |
50 |
| ROPERIA |
97.5 |
19 |
| ANATOMIA PALOTÓGICA |
87.5 |
43 |
| GERENCIA DE FINANZAS |
68.0 |
40 |
| C.I.R.H.E. |
43.0 |
8 |
| FARMACIA AMBULATORIA |
36.0 |
6 |
| CARDIOLOGIA |
16.5 |
6 |
| DIRECCIÓN ADMINISTRATIVA |
10.0 |
2 |
| NEUROCIENCIAS |
9.5 |
7 |
| ANESTESIOLOGÍA |
3.5 |
2 |
| GERENCIA CONTABILIDAD |
3.5 |
4 |
| DIRECCIÓN DE INVESTIGACIÓN |
3.0 |
2 |
Marzo 2021
filtroFecha<-total2021 %>%
filter(Fecha>"2021-02-20" & Fecha<"2021-03-21") %>%
arrange(Fecha)
marzo21porDepartamento<-total2021 %>%
filter(Fecha>"2021-02-20" & Fecha<"2021-03-21") %>%
select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
group_by(Departamento) %>%
summarise(sum=sum(`Cant. Horas`), n = n()) %>%
arrange(desc(sum))
gt(marzo21porDepartamento) %>%
tab_header(title = "Horas totales por departamento",
subtitle = "Marzo 2021") %>%
cols_label(Departamento = "Departamento",
sum = "Horas Totales",
n = "Casos")
| Departamento |
Horas Totales |
Casos |
| ENFERMERÍA |
5589.5 |
947 |
| SERVICIOS GENERALES |
2109.5 |
329 |
| LABORATORIO |
923.0 |
307 |
| GERENCIA DE OPERACIONES |
401.5 |
126 |
| IMÁGENES |
312.0 |
65 |
| HEMOTERAPIA |
305.5 |
53 |
| FARMACIA Y SUMINISTROS |
291.0 |
65 |
| QUIRÓFANO |
273.5 |
78 |
| ALIMENTACIÓN |
237.5 |
41 |
| ROPERIA |
136.5 |
25 |
| GERENCIA DE CONTRATACIONES Y COMERCIALIZACION |
115.0 |
79 |
| ANATOMIA PALOTÓGICA |
71.5 |
31 |
| MANTENIMIENTO |
69.0 |
11 |
| C.I.R.H.E. |
49.5 |
15 |
| GERENCIA DE FINANZAS |
44.0 |
21 |
| FARMACIA AMBULATORIA |
42.0 |
7 |
| DIRECCIÓN ADMINISTRATIVA |
10.0 |
2 |
| ESTERILIZACIÓN |
6.0 |
3 |
| DIRECCIÓN DE INVESTIGACIÓN |
4.0 |
4 |
| NEUROCIENCIAS |
4.0 |
3 |
| GERENCIA CONTABILIDAD |
3.5 |
4 |
| CARDIOLOGIA |
3.0 |
2 |
| ANESTESIOLOGÍA |
2.0 |
1 |
| NA |
2.0 |
1 |
ggplot(filtroFecha, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
geom_col()+
theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
ggtitle("Cantidad y tipos de hora por departamento Marzo 2021")

LS0tDQp0aXRsZTogIlJlcG9ydGUgZGUgaG9yYXMgZXh0cmFzIg0KYXV0aG9yOiAiRmFiacOhbiBEZXNpYSINCmRhdGU6ICJNYXJ6byAyMDIxIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0aGVtZTogc3BhY2VsYWINCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmBgYA0KDQoNCmBgYHtyIGxpYnJlcmlhcy1kYXRvcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCg0KbGlicmFyeShvcGVueGxzeCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHJlYWRyKSMgTGVlciBhcmNoaXZvcyBjc3YNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh0aWR5dmVyc2UpICMgTGltcGlhciB5IG1hbmlwdWxhciBkYXRvcw0KbGlicmFyeShndCkgIyBNb2RpZmljYXIgZWwgZm9ybWF0byBkZSBzYWxpZGEgZGUgbGFzIHRhYmxhcw0KbGlicmFyeShsdWJyaWRhdGUpICMgQWp1c3RhciBsb3MgZm9ybWF0b3MgZGUgZmVjaGFzDQpgYGANCmBgYHtyfQ0KDQojIENhcmdhIGRlIGFyY2hpdm9zDQpwYWRyb248LXJlYWQueGxzeCgiUGFkcm9uLnhsc3giKQ0KYWJyaWwyMDIxPC1yZWFkX2NzdjIoIkFicmlsMjAyMS5jc3YiKQ0KbWFyem8yMDIxPC1yZWFkX2NzdjIoIk1hcnpvIDIwMjEuY3N2IikNCnRvdGFsMjAyMTwtcmVhZF9jc3YyKCJCYXNlRXh0cmFzQ29tcGxldG8uY3N2IikNCnRvdGFsMjAyMTwtdG90YWwyMDIxICU+JSANCiAgbGVmdF9qb2luKHBhZHJvbiwgYnk9IkxlZ2FqbyIpDQptYXJ6bzIxY29tcGxldG88LW1hcnpvMjAyMSAlPiUgDQogIGxlZnRfam9pbihwYWRyb24sIGJ5ID0iTGVnYWpvIikNCmFicmlsMjFjb21wbGV0bzwtYWJyaWwyMDIxICU+JSANCiAgbGVmdF9qb2luKHBhZHJvbiwgYnkgPSJMZWdham8iKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhgQ2FudC4gSG9yYXNgKSkNCkNvbXBhcmF0aXZvTWVuc3VhbDIwMjE8LXJlYWQueGxzeCgiQ29tcGFyYXRpdm9NZW5zdWFsMjAyMS54bHN4IikNCg0KYGBgDQoNCiMgKipDb21wYXJhdGl2byBNZW5zdWFsKioNCg0KYGBge3J9DQpndChDb21wYXJhdGl2b01lbnN1YWwyMDIxKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQ29tcGFyYXRpdm8gTWVuc3VhbCIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKE1lc2VzID0gIlBlcmlvZG8iLA0KICAgICAgICAgICAgIGBIcnMuNTAlYCA9ICJIcnMgNTAlIiwNCiAgICAgICAgICAgICBgSHJzLjEwMCVgID0gIkhycyAxMDAlIiwgDQogICAgICAgICAgICAgYEhycy4xNTAlYCA9ICJIcnMgMTUwJSIsDQogICAgICAgICAgICAgYEFqdXN0ZS41MCVgID0gIkFqdXN0ZSA1MCUiLA0KICAgICAgICAgICAgIGBBanVzdGUuMTAwJWAgPSAiQWp1c3RlIDEwMCUiLA0KICAgICAgICAgICAgIGBBanVzdGUuMTUwJWAgPSAiQWp1c3RlIDE1MCUiLA0KICAgICAgICAgICAgIFRvdGFsID0gIlRvdGFsIikNCg0KYGBgDQoNCiMgKipUb3RhbCBkZSBob3JhcyBhY3VtdWxhZGFzIGVuIEp1bGlvIDIwMjEqKg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTQsIGZpZy5zaG93PSJob2xkIiwgZmlnLndpZHRoPTQsIG91dC53aWR0aD0iNDAlIn0NCkhvcmFzUG9yVGlwb0p1bGlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDYtMjAiICYgRmVjaGE8IjIwMjEtMDctMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoYFRpcG8gZGUgaG9yYWApICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KSG9yYXNUb3RhbEp1bGlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDYtMjAiICYgRmVjaGE8IjIwMjEtMDctMjEiKSAlPiUNCiAgc2VsZWN0KGBDYW50LiBIb3Jhc2ApICU+JSANCiAgc3VtbWFyaXNlKHN1bT1zdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpDQoNCmd0KEhvcmFzUG9yVGlwb0p1bGlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEp1bGlvIHNlZ8O6biBUaXBvIGRlIEhvcmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgVGlwbyBkZSBob3JhYCA9ICJUaXBvIGRlIGhvcmEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCmd0KEhvcmFzVG90YWxKdWxpbykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBKdWxpbyIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQpgYGB7cn0NCmhvcmFzNTBqdWxpbzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA2LTIwIiAmIEZlY2hhPCIyMDIxLTA3LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gNTAlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKGBDYW50LiBIb3Jhc2ApKQ0KDQpob3JhczEwMGp1bGlvPC10b3RhbDIwMjEgJT4lDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwanVsaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDE1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQogIA0KDQpwb25kZXJhZGFzNTBqdWxpbzwtaG9yYXM1MGp1bGlvKjEuNQ0KcG9uZGVyYWRhczEwMGp1bGlvPC1ob3JhczEwMGp1bGlvKjINCnBvbmRlcmFkYXMxNTBqdWxpbzwtaG9yYXMxNTBqdWxpbyoyLjUNCmBgYA0KDQoqKkxhcyBob3JhcyBwb25kZXJhZGFzIGFsIDUwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzNTBqdWxpb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxMDAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxMDBqdWxpb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBqdWxpb2AgaG9yYXMuKioNCg0KIyMgKipBY3VtdWxhZG8gSnVsaW8gcG9yIERlcGFydGFtZW50byoqDQogDQpgYGB7cn0NCkhvcmFzUG9yRGVwYXJ0YW1lbnRvSnVsaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KZ3QoSG9yYXNQb3JEZXBhcnRhbWVudG9KdWxpbykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBKdWxpbyBwb3IgZGVwYXJ0YW1lbnRvIiwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJBw7FvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoRGVwYXJ0YW1lbnRvID0gIkRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KDQpgYGANCg0KYGBge3J9DQpncmFmaWNvSnVsaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpDQoNCmdncGxvdChncmFmaWNvSnVsaW8sIGFlcyh4ID0gRGVwYXJ0YW1lbnRvLCB5PWBDYW50LiBIb3Jhc2AsIGZpbGw9YFRpcG8gZGUgaG9yYWApKSsNCiAgZ2VvbV9jb2woKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IHJlbCgwLjUpKSkrDQogIGdndGl0bGUoIkNhbnRpZGFkIHkgdGlwb3MgZGUgaG9yYSBwb3IgZGVwYXJ0YW1lbnRvIEp1bGlvIDIwMjEiKQ0KYGBgDQoNCiMjICoqVG9wIDEwIGxlZ2Fqb3MgY29uIG3DoXMgaG9yYXMqKg0KIA0KYGBge3J9DQpsb3MxMG1hc1RvdGFsPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDYtMjAiICYgRmVjaGE8IjIwMjEtMDctMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBFbXBsZWFkbykgJT4lIA0KICBncm91cF9ieShFbXBsZWFkbykgJT4lDQogIHN1bW1hcmlzZShzdW09c3VtKGBDYW50LiBIb3Jhc2ApLCBuID0gbigpKSAlPiUgDQogIGFycmFuZ2UgKGRlc2Moc3VtKSkgJT4lIA0KICBzbGljZSgxOjEwKQ0KDQpndChsb3MxMG1hc1RvdGFsKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiTGVnYWpvcyBUb3AgMTAgY29uIGhvcmFzICIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiSnVsaW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChFbXBsZWFkbyA9ICJDb2xhYm9yYWRvci9hIiwNCiAgICAgICAgICAgICBzdW0gPSAiU3VtYSBkZSBob3JhcyIsDQogICAgICAgICAgICAgbiA9ICJHdWFyZGlhcyIpDQpgYGANCg0KIyAqKkNhbnRpZGFkIGRlIEhvcmFzIHRvdGFsZXMgc2Vnw7puIGTDrWEgZGUgbGEgc2VtYW5hKioNCg0KYGBge3J9DQoNCiMjIyNSZXN1bWVuIHBvciBkaWEgZGUgc2VtYW5hIyMjDQp0b3RhbERpYVNlbWFuYTwtdG90YWwyMDIxICU+JSANCiAgc2VsZWN0KGBEaWEgU2VtLmAsIGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgKSAlPiUgDQogIGdyb3VwX2J5KGBEaWEgU2VtLmApICU+JSANCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGBDYW50LiBIb3Jhc2ApLCBzdW0gPSBzdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpDQoNCmd0KHRvdGFsRGlhU2VtYW5hKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiUmVzdW1lbiBwb3IgZMOtYSBkZSBsYSBzZW1hbmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgRGlhIFNlbS5gID0gIkRpYSBkZSBsYSBzZW1hbmEiLA0KICAgICAgICAgICAgIG1lYW4gPSAiTWVkaWEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQogDQoNCiMgKipUb3RhbCBkZSBob3JhcyBhY3VtdWxhZGFzIGVuIEp1bmlvIDIwMjEqKg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTQsIGZpZy5zaG93PSJob2xkIiwgZmlnLndpZHRoPTQsIG91dC53aWR0aD0iNDAlIn0NCkhvcmFzUG9yVGlwb0p1bmlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDUtMjAiICYgRmVjaGE8IjIwMjEtMDYtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoYFRpcG8gZGUgaG9yYWApICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KSG9yYXNUb3RhbEp1bmlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDUtMjAiICYgRmVjaGE8IjIwMjEtMDYtMjEiKSAlPiUNCiAgc2VsZWN0KGBDYW50LiBIb3Jhc2ApICU+JSANCiAgc3VtbWFyaXNlKHN1bT1zdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpDQoNCmd0KEhvcmFzUG9yVGlwb0p1bmlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEp1bmlvIHNlZ8O6biBUaXBvIGRlIEhvcmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgVGlwbyBkZSBob3JhYCA9ICJUaXBvIGRlIGhvcmEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCmd0KEhvcmFzVG90YWxKdW5pbykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBKdW5pbyIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQpgYGB7cn0NCmhvcmFzNTBqdW5pbzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA1LTIwIiAmIEZlY2hhPCIyMDIxLTA2LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gNTAlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKGBDYW50LiBIb3Jhc2ApKQ0KDQpob3JhczEwMGp1bmlvPC10b3RhbDIwMjEgJT4lDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNS0yMCIgJiBGZWNoYTwiMjAyMS0wNi0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwanVuaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNS0yMCIgJiBGZWNoYTwiMjAyMS0wNi0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDE1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQogIA0KDQpwb25kZXJhZGFzNTBqdW5pbzwtaG9yYXM1MGp1bmlvKjEuNQ0KcG9uZGVyYWRhczEwMGp1bmlvPC1ob3JhczEwMGp1bmlvKjINCnBvbmRlcmFkYXMxNTBqdW5pbzwtaG9yYXMxNTBqdW5pbyoyLjUNCmBgYA0KDQoqKkxhcyBob3JhcyBwb25kZXJhZGFzIGFsIDUwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzNTBqdW5pb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxMDAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxMDBqdW5pb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBqdW5pb2AgaG9yYXMuKioNCg0KYGBge3J9DQpncmFmaWNvSnVuaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNS0yMCIgJiBGZWNoYTwiMjAyMS0wNi0yMSIpDQoNCmdncGxvdChncmFmaWNvSnVuaW8sIGFlcyh4ID0gRGVwYXJ0YW1lbnRvLCB5PWBDYW50LiBIb3Jhc2AsIGZpbGw9YFRpcG8gZGUgaG9yYWApKSsNCiAgZ2VvbV9jb2woKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IHJlbCgwLjUpKSkrDQogIGdndGl0bGUoIkNhbnRpZGFkIHkgdGlwb3MgZGUgaG9yYSBwb3IgZGVwYXJ0YW1lbnRvIEp1bmlvIDIwMjEiKQ0KYGBgDQogDQojIyAqKkFjdW11bGFkbyBKdW5pbyBwb3IgRGVwYXJ0YW1lbnRvKioNCiANCmBgYHtyfQ0KSG9yYXNQb3JEZXBhcnRhbWVudG9KdW5pbzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA1LTIwIiAmIEZlY2hhPCIyMDIxLTA2LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGdyb3VwX2J5KERlcGFydGFtZW50bykgJT4lDQogIHN1bW1hcmlzZShzdW09c3VtKGBDYW50LiBIb3Jhc2ApLCBuID0gbigpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhzdW0pKQ0KDQpndChIb3Jhc1BvckRlcGFydGFtZW50b0p1bmlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEp1bmlvIHBvciBkZXBhcnRhbWVudG8iLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChEZXBhcnRhbWVudG8gPSAiRGVwYXJ0YW1lbnRvIiwNCiAgICAgICAgICAgICBzdW0gPSAiU3VtYSIsDQogICAgICAgICAgICAgbiA9ICJDYXNvcyIpDQoNCmBgYA0KDQoNCg0KIyAqKlRvdGFsIGRlIGhvcmFzIGFjdW11bGFkYXMgZW4gTWF5byAyMDIxKioNCg0KYGBge3IgZmlnLmhlaWdodD00LCBmaWcuc2hvdz0iaG9sZCIsIGZpZy53aWR0aD00LCBvdXQud2lkdGg9IjQwJSJ9DQpIb3Jhc1BvclRpcG9NYXlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDQtMjAiICYgRmVjaGE8IjIwMjEtMDUtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoYFRpcG8gZGUgaG9yYWApICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KSG9yYXNUb3RhbE1heW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNC0yMCIgJiBGZWNoYTwiMjAyMS0wNS0yMSIpICU+JQ0KICBzZWxlY3QoYENhbnQuIEhvcmFzYCkgJT4lIA0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkNCg0KZ3QoSG9yYXNQb3JUaXBvTWF5bykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBNYXlvIHNlZ8O6biBUaXBvIGRlIEhvcmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgVGlwbyBkZSBob3JhYCA9ICJUaXBvIGRlIGhvcmEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCmd0KEhvcmFzVG90YWxNYXlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIE1heW8iLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChzdW0gPSAiU3VtYSIsDQogICAgICAgICAgICAgbiA9ICJDYXNvcyIpDQoNCmBgYA0KYGBge3J9DQpob3JhczUwbWF5bzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA0LTIwIiAmIEZlY2hhPCIyMDIxLTA1LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gNTAlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKGBDYW50LiBIb3Jhc2ApKQ0KDQpob3JhczEwMG1heW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNC0yMCIgJiBGZWNoYTwiMjAyMS0wNS0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwbWF5bzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA0LTIwIiAmIEZlY2hhPCIyMDIxLTA1LTIxDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUiKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gMTUwJSIpICU+JSANCiAgc3VtbWFyaXNlKHN1bShgQ2FudC4gSG9yYXNgKSkNCiAgDQoNCnBvbmRlcmFkYXM1MG1heW88LWhvcmFzNTBtYXlvKjEuNQ0KcG9uZGVyYWRhczEwMG1heW88LWhvcmFzMTAwbWF5byoyDQpwb25kZXJhZGFzMTUwbWF5bzwtaG9yYXMxNTBtYXlvKjIuNQ0KYGBgDQoNCioqTGFzIGhvcmFzIHBvbmRlcmFkYXMgYWwgNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXM1MG1heW9gIGhvcmFzLioqDQoNCioqTGFzIGhvcmFzIHBvbmRlcmFkYXMgYWwgMTAwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzMTAwbWF5b2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBtYXlvYCBob3Jhcy4qKg0KYGBge3J9DQpncmFmaWNvTWF5bzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA0LTIwIiAmIEZlY2hhPCIyMDIxLTA1LTIxIikNCg0KZ2dwbG90KGdyYWZpY29NYXlvLCBhZXMoeCA9IERlcGFydGFtZW50bywgeT1gQ2FudC4gSG9yYXNgLCBmaWxsPWBUaXBvIGRlIGhvcmFgKSkrDQogIGdlb21fY29sKCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHNpemUgPSByZWwoMC41KSkpKw0KICBnZ3RpdGxlKCJDYW50aWRhZCB5IHRpcG9zIGRlIGhvcmEgcG9yIGRlcGFydGFtZW50byBNYXlvIDIwMjEiKQ0KYGBgDQogDQojIyAqKkFjdW11bGFkbyBNYXlvIHBvciBEZXBhcnRhbWVudG8qKg0KIA0KYGBge3J9DQpIb3Jhc1BvckRlcGFydGFtZW50b01heW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNC0yMCIgJiBGZWNoYTwiMjAyMS0wNS0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KZ3QoSG9yYXNQb3JEZXBhcnRhbWVudG9NYXlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIE1heW8gcG9yIGRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKERlcGFydGFtZW50byA9ICJEZXBhcnRhbWVudG8iLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQoNCg0KIyAqKlRvdGFsIGRlIGhvcmFzIGFjdW11bGFkYXMgZW4gQWJyaWwgMjAyMSoqDQoNCmBgYHtyIG91dC53aWR0aD0iNDAlIiwgZmlnLnNob3c9ImhvbGQifQ0KSG9yYXNQb3JUaXBvQWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShgVGlwbyBkZSBob3JhYCkgJT4lDQogIHN1bW1hcmlzZShzdW09c3VtKGBDYW50LiBIb3Jhc2ApLCBuID0gbigpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhzdW0pKQ0KDQpIb3Jhc1RvdGFsYWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYENhbnQuIEhvcmFzYCkgJT4lIA0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkNCg0KZ3QoSG9yYXNQb3JUaXBvQWJyaWwpICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJBY3VtdWxhZG8gQWJyaWwgc2Vnw7puIFRpcG8gZGUgSG9yYSIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKGBUaXBvIGRlIGhvcmFgID0gIlRpcG8gZGUgaG9yYSIsDQogICAgICAgICAgICAgc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KZ3QoSG9yYXNUb3RhbGFicmlsKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEFicmlsIiwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJBw7FvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KDQpgYGANCmBgYHtyfQ0KaG9yYXM1MGFicmlsPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDMtMjAiICYgRmVjaGE8IjIwMjEtMDQtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZmlsdGVyKGBUaXBvIGRlIGhvcmFgPT0iSHJzLiA1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTAwYWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwYWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIikgJT4lIA0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDE1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQogIA0KDQpwb25kZXJhZGFzNTBhYnJpbDwtaG9yYXM1MGFicmlsKjEuNQ0KcG9uZGVyYWRhczEwMGFicmlsPC1ob3JhczEwMGFicmlsKjINCnBvbmRlcmFkYXMxNTBhYnJpbDwtaG9yYXMxNTBhYnJpbCoyLjUNCmBgYA0KDQoqKkxhcyBob3JhcyBwb25kZXJhZGFzIGFsIDUwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzNTBhYnJpbGAgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxMDAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxMDBhYnJpbGAgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBhYnJpbGAgaG9yYXMuKioNCmBgYHtyfQ0KZ3JhZmljb0FicmlsPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDMtMjAiICYgRmVjaGE8IjIwMjEtMDQtMjEiKQ0KDQpnZ3Bsb3QoZ3JhZmljb0FicmlsLCBhZXMoeCA9IERlcGFydGFtZW50bywgeT1gQ2FudC4gSG9yYXNgLCBmaWxsPWBUaXBvIGRlIGhvcmFgKSkrDQogIGdlb21fY29sKCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHNpemUgPSByZWwoMC41KSkpKw0KICBnZ3RpdGxlKCJDYW50aWRhZCB5IHRpcG9zIGRlIGhvcmEgcG9yIGRlcGFydGFtZW50byBBYnJpbCAyMDIxIikNCmBgYA0KIA0KIyMgKipBY3VtdWxhZG8gQWJyaWwgcG9yIERlcGFydGFtZW50byoqDQogDQpgYGB7cn0NCkhvcmFzUG9yRGVwYXJ0YW1lbnRvQWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KZ3QoSG9yYXNQb3JEZXBhcnRhbWVudG9BYnJpbCkgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBBYnJpbCBwb3IgZGVwYXJ0YW1lbnRvIiwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJBw7FvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoRGVwYXJ0YW1lbnRvID0gIkRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KDQpgYGANCg0KDQojICoqTWFyem8gMjAyMSoqDQpgYGB7cn0NCmZpbHRyb0ZlY2hhPC10b3RhbDIwMjEgJT4lDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMi0yMCIgJiBGZWNoYTwiMjAyMS0wMy0yMSIpICU+JQ0KICBhcnJhbmdlKEZlY2hhKQ0KDQptYXJ6bzIxcG9yRGVwYXJ0YW1lbnRvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDItMjAiICYgRmVjaGE8IjIwMjEtMDMtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoRGVwYXJ0YW1lbnRvKSAlPiUNCiAgc3VtbWFyaXNlKHN1bT1zdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpICU+JSANCiAgYXJyYW5nZShkZXNjKHN1bSkpDQoNCmd0KG1hcnpvMjFwb3JEZXBhcnRhbWVudG8pICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJIb3JhcyB0b3RhbGVzIHBvciBkZXBhcnRhbWVudG8iLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIk1hcnpvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoRGVwYXJ0YW1lbnRvID0gIkRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VtID0gIkhvcmFzIFRvdGFsZXMiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGZpbHRyb0ZlY2hhLCBhZXMoeCA9IERlcGFydGFtZW50bywgeT1gQ2FudC4gSG9yYXNgLCBmaWxsPWBUaXBvIGRlIGhvcmFgKSkrDQogIGdlb21fY29sKCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHNpemUgPSByZWwoMC41KSkpKw0KICBnZ3RpdGxlKCJDYW50aWRhZCB5IHRpcG9zIGRlIGhvcmEgcG9yIGRlcGFydGFtZW50byBNYXJ6byAyMDIxIikNCmBgYA0K