@mongrov/analytics 0.6.0 → 0.8.0
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.
- package/README.md +23 -10
- package/UPGRADING.md +456 -0
- package/dist/core/device-events.d.ts +14 -0
- package/dist/core/device-events.d.ts.map +1 -0
- package/dist/core/device-events.js +13 -0
- package/dist/core/device-events.js.map +1 -0
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/extensions.d.ts +21 -4
- package/dist/core/extensions.d.ts.map +1 -1
- package/dist/core/extensions.js +21 -4
- package/dist/core/extensions.js.map +1 -1
- package/dist/core/factory.d.ts.map +1 -1
- package/dist/core/factory.js +125 -23
- package/dist/core/factory.js.map +1 -1
- package/dist/core/hooks.js +1 -1
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/index.d.ts +13 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/insight.d.ts +44 -0
- package/dist/core/insight.d.ts.map +1 -0
- package/dist/core/insight.js +62 -0
- package/dist/core/insight.js.map +1 -0
- package/dist/core/metric_metadata.d.ts +55 -0
- package/dist/core/metric_metadata.d.ts.map +1 -1
- package/dist/core/metric_metadata.js +35 -7
- package/dist/core/metric_metadata.js.map +1 -1
- package/dist/core/migrations.d.ts.map +1 -1
- package/dist/core/migrations.js +103 -2
- package/dist/core/migrations.js.map +1 -1
- package/dist/core/retention.d.ts +44 -13
- package/dist/core/retention.d.ts.map +1 -1
- package/dist/core/retention.js +49 -22
- package/dist/core/retention.js.map +1 -1
- package/dist/core/sampling.d.ts +70 -0
- package/dist/core/sampling.d.ts.map +1 -0
- package/dist/core/sampling.js +107 -0
- package/dist/core/sampling.js.map +1 -0
- package/dist/core/schemas.d.ts +73 -2
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +160 -5
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/table_metadata.d.ts.map +1 -1
- package/dist/core/table_metadata.js +3 -0
- package/dist/core/table_metadata.js.map +1 -1
- package/dist/core/types.d.ts +45 -10
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/warehouse.d.ts +28 -0
- package/dist/core/warehouse.d.ts.map +1 -1
- package/dist/core/warehouse.js +44 -0
- package/dist/core/warehouse.js.map +1 -1
- package/dist/core/watermark-cache.d.ts +75 -0
- package/dist/core/watermark-cache.d.ts.map +1 -0
- package/dist/core/watermark-cache.js +0 -0
- package/dist/core/watermark-cache.js.map +1 -0
- package/dist/rules/__fakes__/fakeEngine.d.ts +2 -0
- package/dist/rules/__fakes__/fakeEngine.d.ts.map +1 -1
- package/dist/rules/__fakes__/fakeEngine.js +4 -0
- package/dist/rules/__fakes__/fakeEngine.js.map +1 -1
- package/dist/rules/baseline-reader.d.ts +55 -0
- package/dist/rules/baseline-reader.d.ts.map +1 -0
- package/dist/rules/baseline-reader.js +111 -0
- package/dist/rules/baseline-reader.js.map +1 -0
- package/dist/rules/compiler.d.ts +36 -1
- package/dist/rules/compiler.d.ts.map +1 -1
- package/dist/rules/compiler.js +185 -39
- package/dist/rules/compiler.js.map +1 -1
- package/dist/rules/defaults/luminx.d.ts.map +1 -1
- package/dist/rules/defaults/luminx.js +8 -0
- package/dist/rules/defaults/luminx.js.map +1 -1
- package/dist/rules/defaults/viva.d.ts.map +1 -1
- package/dist/rules/defaults/viva.js +7 -0
- package/dist/rules/defaults/viva.js.map +1 -1
- package/dist/rules/defaults/yogaring.d.ts.map +1 -1
- package/dist/rules/defaults/yogaring.js +7 -0
- package/dist/rules/defaults/yogaring.js.map +1 -1
- package/dist/rules/defaults/ziva.d.ts.map +1 -1
- package/dist/rules/defaults/ziva.js +100 -24
- package/dist/rules/defaults/ziva.js.map +1 -1
- package/dist/rules/evaluator.d.ts +14 -3
- package/dist/rules/evaluator.d.ts.map +1 -1
- package/dist/rules/evaluator.js +157 -5
- package/dist/rules/evaluator.js.map +1 -1
- package/dist/rules/factory.d.ts.map +1 -1
- package/dist/rules/factory.js +5 -1
- package/dist/rules/factory.js.map +1 -1
- package/dist/rules/index.d.ts +2 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +2 -1
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/schema.d.ts +75 -4
- package/dist/rules/schema.d.ts.map +1 -1
- package/dist/rules/schema.js +44 -0
- package/dist/rules/schema.js.map +1 -1
- package/dist/rules/types.d.ts +16 -1
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/validator.d.ts.map +1 -1
- package/dist/rules/validator.js +89 -0
- package/dist/rules/validator.js.map +1 -1
- package/dist/sync/baseline-compute.d.ts +63 -0
- package/dist/sync/baseline-compute.d.ts.map +1 -0
- package/dist/sync/baseline-compute.js +211 -0
- package/dist/sync/baseline-compute.js.map +1 -0
- package/dist/sync/events.d.ts +19 -5
- package/dist/sync/events.d.ts.map +1 -1
- package/dist/sync/events.js +17 -0
- package/dist/sync/events.js.map +1 -1
- package/dist/sync/factory.d.ts +54 -8
- package/dist/sync/factory.d.ts.map +1 -1
- package/dist/sync/factory.js +145 -46
- package/dist/sync/factory.js.map +1 -1
- package/dist/sync/fetcher.d.ts +15 -2
- package/dist/sync/fetcher.d.ts.map +1 -1
- package/dist/sync/fetcher.js +43 -7
- package/dist/sync/fetcher.js.map +1 -1
- package/dist/sync/flusher.d.ts +52 -2
- package/dist/sync/flusher.d.ts.map +1 -1
- package/dist/sync/flusher.js +78 -9
- package/dist/sync/flusher.js.map +1 -1
- package/dist/sync/index.d.ts +3 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mapper/activity.d.ts.map +1 -1
- package/dist/sync/mapper/activity.js +2 -1
- package/dist/sync/mapper/activity.js.map +1 -1
- package/dist/sync/mapper/firmware.d.ts +3 -12
- package/dist/sync/mapper/firmware.d.ts.map +1 -1
- package/dist/sync/mapper/firmware.js +2 -8
- package/dist/sync/mapper/firmware.js.map +1 -1
- package/dist/sync/mapper/ring-config.d.ts +76 -28
- package/dist/sync/mapper/ring-config.d.ts.map +1 -1
- package/dist/sync/mapper/ring-config.js +118 -35
- package/dist/sync/mapper/ring-config.js.map +1 -1
- package/dist/sync/mapper/schema.d.ts +669 -0
- package/dist/sync/mapper/schema.d.ts.map +1 -0
- package/dist/sync/mapper/schema.js +160 -0
- package/dist/sync/mapper/schema.js.map +1 -0
- package/dist/sync/mapper/sleep.d.ts +58 -13
- package/dist/sync/mapper/sleep.d.ts.map +1 -1
- package/dist/sync/mapper/sleep.js +141 -44
- package/dist/sync/mapper/sleep.js.map +1 -1
- package/dist/sync/mapper/types.d.ts +118 -29
- package/dist/sync/mapper/types.d.ts.map +1 -1
- package/dist/sync/pending_closes.js +2 -2
- package/dist/sync/pending_closes.js.map +1 -1
- package/dist/sync/pusher.js +2 -2
- package/dist/sync/pusher.js.map +1 -1
- package/dist/sync/scheduler.d.ts +7 -0
- package/dist/sync/scheduler.d.ts.map +1 -1
- package/dist/sync/scheduler.js +14 -0
- package/dist/sync/scheduler.js.map +1 -1
- package/dist/tools/__fakes__/engine.d.ts +2 -0
- package/dist/tools/__fakes__/engine.d.ts.map +1 -1
- package/dist/tools/__fakes__/engine.js +10 -0
- package/dist/tools/__fakes__/engine.js.map +1 -1
- package/dist/tools/authorize.d.ts +19 -12
- package/dist/tools/authorize.d.ts.map +1 -1
- package/dist/tools/authorize.js +31 -40
- package/dist/tools/authorize.js.map +1 -1
- package/dist/tools/factory.d.ts +2 -0
- package/dist/tools/factory.d.ts.map +1 -1
- package/dist/tools/factory.js +12 -1
- package/dist/tools/factory.js.map +1 -1
- package/dist/tools/formatters/copy-guidelines.d.ts +57 -0
- package/dist/tools/formatters/copy-guidelines.d.ts.map +1 -0
- package/dist/tools/formatters/copy-guidelines.js +110 -0
- package/dist/tools/formatters/copy-guidelines.js.map +1 -0
- package/dist/tools/formatters/index.d.ts +14 -0
- package/dist/tools/formatters/index.d.ts.map +1 -0
- package/dist/tools/formatters/index.js +14 -0
- package/dist/tools/formatters/index.js.map +1 -0
- package/dist/tools/formatters/spo2.d.ts +21 -0
- package/dist/tools/formatters/spo2.d.ts.map +1 -0
- package/dist/tools/formatters/spo2.js +79 -0
- package/dist/tools/formatters/spo2.js.map +1 -0
- package/dist/tools/{formatters.d.ts → formatters/text.d.ts} +1 -1
- package/dist/tools/formatters/text.d.ts.map +1 -0
- package/dist/tools/{formatters.js → formatters/text.js} +1 -1
- package/dist/tools/formatters/text.js.map +1 -0
- package/dist/tools/impls/activity.d.ts +2 -2
- package/dist/tools/impls/activity.js +7 -3
- package/dist/tools/impls/activity.js.map +1 -1
- package/dist/tools/impls/anomaly.d.ts +2 -2
- package/dist/tools/impls/anomaly.js +8 -4
- package/dist/tools/impls/anomaly.js.map +1 -1
- package/dist/tools/impls/compare.d.ts +2 -2
- package/dist/tools/impls/compare.js +8 -4
- package/dist/tools/impls/compare.js.map +1 -1
- package/dist/tools/impls/hrv.d.ts +2 -2
- package/dist/tools/impls/hrv.js +6 -2
- package/dist/tools/impls/hrv.js.map +1 -1
- package/dist/tools/impls/insights.d.ts +4 -4
- package/dist/tools/impls/insights.d.ts.map +1 -1
- package/dist/tools/impls/insights.js +10 -3
- package/dist/tools/impls/insights.js.map +1 -1
- package/dist/tools/impls/sleep.d.ts +2 -2
- package/dist/tools/impls/sleep.js +6 -2
- package/dist/tools/impls/sleep.js.map +1 -1
- package/dist/tools/impls/spo2.d.ts +52 -0
- package/dist/tools/impls/spo2.d.ts.map +1 -0
- package/dist/tools/impls/spo2.js +65 -0
- package/dist/tools/impls/spo2.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/guard.d.ts +28 -11
- package/dist/tools/mcp/guard.d.ts.map +1 -1
- package/dist/tools/mcp/guard.js +45 -15
- package/dist/tools/mcp/guard.js.map +1 -1
- package/dist/tools/mcp/index.d.ts +1 -1
- package/dist/tools/mcp/index.d.ts.map +1 -1
- package/dist/tools/mcp/index.js +1 -1
- package/dist/tools/mcp/index.js.map +1 -1
- package/dist/tools/mcp/server.d.ts.map +1 -1
- package/dist/tools/mcp/server.js +4 -0
- package/dist/tools/mcp/server.js.map +1 -1
- package/dist/tools/mcp/transports/http.d.ts.map +1 -1
- package/dist/tools/mcp/transports/http.js +4 -0
- package/dist/tools/mcp/transports/http.js.map +1 -1
- package/package.json +8 -5
- package/dist/tools/formatters.d.ts.map +0 -1
- package/dist/tools/formatters.js.map +0 -1
|
@@ -1,59 +1,142 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ring config mapper (T-08).
|
|
2
|
+
* Ring config mapper (T-08, Sprint 5 T-09/T-10).
|
|
3
3
|
*
|
|
4
4
|
* Firmware `ring.automaticMonitoringData[]` describes which metrics the ring
|
|
5
|
-
* currently samples
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* currently samples and on what schedule. We store these as SCD-2-style rows
|
|
6
|
+
* in `device_config`, with `valid_from = now()` and `valid_to = null` on the
|
|
7
|
+
* new insert.
|
|
8
|
+
*
|
|
9
|
+
* ## The firmware boundary (principles 20 + 21)
|
|
10
|
+
*
|
|
11
|
+
* The vendor struct is `AutomaticMonitoring_J2301A` (JStyle J2301A SDK):
|
|
12
|
+
*
|
|
13
|
+
* ```c
|
|
14
|
+
* int mode;
|
|
15
|
+
* int startTime_Hour; int startTime_Minutes;
|
|
16
|
+
* int endTime_Hour; int endTime_Minutes;
|
|
17
|
+
* MyWeeks_J2301A weeks; // 7 booleans
|
|
18
|
+
* int intervalTime;
|
|
19
|
+
* int dataType; // 1 = heartRate, 2 = spo2, 3 = temperature, 4 = HRV
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Everything firmware-shaped is translated here and nothing crosses into
|
|
23
|
+
* the warehouse: `dataType` becomes our metric id, split hour/minute fields
|
|
24
|
+
* become `HH:MM` strings, and the seven-boolean `weeks` struct becomes a
|
|
25
|
+
* bitmask. Principle 21 is explicit that firmware enums must not reach the
|
|
26
|
+
* schema, so `device_config` stores `metric`, never `data_type`.
|
|
27
|
+
*
|
|
28
|
+
* Prior versions inverted this: the mapper's input type had already
|
|
29
|
+
* discarded `dataType`, so a consumer-supplied `RingConfigTranslator` had
|
|
30
|
+
* to invent the enum back from our own metric names — the schema ended up
|
|
31
|
+
* holding a firmware integer that the app, not the firmware, produced.
|
|
8
32
|
*
|
|
9
33
|
* Closing prior config (SCD-2 semantics):
|
|
10
34
|
* The mapper accepts an optional `activePriorConfigs` map keyed by
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* absent from the new firmware are left open (the ring is silent on them,
|
|
17
|
-
* not disabling them).
|
|
18
|
-
*
|
|
19
|
-
* Translation:
|
|
20
|
-
* The mapper cannot invent `data_type` integers or `start_time`/`end_time`
|
|
21
|
-
* strings on its own — those are consumer-specific enumerations. Callers
|
|
22
|
-
* MUST pass a `RingConfigTranslator` in `opts` (see `mapper/types.ts`).
|
|
23
|
-
* Without a translator the mapper cannot produce a schema-shaped row, so
|
|
24
|
-
* the option is required — TypeScript enforces this at every call site.
|
|
25
|
-
*
|
|
26
|
-
* The mapper stays pure: no engine access, no clock reads beyond the injected
|
|
27
|
-
* `now` (defaults to `new Date()` for production).
|
|
35
|
+
* metric. For every metric present in the new snapshot, if a prior config
|
|
36
|
+
* was open, it emits a `close` entry so the sink can `UPDATE ... SET
|
|
37
|
+
* valid_to = now()` before the INSERT lands. Metrics present in the prior
|
|
38
|
+
* map but absent from the new snapshot are left open — the ring is silent
|
|
39
|
+
* on them, not disabling them.
|
|
28
40
|
*/
|
|
29
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Firmware `dataType` → our metric id (Sprint 5 T-09).
|
|
43
|
+
*
|
|
44
|
+
* Verbatim from the vendor header's own comment. Note this is a **1:1**
|
|
45
|
+
* map: `dataType = 2` is SpO₂ alone, and temperature is its own code 3.
|
|
46
|
+
* The Sprint 5 spec described 2 as "spo2 + temperature (shared schedule)"
|
|
47
|
+
* requiring a fan-out to two rows; the SDK does not agree, so there is
|
|
48
|
+
* nothing to fan out.
|
|
49
|
+
*
|
|
50
|
+
* (Whether firmware *slaves* the two schedules together in practice is a
|
|
51
|
+
* separate, still-open question — but it would not change this mapping,
|
|
52
|
+
* only mean the ring reports two windows with identical timings.)
|
|
53
|
+
*/
|
|
54
|
+
export const FIRMWARE_DATA_TYPE_TO_METRIC = Object.freeze({
|
|
55
|
+
1: 'heart_rate',
|
|
56
|
+
2: 'spo2',
|
|
57
|
+
3: 'temperature',
|
|
58
|
+
4: 'hrv',
|
|
59
|
+
});
|
|
60
|
+
/** Reverse map, for diagnostics and for keying prior-config reads. */
|
|
61
|
+
export const METRIC_TO_FIRMWARE_DATA_TYPE = Object.freeze(Object.fromEntries(Object.entries(FIRMWARE_DATA_TYPE_TO_METRIC).map(([dt, m]) => [m, Number(dt)])));
|
|
62
|
+
/**
|
|
63
|
+
* Translate a firmware `dataType` to the metric(s) it schedules.
|
|
64
|
+
*
|
|
65
|
+
* Returns an array for forward-compatibility — if a future firmware
|
|
66
|
+
* revision genuinely does share one code across metrics, this signature
|
|
67
|
+
* absorbs it without a breaking change.
|
|
68
|
+
*
|
|
69
|
+
* @throws on an unknown code, with the raw value in the message. Silently
|
|
70
|
+
* dropping an unrecognised code would mean a metric the ring is actively
|
|
71
|
+
* sampling never appears in `device_config`, and every cadence-dependent
|
|
72
|
+
* consumer would fall back to the `metric_metadata` default without
|
|
73
|
+
* anyone noticing.
|
|
74
|
+
*/
|
|
75
|
+
export function firmwareDataTypeToMetrics(dataType) {
|
|
76
|
+
const metric = FIRMWARE_DATA_TYPE_TO_METRIC[dataType];
|
|
77
|
+
if (metric === undefined) {
|
|
78
|
+
const known = Object.entries(FIRMWARE_DATA_TYPE_TO_METRIC)
|
|
79
|
+
.map(([dt, m]) => `${dt}=${m}`)
|
|
80
|
+
.join(', ');
|
|
81
|
+
throw new Error(`mapRingConfig: unknown firmware dataType ${dataType}. `
|
|
82
|
+
+ `Known values: ${known}. A new value means the ring firmware added a `
|
|
83
|
+
+ `monitored metric — add it to FIRMWARE_DATA_TYPE_TO_METRIC and to `
|
|
84
|
+
+ `METRIC_METADATA rather than dropping it.`);
|
|
85
|
+
}
|
|
86
|
+
return [metric];
|
|
87
|
+
}
|
|
88
|
+
/** Vendor weekday order, LSB = Sunday. */
|
|
89
|
+
const WEEKDAY_ORDER = [
|
|
90
|
+
'sunday', 'monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday',
|
|
91
|
+
];
|
|
92
|
+
/**
|
|
93
|
+
* Seven booleans → a 7-bit mask for `device_config.weeks`.
|
|
94
|
+
* Bit 0 = Sunday … bit 6 = Saturday. All-days is `0x7F`.
|
|
95
|
+
*/
|
|
96
|
+
export function weekdaysToBitmask(weeks) {
|
|
97
|
+
if (!weeks)
|
|
98
|
+
return null;
|
|
99
|
+
let mask = 0;
|
|
100
|
+
WEEKDAY_ORDER.forEach((day, i) => {
|
|
101
|
+
if (weeks[day])
|
|
102
|
+
mask |= 1 << i;
|
|
103
|
+
});
|
|
104
|
+
return mask;
|
|
105
|
+
}
|
|
106
|
+
/** `HH:MM`, zero-padded. Null when the firmware supplied out-of-range values. */
|
|
107
|
+
export function formatClockTime(hour, minutes) {
|
|
108
|
+
if (!Number.isInteger(hour) || hour < 0 || hour > 23)
|
|
109
|
+
return null;
|
|
110
|
+
if (!Number.isInteger(minutes) || minutes < 0 || minutes > 59)
|
|
111
|
+
return null;
|
|
112
|
+
return `${String(hour).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;
|
|
113
|
+
}
|
|
114
|
+
export function mapRingConfig(fw, ctx, opts = {}) {
|
|
30
115
|
const now = opts.now ?? new Date();
|
|
31
116
|
const prior = opts.activePriorConfigs ?? new Map();
|
|
32
|
-
const translator = opts.translator;
|
|
33
117
|
const inserts = [];
|
|
34
118
|
const closes = [];
|
|
35
119
|
for (const window of fw.automaticMonitoringData ?? []) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
120
|
+
for (const metric of firmwareDataTypeToMetrics(window.dataType)) {
|
|
121
|
+
inserts.push(toRow(window, ctx, now, metric));
|
|
122
|
+
if (prior.has(metric)) {
|
|
123
|
+
closes.push({ device_id: ctx.deviceId, metric, valid_to: now });
|
|
124
|
+
}
|
|
40
125
|
}
|
|
41
126
|
}
|
|
42
127
|
return { inserts, closes };
|
|
43
128
|
}
|
|
44
|
-
function toRow(window, ctx, now,
|
|
45
|
-
const fields = translator.windowToSchemaFields(window);
|
|
129
|
+
function toRow(window, ctx, now, metric) {
|
|
46
130
|
return {
|
|
47
|
-
ts: now,
|
|
48
131
|
brand: ctx.brand,
|
|
49
132
|
family_id: ctx.familyId,
|
|
50
133
|
user_id: ctx.userId,
|
|
51
134
|
device_id: ctx.deviceId,
|
|
52
|
-
|
|
53
|
-
interval_minutes: window.
|
|
54
|
-
start_time:
|
|
55
|
-
end_time:
|
|
56
|
-
weeks:
|
|
135
|
+
metric,
|
|
136
|
+
interval_minutes: window.intervalTime,
|
|
137
|
+
start_time: formatClockTime(window.startTime_Hour, window.startTime_Minutes),
|
|
138
|
+
end_time: formatClockTime(window.endTime_Hour, window.endTime_Minutes),
|
|
139
|
+
weeks: weekdaysToBitmask(window.weeks),
|
|
57
140
|
valid_from: now,
|
|
58
141
|
valid_to: null,
|
|
59
142
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-config.js","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ring-config.js","sourceRoot":"","sources":["../../../src/sync/mapper/ring-config.ts"],"names":[],"mappings":"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"}
|