ngx-kel-agent 0.4.10 → 0.5.3
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/esm2020/lib/agent-message.service.mjs +18 -0
- package/esm2020/lib/agent.service.mjs +89 -196
- package/esm2020/lib/hamlib-messages.mjs +2 -0
- package/esm2020/lib/hamlib.service.mjs +48 -0
- package/esm2020/lib/wsjtx-messages.mjs +2 -0
- package/esm2020/lib/wsjtx.service.mjs +251 -0
- package/esm2020/public-api.mjs +6 -2
- package/fesm2015/ngx-kel-agent.mjs +360 -174
- package/fesm2015/ngx-kel-agent.mjs.map +1 -1
- package/fesm2020/ngx-kel-agent.mjs +359 -166
- package/fesm2020/ngx-kel-agent.mjs.map +1 -1
- package/lib/agent-message.service.d.ts +9 -0
- package/lib/agent.service.d.ts +112 -29
- package/lib/hamlib-messages.d.ts +10 -0
- package/lib/hamlib.service.d.ts +16 -0
- package/lib/{messages.d.ts → wsjtx-messages.d.ts} +0 -10
- package/lib/wsjtx.service.d.ts +64 -0
- package/package.json +4 -4
- package/public-api.d.ts +5 -1
- package/esm2020/lib/messages.mjs +0 -2
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
|
|
3
|
+
import { debounceTime } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./agent-message.service";
|
|
6
|
+
export class WsjtxService {
|
|
7
|
+
constructor(messages) {
|
|
8
|
+
this.messages = messages;
|
|
9
|
+
/** Whether we're getting any messages from WSJT-X. */
|
|
10
|
+
this.connected$ = new BehaviorSubject(false);
|
|
11
|
+
/** Subject for listening to WSJT-X "Heartbeat" messages. */
|
|
12
|
+
this.heartbeat$ = new ReplaySubject(1);
|
|
13
|
+
/** Subject for listening to WSJT-X "Status" messages. */
|
|
14
|
+
this.status$ = new ReplaySubject(1);
|
|
15
|
+
/** Subject for listening to WSJT-X "Decode" messages. */
|
|
16
|
+
this.decode$ = new Subject();
|
|
17
|
+
/** Subject for listening to WSJT-X "Clear" messages. */
|
|
18
|
+
this.clear$ = new Subject();
|
|
19
|
+
/** Subject for listening to WSJT-X "QsoLogged" messages. */
|
|
20
|
+
this.qsoLogged$ = new Subject();
|
|
21
|
+
/** Subject for listening to WSJT-X "Close" messages. */
|
|
22
|
+
this.close$ = new Subject();
|
|
23
|
+
/** Subject for listening to WSJT-X "WsprDecode" messages. */
|
|
24
|
+
this.wsprDecode$ = new Subject();
|
|
25
|
+
/** Subject for listening to WSJT-X "LoggedAdif" messages. */
|
|
26
|
+
this.loggedAdif$ = new Subject();
|
|
27
|
+
this.wsjtxId = 'WSJT-X';
|
|
28
|
+
this.setupBehaviors();
|
|
29
|
+
}
|
|
30
|
+
setupBehaviors() {
|
|
31
|
+
this.messages.rxMessage$.subscribe((msg) => this.handleMessage(msg));
|
|
32
|
+
// if we haven't heard from WSJT-X in 15 seconds, consider it "down"
|
|
33
|
+
this.connected$
|
|
34
|
+
.pipe(debounceTime(15000))
|
|
35
|
+
.subscribe(() => this.connected$.next(false));
|
|
36
|
+
// When WSJT-X announces it's closing, set it to "down" immediately
|
|
37
|
+
this.close$.subscribe(() => {
|
|
38
|
+
this.connected$.next(false);
|
|
39
|
+
});
|
|
40
|
+
// When WSJT-X goes down, clear its persistent message subjects
|
|
41
|
+
this.connected$.subscribe((isUp) => {
|
|
42
|
+
if (!isUp) {
|
|
43
|
+
this.heartbeat$.next(null);
|
|
44
|
+
this.status$.next(null);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
handleMessage(msg) {
|
|
49
|
+
if (!msg.wsjtx) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.connected$.next(true);
|
|
53
|
+
this.wsjtxId = msg.wsjtx.payload.id;
|
|
54
|
+
switch (msg.wsjtx.type) {
|
|
55
|
+
case 'HeartbeatMessage':
|
|
56
|
+
this.heartbeat$.next(msg.wsjtx.payload);
|
|
57
|
+
return;
|
|
58
|
+
case 'StatusMessage':
|
|
59
|
+
this.status$.next(msg.wsjtx.payload);
|
|
60
|
+
return;
|
|
61
|
+
case 'DecodeMessage':
|
|
62
|
+
this.decode$.next(msg.wsjtx.payload);
|
|
63
|
+
return;
|
|
64
|
+
case 'ClearMessage':
|
|
65
|
+
this.clear$.next(msg.wsjtx.payload);
|
|
66
|
+
return;
|
|
67
|
+
case 'QsoLoggedMessage':
|
|
68
|
+
this.qsoLogged$.next(msg.wsjtx.payload);
|
|
69
|
+
return;
|
|
70
|
+
case 'CloseMessage':
|
|
71
|
+
this.close$.next(msg.wsjtx.payload);
|
|
72
|
+
return;
|
|
73
|
+
case 'WSPRDecodeMessage':
|
|
74
|
+
this.wsprDecode$.next(msg.wsjtx.payload);
|
|
75
|
+
return;
|
|
76
|
+
case 'LoggedAdifMessage':
|
|
77
|
+
this.loggedAdif$.next(msg.wsjtx.payload);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Send a command to WSJT-X to clear the Band Activity window. */
|
|
82
|
+
clearBandActivity() {
|
|
83
|
+
const wsMsg = {
|
|
84
|
+
wsjtx: {
|
|
85
|
+
type: 'ClearMessage',
|
|
86
|
+
payload: { id: this.wsjtxId, window: 0 },
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
this.messages.txMessage$.next(wsMsg);
|
|
90
|
+
}
|
|
91
|
+
/** Send a command to WSJT-X to clear the Rx Frequency window. */
|
|
92
|
+
clearRxFreqWindow() {
|
|
93
|
+
const wsMsg = {
|
|
94
|
+
wsjtx: {
|
|
95
|
+
type: 'ClearMessage',
|
|
96
|
+
payload: { id: this.wsjtxId, window: 1 },
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
this.messages.txMessage$.next(wsMsg);
|
|
100
|
+
}
|
|
101
|
+
/** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */
|
|
102
|
+
clearAll() {
|
|
103
|
+
const wsMsg = {
|
|
104
|
+
wsjtx: {
|
|
105
|
+
type: 'ClearMessage',
|
|
106
|
+
payload: { id: this.wsjtxId, window: 2 },
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
this.messages.txMessage$.next(wsMsg);
|
|
110
|
+
}
|
|
111
|
+
/** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear
|
|
112
|
+
* previous WSJT-X decodes. */
|
|
113
|
+
replay() {
|
|
114
|
+
const wsMsg = {
|
|
115
|
+
wsjtx: {
|
|
116
|
+
type: 'ReplayMessage',
|
|
117
|
+
payload: { id: this.wsjtxId },
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
this.messages.txMessage$.next(wsMsg);
|
|
121
|
+
}
|
|
122
|
+
/** Send a command to WSJT-X to halt any transmissions immediately. */
|
|
123
|
+
haltTxNow() {
|
|
124
|
+
const wsMsg = {
|
|
125
|
+
wsjtx: {
|
|
126
|
+
type: 'HaltTxMessage',
|
|
127
|
+
payload: { id: this.wsjtxId, autoTxOnly: false },
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
this.messages.txMessage$.next(wsMsg);
|
|
131
|
+
}
|
|
132
|
+
/** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */
|
|
133
|
+
haltTxAfterCurrent() {
|
|
134
|
+
const wsMsg = {
|
|
135
|
+
wsjtx: {
|
|
136
|
+
type: 'HaltTxMessage',
|
|
137
|
+
payload: { id: this.wsjtxId, autoTxOnly: true },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
this.messages.txMessage$.next(wsMsg);
|
|
141
|
+
}
|
|
142
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
143
|
+
reply(decode) {
|
|
144
|
+
const wsMsg = {
|
|
145
|
+
wsjtx: {
|
|
146
|
+
type: 'ReplyMessage',
|
|
147
|
+
payload: {
|
|
148
|
+
id: decode.id,
|
|
149
|
+
time: decode.time,
|
|
150
|
+
snr: decode.snr,
|
|
151
|
+
deltaTime: decode.deltaTime,
|
|
152
|
+
deltaFrequency: decode.deltaFrequency,
|
|
153
|
+
mode: decode.mode,
|
|
154
|
+
message: decode.message,
|
|
155
|
+
lowConfidence: decode.lowConfidence,
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
this.messages.txMessage$.next(wsMsg);
|
|
160
|
+
}
|
|
161
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
162
|
+
highlightCallsign(highlightMsg) {
|
|
163
|
+
highlightMsg.id = this.wsjtxId;
|
|
164
|
+
const wsMsg = {
|
|
165
|
+
wsjtx: {
|
|
166
|
+
type: 'HighlightCallsignMessage',
|
|
167
|
+
payload: highlightMsg,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
this.messages.txMessage$.next(wsMsg);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Send a command to WSJT-X to transmit the given free text. If the text is too long to be
|
|
174
|
+
* encoded in a single message, it may be silently truncated. */
|
|
175
|
+
sendFreeText(freeText) {
|
|
176
|
+
freeText.id = this.wsjtxId;
|
|
177
|
+
const wsMsg = {
|
|
178
|
+
wsjtx: {
|
|
179
|
+
type: 'FreeTextMessage',
|
|
180
|
+
payload: freeText,
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
this.messages.txMessage$.next(wsMsg);
|
|
184
|
+
}
|
|
185
|
+
/** Send a command to WSJT-X to set the local station's Maidenhead grid. This is temporary,
|
|
186
|
+
* lasting only as long as WSJT-X is running. */
|
|
187
|
+
setLocation(grid) {
|
|
188
|
+
const wsMsg = {
|
|
189
|
+
wsjtx: {
|
|
190
|
+
type: 'LocationMessage',
|
|
191
|
+
payload: {
|
|
192
|
+
id: this.wsjtxId,
|
|
193
|
+
location: grid,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
this.messages.txMessage$.next(wsMsg);
|
|
198
|
+
}
|
|
199
|
+
/** Send a command to WSJT-X to switch to the named configuration. */
|
|
200
|
+
switchConfiguration(configName) {
|
|
201
|
+
const wsMsg = {
|
|
202
|
+
wsjtx: {
|
|
203
|
+
type: 'SwitchConfigurationMessage',
|
|
204
|
+
payload: {
|
|
205
|
+
id: this.wsjtxId,
|
|
206
|
+
configurationName: configName,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
this.messages.txMessage$.next(wsMsg);
|
|
211
|
+
}
|
|
212
|
+
/** Send a command to WSJT-X to set the given configuration parameters. */
|
|
213
|
+
configure(config) {
|
|
214
|
+
config.id = this.wsjtxId;
|
|
215
|
+
const wsMsg = {
|
|
216
|
+
wsjtx: {
|
|
217
|
+
type: 'ConfigureMessage',
|
|
218
|
+
payload: config,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
this.messages.txMessage$.next(wsMsg);
|
|
222
|
+
}
|
|
223
|
+
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
224
|
+
* Activity/Rx Frequency windows. */
|
|
225
|
+
static formatDecode(msg) {
|
|
226
|
+
const timeStr = this.formatTime(msg.time);
|
|
227
|
+
return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime
|
|
228
|
+
.toFixed(1)
|
|
229
|
+
.padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${msg.message}`;
|
|
230
|
+
}
|
|
231
|
+
/** Given a time in milliseconds since midnight UTC, format as HHMMSS. */
|
|
232
|
+
static formatTime(time) {
|
|
233
|
+
const secondsSinceMidnight = Math.floor(time / 1000);
|
|
234
|
+
const hours = Math.floor(secondsSinceMidnight / 3600);
|
|
235
|
+
const secondsSinceHour = secondsSinceMidnight - hours * 3600;
|
|
236
|
+
const minutes = Math.floor(secondsSinceHour / 60);
|
|
237
|
+
const seconds = secondsSinceHour - minutes * 60;
|
|
238
|
+
return `${hours.toString().padStart(2, '0')}${minutes
|
|
239
|
+
.toString()
|
|
240
|
+
.padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
WsjtxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, deps: [{ token: i1.AgentMessageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
244
|
+
WsjtxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, providedIn: 'root' });
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, decorators: [{
|
|
246
|
+
type: Injectable,
|
|
247
|
+
args: [{
|
|
248
|
+
providedIn: 'root',
|
|
249
|
+
}]
|
|
250
|
+
}], ctorParameters: function () { return [{ type: i1.AgentMessageService }]; } });
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NqdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL2xpYi93c2p0eC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUIvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU05QyxNQUFNLE9BQU8sWUFBWTtJQXNCdkIsWUFBb0IsUUFBNkI7UUFBN0IsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFyQmpELHNEQUFzRDtRQUN0QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakUsNERBQTREO1FBQzVDLGVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBd0IsQ0FBQyxDQUFDLENBQUM7UUFDekUseURBQXlEO1FBQ3pDLFlBQU8sR0FBRyxJQUFJLGFBQWEsQ0FBcUIsQ0FBQyxDQUFDLENBQUM7UUFDbkUseURBQXlEO1FBQ3pDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3JELHdEQUF3RDtRQUN4QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNuRCw0REFBNEQ7UUFDNUMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQzNELHdEQUF3RDtRQUN4QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNuRCw2REFBNkQ7UUFDN0MsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUM3RCw2REFBNkQ7UUFDN0MsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUVyRCxZQUFPLEdBQVcsUUFBUSxDQUFDO1FBR2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FB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QixHQUFHLG9CQUFvQixHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2hELE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxPQUFPO2FBQ2xELFFBQVEsRUFBRTthQUNWLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDOzt5R0E5UFUsWUFBWTs2R0FBWixZQUFZLGNBRlgsTUFBTTsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgV3NqdHhDbGVhcixcbiAgV3NqdHhDbG9zZSxcbiAgV3NqdHhDb25maWd1cmUsXG4gIFdzanR4RGVjb2RlLFxuICBXc2p0eEZyZWVUZXh0LFxuICBXc2p0eEhhbHRUeCxcbiAgV3NqdHhIZWFydGJlYXQsXG4gIFdzanR4SGlnaGxpZ2h0Q2FsbHNpZ24sXG4gIFdzanR4TG9jYXRpb24sXG4gIFdzanR4TG9nZ2VkQWRpZixcbiAgV3NqdHhRc29Mb2dnZWQsXG4gIFdzanR4UmVwbGF5LFxuICBXc2p0eFJlcGx5LFxuICBXc2p0eFN0YXR1cyxcbiAgV3NqdHhTd2l0Y2hDb25maWd1cmF0aW9uLFxuICBXc2p0eFdzcHJEZWNvZGUsXG59IGZyb20gJy4vd3NqdHgtbWVzc2FnZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWdlbnRNZXNzYWdlU2VydmljZSB9IGZyb20gJy4vYWdlbnQtbWVzc2FnZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdzanR4U2VydmljZSB7XG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGdldHRpbmcgYW55IG1lc3NhZ2VzIGZyb20gV1NKVC1YLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkhlYXJ0YmVhdFwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhcnRiZWF0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PFdzanR4SGVhcnRiZWF0IHwgbnVsbD4oMSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiU3RhdHVzXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXMkID0gbmV3IFJlcGxheVN1YmplY3Q8V3NqdHhTdGF0dXMgfCBudWxsPigxKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJEZWNvZGVcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlY29kZSQgPSBuZXcgU3ViamVjdDxXc2p0eERlY29kZT4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJDbGVhclwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYXIkID0gbmV3IFN1YmplY3Q8V3NqdHhDbGVhcj4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJRc29Mb2dnZWRcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHFzb0xvZ2dlZCQgPSBuZXcgU3ViamVjdDxXc2p0eFFzb0xvZ2dlZD4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJDbG9zZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvc2UkID0gbmV3IFN1YmplY3Q8V3NqdHhDbG9zZT4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJXc3ByRGVjb2RlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSB3c3ByRGVjb2RlJCA9IG5ldyBTdWJqZWN0PFdzanR4V3NwckRlY29kZT4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJMb2dnZWRBZGlmXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBsb2dnZWRBZGlmJCA9IG5ldyBTdWJqZWN0PFdzanR4TG9nZ2VkQWRpZj4oKTtcblxuICBwcml2YXRlIHdzanR4SWQ6IHN0cmluZyA9ICdXU0pULVgnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVzc2FnZXM6IEFnZW50TWVzc2FnZVNlcnZpY2UpIHtcbiAgICB0aGlzLnNldHVwQmVoYXZpb3JzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQmVoYXZpb3JzKCk6IHZvaWQge1xuICAgIHRoaXMubWVzc2FnZXMucnhNZXNzYWdlJC5zdWJzY3JpYmUoKG1zZykgPT4gdGhpcy5oYW5kbGVNZXNzYWdlKG1zZykpO1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgaGVhcmQgZnJvbSBXU0pULVggaW4gMTUgc2Vjb25kcywgY29uc2lkZXIgaXQgXCJkb3duXCJcbiAgICB0aGlzLmNvbm5lY3RlZCRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNTAwMCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKSk7XG4gICAgLy8gV2hlbiBXU0pULVggYW5ub3VuY2VzIGl0J3MgY2xvc2luZywgc2V0IGl0IHRvIFwiZG93blwiIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5jbG9zZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcbiAgICB9KTtcbiAgICAvLyBXaGVuIFdTSlQtWCBnb2VzIGRvd24sIGNsZWFyIGl0cyBwZXJzaXN0ZW50IG1lc3NhZ2Ugc3ViamVjdHNcbiAgICB0aGlzLmNvbm5lY3RlZCQuc3Vic2NyaWJlKChpc1VwKSA9PiB7XG4gICAgICBpZiAoIWlzVXApIHtcbiAgICAgICAgdGhpcy5oZWFydGJlYXQkLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuc3RhdHVzJC5uZXh0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNZXNzYWdlKG1zZzogYW55KTogdm9pZCB7XG4gICAgaWYgKCFtc2cud3NqdHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25uZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy53c2p0eElkID0gbXNnLndzanR4LnBheWxvYWQuaWQ7XG4gICAgc3dpdGNoIChtc2cud3NqdHgudHlwZSkge1xuICAgICAgY2FzZSAnSGVhcnRiZWF0TWVzc2FnZSc6XG4gICAgICAgIHRoaXMuaGVhcnRiZWF0JC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4SGVhcnRiZWF0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnU3RhdHVzTWVzc2FnZSc6XG4gICAgICAgIHRoaXMuc3RhdHVzJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4U3RhdHVzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnRGVjb2RlTWVzc2FnZSc6XG4gICAgICAgIHRoaXMuZGVjb2RlJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4RGVjb2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnQ2xlYXJNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5jbGVhciQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eENsZWFyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnUXNvTG9nZ2VkTWVzc2FnZSc6XG4gICAgICAgIHRoaXMucXNvTG9nZ2VkJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4UXNvTG9nZ2VkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnQ2xvc2VNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5jbG9zZSQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eENsb3NlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnV1NQUkRlY29kZU1lc3NhZ2UnOlxuICAgICAgICB0aGlzLndzcHJEZWNvZGUkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhXc3ByRGVjb2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnTG9nZ2VkQWRpZk1lc3NhZ2UnOlxuICAgICAgICB0aGlzLmxvZ2dlZEFkaWYkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhMb2dnZWRBZGlmKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIEJhbmQgQWN0aXZpdHkgd2luZG93LiAqL1xuICBwdWJsaWMgY2xlYXJCYW5kQWN0aXZpdHkoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+eyBpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGNsZWFyIHRoZSBSeCBGcmVxdWVuY3kgd2luZG93LiAqL1xuICBwdWJsaWMgY2xlYXJSeEZyZXFXaW5kb3coKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+eyBpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDEgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGNsZWFyIHRoZSBCYW5kIEFjdGl2aXR5IGFuZCBSeCBGcmVxdWVuY3kgd2luZG93cy4gKi9cbiAgcHVibGljIGNsZWFyQWxsKCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0NsZWFyTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eENsZWFyPnsgaWQ6IHRoaXMud3NqdHhJZCwgd2luZG93OiAyIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byByZXBsYXkgbWVzc2FnZXMuIFVzZWZ1bCBmb3IgYSBmcmVzaCBjbGllbnQgdGhhdCB3YW50cyB0byBoZWFyXG4gICAqIHByZXZpb3VzIFdTSlQtWCBkZWNvZGVzLiAqL1xuICBwdWJsaWMgcmVwbGF5KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ1JlcGxheU1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhSZXBsYXk+eyBpZDogdGhpcy53c2p0eElkIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBoYWx0IGFueSB0cmFuc21pc3Npb25zIGltbWVkaWF0ZWx5LiAqL1xuICBwdWJsaWMgaGFsdFR4Tm93KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0hhbHRUeE1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhIYWx0VHg+eyBpZDogdGhpcy53c2p0eElkLCBhdXRvVHhPbmx5OiBmYWxzZSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc3RvcCBhdXRvLXRyYW5zbWl0dGluZyBhZnRlciBmaW5pc2hpbmcgdGhlIGN1cnJlbnQgcm91bmQuICovXG4gIHB1YmxpYyBoYWx0VHhBZnRlckN1cnJlbnQoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnSGFsdFR4TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eEhhbHRUeD57IGlkOiB0aGlzLndzanR4SWQsIGF1dG9UeE9ubHk6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHJlcGx5IHRvIHRoZSBnaXZlbiBkZWNvZGUuIFRoZSBtZXNzYWdlIG11c3QgaW5jbHVkZSBDUSBvciBRUlouICovXG4gIHB1YmxpYyByZXBseShkZWNvZGU6IFdzanR4RGVjb2RlKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnUmVwbHlNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4UmVwbHk+e1xuICAgICAgICAgIGlkOiBkZWNvZGUuaWQsXG4gICAgICAgICAgdGltZTogZGVjb2RlLnRpbWUsXG4gICAgICAgICAgc25yOiBkZWNvZGUuc25yLFxuICAgICAgICAgIGRlbHRhVGltZTogZGVjb2RlLmRlbHRhVGltZSxcbiAgICAgICAgICBkZWx0YUZyZXF1ZW5jeTogZGVjb2RlLmRlbHRhRnJlcXVlbmN5LFxuICAgICAgICAgIG1vZGU6IGRlY29kZS5tb2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGRlY29kZS5tZXNzYWdlLFxuICAgICAgICAgIGxvd0NvbmZpZGVuY2U6IGRlY29kZS5sb3dDb25maWRlbmNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gcmVwbHkgdG8gdGhlIGdpdmVuIGRlY29kZS4gVGhlIG1lc3NhZ2UgbXVzdCBpbmNsdWRlIENRIG9yIFFSWi4gKi9cbiAgcHVibGljIGhpZ2hsaWdodENhbGxzaWduKGhpZ2hsaWdodE1zZzogV3NqdHhIaWdobGlnaHRDYWxsc2lnbikge1xuICAgIGhpZ2hsaWdodE1zZy5pZCA9IHRoaXMud3NqdHhJZDtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIaWdobGlnaHRDYWxsc2lnbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiBoaWdobGlnaHRNc2csXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byB0cmFuc21pdCB0aGUgZ2l2ZW4gZnJlZSB0ZXh0LiBJZiB0aGUgdGV4dCBpcyB0b28gbG9uZyB0byBiZVxuICAgKiBlbmNvZGVkIGluIGEgc2luZ2xlIG1lc3NhZ2UsIGl0IG1heSBiZSBzaWxlbnRseSB0cnVuY2F0ZWQuICovXG4gIHB1YmxpYyBzZW5kRnJlZVRleHQoZnJlZVRleHQ6IFdzanR4RnJlZVRleHQpIHtcbiAgICBmcmVlVGV4dC5pZCA9IHRoaXMud3NqdHhJZDtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdGcmVlVGV4dE1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiBmcmVlVGV4dCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHNldCB0aGUgbG9jYWwgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZC4gVGhpcyBpcyB0ZW1wb3JhcnksXG4gICAqIGxhc3Rpbmcgb25seSBhcyBsb25nIGFzIFdTSlQtWCBpcyBydW5uaW5nLiAqL1xuICBwdWJsaWMgc2V0TG9jYXRpb24oZ3JpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnTG9jYXRpb25NZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4TG9jYXRpb24+e1xuICAgICAgICAgIGlkOiB0aGlzLndzanR4SWQsXG4gICAgICAgICAgbG9jYXRpb246IGdyaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBzd2l0Y2ggdG8gdGhlIG5hbWVkIGNvbmZpZ3VyYXRpb24uICovXG4gIHB1YmxpYyBzd2l0Y2hDb25maWd1cmF0aW9uKGNvbmZpZ05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ1N3aXRjaENvbmZpZ3VyYXRpb25NZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4U3dpdGNoQ29uZmlndXJhdGlvbj57XG4gICAgICAgICAgaWQ6IHRoaXMud3NqdHhJZCxcbiAgICAgICAgICBjb25maWd1cmF0aW9uTmFtZTogY29uZmlnTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHNldCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiAqL1xuICBwdWJsaWMgY29uZmlndXJlKGNvbmZpZzogV3NqdHhDb25maWd1cmUpIHtcbiAgICBjb25maWcuaWQgPSB0aGlzLndzanR4SWQ7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ29uZmlndXJlTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IGNvbmZpZyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogR2l2ZW4gYSBkZWNvZGUgbWVzc2FnZSwgZm9ybWF0IGEgc3RyaW5nIHRoZSBzYW1lIHdheSBhcyBkaXNwbGF5ZWQgaW4gdGhlIFdTSlQtWCBCYW5kXG4gICAqIEFjdGl2aXR5L1J4IEZyZXF1ZW5jeSB3aW5kb3dzLiAqL1xuICBwdWJsaWMgc3RhdGljIGZvcm1hdERlY29kZShtc2c6IFdzanR4RGVjb2RlKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lU3RyID0gdGhpcy5mb3JtYXRUaW1lKG1zZy50aW1lKTtcbiAgICByZXR1cm4gYCR7dGltZVN0cn0gJHttc2cuc25yLnRvU3RyaW5nKCkucGFkU3RhcnQoMyl9ICR7bXNnLmRlbHRhVGltZVxuICAgICAgLnRvRml4ZWQoMSlcbiAgICAgIC5wYWRTdGFydCg0KX0gJHttc2cuZGVsdGFGcmVxdWVuY3kudG9TdHJpbmcoKS5wYWRTdGFydCg0KX0gfiAgJHtcbiAgICAgIG1zZy5tZXNzYWdlXG4gICAgfWA7XG4gIH1cblxuICAvKiogR2l2ZW4gYSB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBtaWRuaWdodCBVVEMsIGZvcm1hdCBhcyBISE1NU1MuICovXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0VGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICBjb25zdCBzZWNvbmRzU2luY2VNaWRuaWdodCA9IE1hdGguZmxvb3IodGltZSAvIDEwMDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzU2luY2VNaWRuaWdodCAvIDM2MDApO1xuICAgIGNvbnN0IHNlY29uZHNTaW5jZUhvdXIgPSBzZWNvbmRzU2luY2VNaWRuaWdodCAtIGhvdXJzICogMzYwMDtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzU2luY2VIb3VyIC8gNjApO1xuICAgIGNvbnN0IHNlY29uZHMgPSBzZWNvbmRzU2luY2VIb3VyIC0gbWludXRlcyAqIDYwO1xuICAgIHJldHVybiBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9JHttaW51dGVzXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9JHtzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICB9XG59XG4iXX0=
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Public API Surface of ngx-kel-agent
|
|
3
3
|
*/
|
|
4
4
|
export * from './lib/agent.service';
|
|
5
|
-
export * from './lib/
|
|
5
|
+
export * from './lib/agent-message.service';
|
|
6
|
+
export * from './lib/hamlib-messages';
|
|
7
|
+
export * from './lib/hamlib.service';
|
|
8
|
+
export * from './lib/wsjtx-messages';
|
|
9
|
+
export * from './lib/wsjtx.service';
|
|
6
10
|
// export * from './lib/ngx-kel-agent.component';
|
|
7
11
|
// export * from './lib/ngx-kel-agent.module';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxpREFBaUQ7QUFDakQsOENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gta2VsLWFnZW50XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWdlbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGFtbGliLW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hhbWxpYi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5tb2R1bGUnO1xuIl19
|