@agilo/medusa-analytics-plugin 1.2.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,184 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateDateRangeMethod = void 0;
4
- exports.getWeekRangeKeyForDate = getWeekRangeKeyForDate;
5
- exports.getAllWeekRangeKeys = getAllWeekRangeKeys;
6
- exports.getDateGroupingKey = getDateGroupingKey;
7
- exports.getAllDateGroupingKeys = getAllDateGroupingKeys;
8
- const date_fns_1 = require("date-fns");
9
- /**
10
- * Preset functions to calculate current and previous date ranges.
11
- * @param query Query object containing optional date_from, date_to, and preset name.
12
- * @returns Object with current date range, previous date range, and number of days in current range.
13
- */
14
- exports.calculateDateRangeMethod = {
15
- custom: (query) => {
16
- if (!query.date_from || !query.date_to) {
17
- throw new Error('No date range provided');
18
- }
19
- const start = (0, date_fns_1.parseISO)(query.date_from);
20
- const end = (0, date_fns_1.parseISO)(query.date_to);
21
- const days = (0, date_fns_1.differenceInCalendarDays)(end, start) + 1;
22
- const prevEnd = new Date(start);
23
- prevEnd.setDate(start.getDate() - 1);
24
- const prevStart = new Date(prevEnd);
25
- prevStart.setDate(prevEnd.getDate() - (days - 1));
26
- return {
27
- current: {
28
- start: new Date(query.date_from),
29
- end: new Date(query.date_to),
30
- },
31
- previous: { start: prevStart, end: prevEnd },
32
- days,
33
- };
34
- },
35
- 'this-month': () => {
36
- const now = new Date();
37
- const start = (0, date_fns_1.startOfMonth)(now);
38
- const end = (0, date_fns_1.endOfMonth)(now);
39
- const prevStart = (0, date_fns_1.startOfMonth)((0, date_fns_1.subMonths)(now, 1));
40
- const prevEnd = (0, date_fns_1.endOfMonth)((0, date_fns_1.subMonths)(now, 1));
41
- const days = (0, date_fns_1.differenceInCalendarDays)(end, start) + 1;
42
- return {
43
- current: { start, end },
44
- previous: { start: prevStart, end: prevEnd },
45
- days,
46
- };
47
- },
48
- 'last-month': () => {
49
- const last = (0, date_fns_1.subMonths)(new Date(), 1);
50
- const start = (0, date_fns_1.startOfMonth)(last);
51
- const end = (0, date_fns_1.endOfMonth)(last);
52
- const prevStart = (0, date_fns_1.startOfMonth)((0, date_fns_1.subMonths)(last, 1));
53
- const prevEnd = (0, date_fns_1.endOfMonth)((0, date_fns_1.subMonths)(last, 1));
54
- const days = (0, date_fns_1.differenceInCalendarDays)(end, start) + 1;
55
- return {
56
- current: { start, end },
57
- previous: { start: prevStart, end: prevEnd },
58
- days,
59
- };
60
- },
61
- 'last-3-months': () => {
62
- const now = new Date();
63
- const start = (0, date_fns_1.startOfMonth)((0, date_fns_1.subMonths)(now, 3));
64
- const end = (0, date_fns_1.endOfMonth)((0, date_fns_1.subMonths)(now, 1));
65
- const prevStart = (0, date_fns_1.startOfMonth)((0, date_fns_1.subMonths)(now, 6));
66
- const prevEnd = (0, date_fns_1.endOfMonth)((0, date_fns_1.subMonths)(now, 4));
67
- const days = (0, date_fns_1.differenceInCalendarDays)(end, start) + 1;
68
- return {
69
- current: { start, end },
70
- previous: { start: prevStart, end: prevEnd },
71
- days,
72
- };
73
- },
74
- };
75
- /**
76
- * Returns a formatted key representing the week range in which a given date falls,
77
- * based on a provided overall date range.
78
- *
79
- * @param date The date to check.
80
- * @param dateFrom The start date of the overall range (in ISO string format).
81
- * @param dateTo The end date of the overall range (in ISO string format).
82
- * @returns A string key in the format 'dd.MM-dd.MM' or fallback 'yyyy-MM-dd' if no range is found.
83
- */
84
- function getWeekRangeKeyForDate(date, dateFrom, dateTo) {
85
- const start = (0, date_fns_1.startOfDay)((0, date_fns_1.parseISO)(dateFrom));
86
- const end = (0, date_fns_1.endOfDay)((0, date_fns_1.parseISO)(dateTo));
87
- const targetDate = (0, date_fns_1.startOfDay)(date);
88
- let current = start;
89
- while (current <= end) {
90
- const weekStart = current;
91
- const weekEnd = (0, date_fns_1.isAfter)((0, date_fns_1.addDays)(current, 6), end)
92
- ? end
93
- : (0, date_fns_1.addDays)(current, 6);
94
- if (targetDate >= weekStart && targetDate <= weekEnd) {
95
- const startMonth = weekStart.getMonth();
96
- const endMonth = weekEnd.getMonth();
97
- if (startMonth === endMonth) {
98
- const startDay = weekStart.getDate();
99
- const endDay = weekEnd.getDate();
100
- if (startDay === endDay) {
101
- return `${(0, date_fns_1.format)(weekStart, 'd.M')}`;
102
- }
103
- return `${(0, date_fns_1.format)(weekStart, 'd.')}-${(0, date_fns_1.format)(weekEnd, 'd.M')}`;
104
- }
105
- else {
106
- return `${(0, date_fns_1.format)(weekStart, 'd.M')}-${(0, date_fns_1.format)(weekEnd, 'd.M')}`;
107
- }
108
- }
109
- current = (0, date_fns_1.addDays)(weekEnd, 1);
110
- }
111
- return (0, date_fns_1.format)(targetDate, 'yyyy-MM-dd');
112
- }
113
- /**
114
- * Generates a list of week range keys (formatted as 'dd.MM-dd.MM') between the given start and end dates.
115
- *
116
- * @param start The start date of the overall range.
117
- * @param end The end date of the overall range.
118
- * @returns An array of strings representing week ranges.
119
- */
120
- function getAllWeekRangeKeys(start, end) {
121
- const weeks = [];
122
- let current = start;
123
- while (current <= end) {
124
- const weekStart = current;
125
- const weekEnd = (0, date_fns_1.isAfter)((0, date_fns_1.addDays)(current, 6), end)
126
- ? end
127
- : (0, date_fns_1.addDays)(current, 6);
128
- const startMonth = weekStart.getMonth();
129
- const endMonth = weekEnd.getMonth();
130
- if (startMonth === endMonth) {
131
- const startDay = weekStart.getDate();
132
- const endDay = weekEnd.getDate();
133
- if (startDay === endDay) {
134
- weeks.push(`${(0, date_fns_1.format)(weekStart, 'd.M')}`);
135
- }
136
- else {
137
- weeks.push(`${(0, date_fns_1.format)(weekStart, 'd.')}-${(0, date_fns_1.format)(weekEnd, 'd.M')}`);
138
- }
139
- }
140
- else {
141
- weeks.push(`${(0, date_fns_1.format)(weekStart, 'd.M')}-${(0, date_fns_1.format)(weekEnd, 'd.M')}`);
142
- }
143
- current = (0, date_fns_1.addDays)(weekEnd, 1);
144
- }
145
- return weeks;
146
- }
147
- /**
148
- * Generates a grouping key for a given date depending on the selected grouping mode (day, week, or month).
149
- *
150
- * @param date The date for which to generate the key.
151
- * @param groupBy Grouping mode: 'day', 'week', or 'month'.
152
- * @param dateFrom Optional start date of the range (required for 'week' grouping).
153
- * @param dateTo Optional end date of the range (required for 'week' grouping).
154
- * @returns A string key used for grouping data.
155
- */
156
- function getDateGroupingKey(date, groupBy, dateFrom, dateTo) {
157
- if (groupBy === 'month') {
158
- return (0, date_fns_1.format)((0, date_fns_1.startOfMonth)(new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()))), 'yyyy-MM');
159
- }
160
- if (groupBy === 'week' && dateFrom && dateTo) {
161
- return getWeekRangeKeyForDate(new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())), dateFrom, dateTo);
162
- }
163
- return (0, date_fns_1.format)(new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())), 'yyyy-MM-dd');
164
- }
165
- /**
166
- * Generates a list of grouping keys for all periods between two dates, depending on the selected grouping mode.
167
- *
168
- * @param groupBy Grouping mode: 'day', 'week', or 'month'.
169
- * @param dateFrom Start date of the range (in ISO string format).
170
- * @param dateTo End date of the range (in ISO string format).
171
- * @returns An array of strings representing keys for each grouped period.
172
- */
173
- function getAllDateGroupingKeys(groupBy, dateFrom, dateTo) {
174
- const start = (0, date_fns_1.parseISO)(dateFrom);
175
- const end = (0, date_fns_1.parseISO)(dateTo);
176
- if (groupBy === 'day') {
177
- return (0, date_fns_1.eachDayOfInterval)({ start, end }).map((d) => (0, date_fns_1.format)(d, 'yyyy-MM-dd'));
178
- }
179
- if (groupBy === 'month') {
180
- return (0, date_fns_1.eachMonthOfInterval)({ start, end }).map((d) => (0, date_fns_1.format)(d, 'yyyy-MM'));
181
- }
182
- return getAllWeekRangeKeys(start, end);
183
- }
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL29yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrSEEsd0RBc0NDO0FBU0Qsa0RBNkJDO0FBV0QsZ0RBK0JDO0FBVUQsd0RBbUJDO0FBclFELHVDQWFrQjtBQUlsQjs7OztHQUlHO0FBQ1UsUUFBQSx3QkFBd0IsR0FPakM7SUFDRixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUEsbUJBQVEsRUFBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBQSxtQkFBUSxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFBLG1DQUF3QixFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNoQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUM3QjtZQUNELFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUM1QyxJQUFJO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLEVBQUUsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBQSx1QkFBWSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUEscUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUU1QixNQUFNLFNBQVMsR0FBRyxJQUFBLHVCQUFZLEVBQUMsSUFBQSxvQkFBUyxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUEscUJBQVUsRUFBQyxJQUFBLG9CQUFTLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQ0FBd0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRELE9BQU87WUFDTCxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUM1QyxJQUFJO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLEVBQUUsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVMsRUFBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFBLHFCQUFVLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0IsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBWSxFQUFDLElBQUEsb0JBQVMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHFCQUFVLEVBQUMsSUFBQSxvQkFBUyxFQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sSUFBSSxHQUFHLElBQUEsbUNBQXdCLEVBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0RCxPQUFPO1lBQ0wsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUN2QixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7WUFDNUMsSUFBSTtTQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUEsdUJBQVksRUFBQyxJQUFBLG9CQUFTLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBQSxxQkFBVSxFQUFDLElBQUEsb0JBQVMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxJQUFBLHVCQUFZLEVBQUMsSUFBQSxvQkFBUyxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUEscUJBQVUsRUFBQyxJQUFBLG9CQUFTLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQ0FBd0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRELE9BQU87WUFDTCxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUM1QyxJQUFJO1NBQ0wsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FDcEMsSUFBVSxFQUNWLFFBQWdCLEVBQ2hCLE1BQWM7SUFFZCxNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFVLEVBQUMsSUFBQSxtQkFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBQSxtQkFBUSxFQUFDLElBQUEsbUJBQVEsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUEscUJBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUVwQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFcEIsT0FBTyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUEsa0JBQU8sRUFBQyxJQUFBLGtCQUFPLEVBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsR0FBRztZQUNMLENBQUMsQ0FBQyxJQUFBLGtCQUFPLEVBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXhCLElBQUksVUFBVSxJQUFJLFNBQVMsSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7WUFDckQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVwQyxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUN4QixPQUFPLEdBQUcsSUFBQSxpQkFBTSxFQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxDQUFDO2dCQUVELE9BQU8sR0FBRyxJQUFBLGlCQUFNLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUEsaUJBQU0sRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLElBQUEsaUJBQU0sRUFBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBQSxpQkFBTSxFQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxHQUFHLElBQUEsa0JBQU8sRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sSUFBQSxpQkFBTSxFQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsS0FBVyxFQUFFLEdBQVM7SUFDeEQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVwQixPQUFPLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBQSxrQkFBTyxFQUFDLElBQUEsa0JBQU8sRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxHQUFHO1lBQ0wsQ0FBQyxDQUFDLElBQUEsa0JBQU8sRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVwQyxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSxpQkFBTSxFQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLGlCQUFNLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUEsaUJBQU0sRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLGlCQUFNLEVBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUEsaUJBQU0sRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxPQUFPLEdBQUcsSUFBQSxrQkFBTyxFQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBVSxFQUNWLE9BQWlDLEVBQ2pDLFFBQWlCLEVBQ2pCLE1BQWU7SUFFZixJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUEsaUJBQU0sRUFDWCxJQUFBLHVCQUFZLEVBQ1YsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUN2RSxDQUNGLEVBQ0QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssTUFBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM3QyxPQUFPLHNCQUFzQixDQUMzQixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3ZFLEVBQ0QsUUFBUSxFQUNSLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sSUFBQSxpQkFBTSxFQUNYLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDdkUsRUFDRCxZQUFZLENBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQ3BDLE9BQWlDLEVBQ2pDLFFBQWdCLEVBQ2hCLE1BQWM7SUFFZCxNQUFNLEtBQUssR0FBRyxJQUFBLG1CQUFRLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBQSxtQkFBUSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTdCLElBQUksT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBQSw0QkFBaUIsRUFBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ2pELElBQUEsaUJBQU0sRUFBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFBLDhCQUFtQixFQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGlCQUFNLEVBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUMifQ==