livekit-client 0.14.3 → 0.15.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/.github/workflows/{lint.yaml → test.yaml} +7 -4
- package/README.md +27 -12
- package/dist/api/SignalClient.d.ts +4 -31
- package/dist/api/SignalClient.js +25 -7
- package/dist/api/SignalClient.js.map +1 -1
- package/dist/connect.d.ts +1 -1
- package/dist/connect.js +68 -73
- package/dist/connect.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +10 -0
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -1
- package/dist/options.d.ts +67 -12
- package/dist/options.js +0 -10
- package/dist/options.js.map +1 -1
- package/dist/proto/livekit_models.d.ts +27 -1
- package/dist/proto/livekit_models.js +188 -3
- package/dist/proto/livekit_models.js.map +1 -1
- package/dist/proto/livekit_rtc.d.ts +49 -7
- package/dist/proto/livekit_rtc.js +303 -28
- package/dist/proto/livekit_rtc.js.map +1 -1
- package/dist/room/RTCEngine.d.ts +2 -2
- package/dist/room/RTCEngine.js +6 -4
- package/dist/room/RTCEngine.js.map +1 -1
- package/dist/room/Room.d.ts +9 -18
- package/dist/room/Room.js +61 -36
- package/dist/room/Room.js.map +1 -1
- package/dist/room/events.d.ts +93 -0
- package/dist/room/events.js +93 -0
- package/dist/room/events.js.map +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +27 -11
- package/dist/room/participant/LocalParticipant.js +183 -155
- package/dist/room/participant/LocalParticipant.js.map +1 -1
- package/dist/room/participant/Participant.js +2 -1
- package/dist/room/participant/Participant.js.map +1 -1
- package/dist/room/participant/RemoteParticipant.js +3 -2
- package/dist/room/participant/RemoteParticipant.js.map +1 -1
- package/dist/room/participant/publishUtils.d.ts +11 -0
- package/dist/room/participant/publishUtils.js +148 -0
- package/dist/room/participant/publishUtils.js.map +1 -0
- package/dist/room/participant/publishUtils.test.d.ts +1 -0
- package/dist/room/participant/publishUtils.test.js +79 -0
- package/dist/room/participant/publishUtils.test.js.map +1 -0
- package/dist/room/track/LocalAudioTrack.d.ts +4 -3
- package/dist/room/track/LocalAudioTrack.js +5 -3
- package/dist/room/track/LocalAudioTrack.js.map +1 -1
- package/dist/room/track/LocalTrack.d.ts +1 -3
- package/dist/room/track/LocalTrack.js +2 -49
- package/dist/room/track/LocalTrack.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.d.ts +6 -4
- package/dist/room/track/LocalVideoTrack.js +41 -12
- package/dist/room/track/LocalVideoTrack.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.test.d.ts +1 -0
- package/dist/room/track/LocalVideoTrack.test.js +68 -0
- package/dist/room/track/LocalVideoTrack.test.js.map +1 -0
- package/dist/room/track/RemoteTrackPublication.d.ts +1 -2
- package/dist/room/track/RemoteTrackPublication.js +5 -4
- package/dist/room/track/RemoteTrackPublication.js.map +1 -1
- package/dist/room/track/RemoteVideoTrack.d.ts +0 -2
- package/dist/room/track/RemoteVideoTrack.js +11 -19
- package/dist/room/track/RemoteVideoTrack.js.map +1 -1
- package/dist/room/track/Track.d.ts +1 -2
- package/dist/room/track/Track.js +1 -2
- package/dist/room/track/Track.js.map +1 -1
- package/dist/room/track/options.d.ts +15 -65
- package/dist/room/track/options.js +14 -13
- package/dist/room/track/options.js.map +1 -1
- package/dist/room/track/utils.d.ts +3 -0
- package/dist/room/track/utils.js +68 -0
- package/dist/room/track/utils.js.map +1 -0
- package/dist/room/track/utils.test.d.ts +1 -0
- package/dist/room/track/utils.test.js +85 -0
- package/dist/room/track/utils.test.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/example/index.html +183 -178
- package/example/sample.ts +410 -327
- package/example/styles.css +144 -0
- package/example/webpack.config.js +1 -1
- package/jest.config.js +6 -0
- package/package.json +8 -5
- package/tsconfig.eslint.json +8 -1
- package/dist/room/defaults.d.ts +0 -5
- package/dist/room/defaults.js +0 -32
- package/dist/room/defaults.js.map +0 -1
- package/dist/room/track/create.d.ts +0 -25
- package/dist/room/track/create.js +0 -172
- package/dist/room/track/create.js.map +0 -1
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const options_1 = require("./options");
|
4
|
+
const utils_1 = require("./utils");
|
5
|
+
describe('mergeDefaultOptions', () => {
|
6
|
+
const audioDefaults = {
|
7
|
+
autoGainControl: true,
|
8
|
+
channelCount: 2,
|
9
|
+
};
|
10
|
+
const videoDefaults = {
|
11
|
+
deviceId: 'video123',
|
12
|
+
resolution: options_1.VideoPresets.fhd.resolution,
|
13
|
+
};
|
14
|
+
it('does not enable undefined options', () => {
|
15
|
+
const opts = utils_1.mergeDefaultOptions(undefined, audioDefaults, videoDefaults);
|
16
|
+
expect(opts.audio).toEqual(undefined);
|
17
|
+
expect(opts.video).toEqual(undefined);
|
18
|
+
});
|
19
|
+
it('does not enable explicitly disabled', () => {
|
20
|
+
const opts = utils_1.mergeDefaultOptions({
|
21
|
+
video: false,
|
22
|
+
});
|
23
|
+
expect(opts.audio).toEqual(undefined);
|
24
|
+
expect(opts.video).toEqual(false);
|
25
|
+
});
|
26
|
+
it('accepts true for options', () => {
|
27
|
+
const opts = utils_1.mergeDefaultOptions({
|
28
|
+
audio: true,
|
29
|
+
}, audioDefaults, videoDefaults);
|
30
|
+
expect(opts.audio).toEqual(audioDefaults);
|
31
|
+
expect(opts.video).toEqual(undefined);
|
32
|
+
});
|
33
|
+
it('enables overriding specific fields', () => {
|
34
|
+
const opts = utils_1.mergeDefaultOptions({
|
35
|
+
audio: { channelCount: 1 },
|
36
|
+
}, audioDefaults, videoDefaults);
|
37
|
+
const audioOpts = opts.audio;
|
38
|
+
expect(audioOpts.channelCount).toEqual(1);
|
39
|
+
expect(audioOpts.autoGainControl).toEqual(true);
|
40
|
+
});
|
41
|
+
it('does not override explicit false', () => {
|
42
|
+
const opts = utils_1.mergeDefaultOptions({
|
43
|
+
audio: { autoGainControl: false },
|
44
|
+
}, audioDefaults, videoDefaults);
|
45
|
+
const audioOpts = opts.audio;
|
46
|
+
expect(audioOpts.autoGainControl).toEqual(false);
|
47
|
+
});
|
48
|
+
});
|
49
|
+
describe('constraintsForOptions', () => {
|
50
|
+
it('correctly enables audio bool', () => {
|
51
|
+
const constraints = utils_1.constraintsForOptions({
|
52
|
+
audio: true,
|
53
|
+
});
|
54
|
+
expect(constraints.audio).toEqual(true);
|
55
|
+
expect(constraints.video).toEqual(false);
|
56
|
+
});
|
57
|
+
it('converts audio options correctly', () => {
|
58
|
+
const constraints = utils_1.constraintsForOptions({
|
59
|
+
audio: {
|
60
|
+
noiseSuppression: true,
|
61
|
+
echoCancellation: false,
|
62
|
+
},
|
63
|
+
});
|
64
|
+
const audioOpts = constraints.audio;
|
65
|
+
expect(Object.keys(audioOpts)).toEqual(['noiseSuppression', 'echoCancellation']);
|
66
|
+
expect(audioOpts.noiseSuppression).toEqual(true);
|
67
|
+
expect(audioOpts.echoCancellation).toEqual(false);
|
68
|
+
});
|
69
|
+
it('converts video options correctly', () => {
|
70
|
+
const constraints = utils_1.constraintsForOptions({
|
71
|
+
video: {
|
72
|
+
resolution: options_1.VideoPresets.hd.resolution,
|
73
|
+
facingMode: 'user',
|
74
|
+
deviceId: 'video123',
|
75
|
+
},
|
76
|
+
});
|
77
|
+
const videoOpts = constraints.video;
|
78
|
+
expect(Object.keys(videoOpts)).toEqual(['width', 'height', 'frameRate', 'aspectRatio', 'facingMode', 'deviceId']);
|
79
|
+
expect(videoOpts.width).toEqual(options_1.VideoPresets.hd.resolution.width);
|
80
|
+
expect(videoOpts.height).toEqual(options_1.VideoPresets.hd.resolution.height);
|
81
|
+
expect(videoOpts.frameRate).toEqual(options_1.VideoPresets.hd.resolution.frameRate);
|
82
|
+
expect(videoOpts.aspectRatio).toEqual(options_1.VideoPresets.hd.resolution.aspectRatio);
|
83
|
+
});
|
84
|
+
});
|
85
|
+
//# sourceMappingURL=utils.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../src/room/track/utils.test.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "0.
|
1
|
+
export declare const version = "0.15.0";
|
2
2
|
export declare const protocolVersion = 5;
|
package/dist/version.js
CHANGED
package/example/index.html
CHANGED
@@ -15,16 +15,7 @@
|
|
15
15
|
crossorigin="anonymous"
|
16
16
|
/>
|
17
17
|
|
18
|
-
<
|
19
|
-
.video-container {
|
20
|
-
display: inline-block;
|
21
|
-
border-radius: 5px;
|
22
|
-
}
|
23
|
-
|
24
|
-
.video-container video.speaking {
|
25
|
-
border: 4px solid rgba(94, 166, 190, 0.7);
|
26
|
-
}
|
27
|
-
</style>
|
18
|
+
<link rel="stylesheet" href="styles.css">
|
28
19
|
</head>
|
29
20
|
|
30
21
|
<body>
|
@@ -33,200 +24,214 @@
|
|
33
24
|
<div class="col-md-8">
|
34
25
|
<h2>Livekit Sample App</h2>
|
35
26
|
<br/>
|
36
|
-
<
|
37
|
-
<div
|
38
|
-
<
|
39
|
-
|
40
|
-
|
27
|
+
<div id="connect-area">
|
28
|
+
<div>
|
29
|
+
<b>LiveKit URL</b>
|
30
|
+
</div>
|
31
|
+
<div>
|
41
32
|
<input
|
42
33
|
type="text"
|
43
|
-
class="form-control
|
34
|
+
class="form-control"
|
44
35
|
id="url"
|
45
36
|
value="ws://localhost:7880"
|
46
37
|
/>
|
47
38
|
</div>
|
48
|
-
|
49
|
-
|
50
|
-
<label for="token" class="col-md-3 col-form-label">Token</label>
|
51
|
-
<input type="text" class="form-control col-md-5" id="token" />
|
39
|
+
<div>
|
40
|
+
<b>Token</b>
|
52
41
|
</div>
|
53
|
-
|
54
|
-
|
55
|
-
<div class="col-md-2 offset-md-1">
|
56
|
-
<div class="form-check">
|
57
|
-
<input
|
58
|
-
type="checkbox"
|
59
|
-
class="form-check-input"
|
60
|
-
id="publish-option"
|
61
|
-
checked
|
62
|
-
/>
|
63
|
-
<label for="checkbox" class="form-check-label">
|
64
|
-
Publish
|
65
|
-
</label>
|
66
|
-
</div>
|
67
|
-
</div>
|
68
|
-
<div class="col-md-2">
|
69
|
-
<div class="form-check">
|
70
|
-
<input
|
71
|
-
type="checkbox"
|
72
|
-
class="form-check-input"
|
73
|
-
id="simulcast"
|
74
|
-
checked
|
75
|
-
/>
|
76
|
-
<label for="checkbox" class="form-check-label">
|
77
|
-
Simulcast
|
78
|
-
</label>
|
79
|
-
</div>
|
80
|
-
</div>
|
81
|
-
<div class="col-md-3">
|
82
|
-
<div class="form-check">
|
83
|
-
<input
|
84
|
-
type="checkbox"
|
85
|
-
class="form-check-input"
|
86
|
-
id="force-turn"
|
87
|
-
/>
|
88
|
-
<label for="checkbox" class="form-check-label">
|
89
|
-
Force TURN
|
90
|
-
</label>
|
91
|
-
</div>
|
92
|
-
</div>
|
42
|
+
<div>
|
43
|
+
<input type="text" class="form-control" id="token" />
|
93
44
|
</div>
|
45
|
+
</div>
|
94
46
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
<button
|
108
|
-
id="toggle-audio-button"
|
109
|
-
class="btn btn-secondary mt-1"
|
110
|
-
disabled
|
111
|
-
type="button"
|
112
|
-
onclick="toggleAudio()"
|
113
|
-
>
|
114
|
-
Enable Audio
|
115
|
-
</button>
|
116
|
-
<button
|
117
|
-
id="toggle-video-button"
|
118
|
-
class="btn btn-secondary mt-1"
|
119
|
-
disabled
|
120
|
-
type="button"
|
121
|
-
onclick="toggleVideo()"
|
122
|
-
>
|
123
|
-
Enable Video
|
124
|
-
</button>
|
125
|
-
<button
|
126
|
-
id="flip-video-button"
|
127
|
-
class="btn btn-secondary mt-1"
|
128
|
-
disabled
|
129
|
-
type="button"
|
130
|
-
onclick="flipVideo()"
|
131
|
-
>
|
132
|
-
Back Camera
|
133
|
-
</button>
|
134
|
-
<button
|
135
|
-
id="share-screen-button"
|
136
|
-
class="btn btn-secondary mt-1"
|
137
|
-
disabled
|
138
|
-
type="button"
|
139
|
-
onclick="shareScreen()"
|
140
|
-
>
|
141
|
-
Share Screen
|
142
|
-
</button>
|
143
|
-
<button
|
144
|
-
id="disconnect-ws-button"
|
145
|
-
class="btn btn-warning mt-1"
|
146
|
-
disabled
|
147
|
-
type="button"
|
148
|
-
onclick="disconnectSignal()"
|
149
|
-
>
|
150
|
-
WS Reconnect
|
151
|
-
</button>
|
152
|
-
<button
|
153
|
-
id="disconnect-room-button"
|
154
|
-
class="btn btn-danger mt-1"
|
155
|
-
disabled
|
156
|
-
type="button"
|
157
|
-
onclick="disconnectRoom()"
|
158
|
-
>
|
159
|
-
Disconnect
|
160
|
-
</button>
|
161
|
-
<button
|
162
|
-
id="start-audio-button"
|
163
|
-
class="btn btn-secondary mt-1"
|
164
|
-
disabled
|
165
|
-
type="button"
|
166
|
-
onclick="startAudio()"
|
167
|
-
>
|
168
|
-
Enable Audio
|
169
|
-
</button>
|
170
|
-
</div>
|
47
|
+
<!-- connect options -->
|
48
|
+
<div id="options-area">
|
49
|
+
<div>
|
50
|
+
<input
|
51
|
+
type="checkbox"
|
52
|
+
class="form-check-input"
|
53
|
+
id="publish-option"
|
54
|
+
checked
|
55
|
+
/>
|
56
|
+
<label for="publish-option" class="form-check-label">
|
57
|
+
Publish
|
58
|
+
</label>
|
171
59
|
</div>
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
<option selected>Audio Input (default)</option>
|
183
|
-
</select>
|
184
|
-
</div>
|
185
|
-
<div class="col-md-4">
|
186
|
-
<select id="audio-output" class="custom-select" onchange="handleDeviceSelected(event)">
|
187
|
-
<option selected>Audio Output (default)</option>
|
188
|
-
</select>
|
189
|
-
</div>
|
60
|
+
<div>
|
61
|
+
<input
|
62
|
+
type="checkbox"
|
63
|
+
class="form-check-input"
|
64
|
+
id="simulcast"
|
65
|
+
checked
|
66
|
+
/>
|
67
|
+
<label for="simulcast" class="form-check-label">
|
68
|
+
Simulcast
|
69
|
+
</label>
|
190
70
|
</div>
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
class="form-
|
195
|
-
id="
|
196
|
-
|
197
|
-
|
71
|
+
<div>
|
72
|
+
<input
|
73
|
+
type="checkbox"
|
74
|
+
class="form-check-input"
|
75
|
+
id="adaptive-video"
|
76
|
+
checked
|
77
|
+
/>
|
78
|
+
<label for="adaptive-video" class="form-check-label">
|
79
|
+
Adaptive video
|
80
|
+
</label>
|
198
81
|
</div>
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
<
|
82
|
+
<div>
|
83
|
+
<input
|
84
|
+
type="checkbox"
|
85
|
+
class="form-check-input"
|
86
|
+
id="force-turn"
|
87
|
+
/>
|
88
|
+
<label for="force-turn" class="form-check-label">
|
89
|
+
Force TURN
|
90
|
+
</label>
|
206
91
|
</div>
|
207
92
|
</div>
|
208
|
-
|
209
|
-
|
210
|
-
|
93
|
+
|
94
|
+
<!-- actions -->
|
95
|
+
<div id="actions-area">
|
96
|
+
<div>
|
97
|
+
<button
|
98
|
+
id="connect-button"
|
99
|
+
class="btn btn-primary mt-1"
|
100
|
+
type="button"
|
101
|
+
onclick="appActions.connectWithFormInput()"
|
102
|
+
>
|
103
|
+
Connect
|
104
|
+
</button>
|
211
105
|
</div>
|
212
|
-
<div
|
106
|
+
<div>
|
107
|
+
<button
|
108
|
+
id="toggle-audio-button"
|
109
|
+
class="btn btn-secondary mt-1"
|
110
|
+
disabled
|
111
|
+
type="button"
|
112
|
+
onclick="appActions.toggleAudio()"
|
113
|
+
>
|
114
|
+
Enable Mic
|
115
|
+
</button>
|
116
|
+
<button
|
117
|
+
id="toggle-video-button"
|
118
|
+
class="btn btn-secondary mt-1"
|
119
|
+
disabled
|
120
|
+
type="button"
|
121
|
+
onclick="appActions.toggleVideo()"
|
122
|
+
>
|
123
|
+
Enable Camera
|
124
|
+
</button>
|
125
|
+
<button
|
126
|
+
id="flip-video-button"
|
127
|
+
class="btn btn-secondary mt-1"
|
128
|
+
disabled
|
129
|
+
type="button"
|
130
|
+
onclick="appActions.flipVideo()"
|
131
|
+
>
|
132
|
+
Flip Camera
|
133
|
+
</button>
|
134
|
+
<button
|
135
|
+
id="share-screen-button"
|
136
|
+
class="btn btn-secondary mt-1"
|
137
|
+
disabled
|
138
|
+
type="button"
|
139
|
+
onclick="appActions.shareScreen()"
|
140
|
+
>
|
141
|
+
Share Screen
|
142
|
+
</button>
|
143
|
+
<button
|
144
|
+
id="disconnect-ws-button"
|
145
|
+
class="btn btn-warning mt-1"
|
146
|
+
disabled
|
147
|
+
type="button"
|
148
|
+
onclick="appActions.disconnectSignal()"
|
149
|
+
>
|
150
|
+
Signal Reconnect
|
151
|
+
</button>
|
152
|
+
<button
|
153
|
+
id="disconnect-room-button"
|
154
|
+
class="btn btn-danger mt-1"
|
155
|
+
disabled
|
156
|
+
type="button"
|
157
|
+
onclick="appActions.disconnectRoom()"
|
158
|
+
>
|
159
|
+
Disconnect
|
160
|
+
</button>
|
213
161
|
<button
|
214
|
-
|
162
|
+
id="start-audio-button"
|
163
|
+
class="btn btn-secondary mt-1"
|
164
|
+
disabled
|
215
165
|
type="button"
|
216
|
-
onclick="
|
166
|
+
onclick="appActions.startAudio()"
|
217
167
|
>
|
218
|
-
|
168
|
+
Start Audio
|
219
169
|
</button>
|
220
170
|
</div>
|
221
171
|
</div>
|
172
|
+
|
173
|
+
<div id="inputs-area">
|
174
|
+
<div>
|
175
|
+
<select id="video-input" class="custom-select" onchange="appActions.handleDeviceSelected(event)">
|
176
|
+
<option selected>Video Input (default)</option>
|
177
|
+
</select>
|
178
|
+
</div>
|
179
|
+
<div>
|
180
|
+
<select id="audio-input" class="custom-select" onchange="appActions.handleDeviceSelected(event)">
|
181
|
+
<option selected>Audio Input (default)</option>
|
182
|
+
</select>
|
183
|
+
</div>
|
184
|
+
<div>
|
185
|
+
<select id="audio-output" class="custom-select" onchange="appActions.handleDeviceSelected(event)">
|
186
|
+
<option selected>Audio Output (default)</option>
|
187
|
+
</select>
|
188
|
+
</div>
|
189
|
+
</div>
|
222
190
|
</div>
|
191
|
+
<div class="col-md-4">
|
192
|
+
<h3>Chat</h3>
|
193
|
+
<div id="chat-area">
|
194
|
+
<textarea class="form-control" id="chat" rows="9"></textarea>
|
195
|
+
<div id="chat-input-area">
|
196
|
+
<div>
|
197
|
+
<input type="text" class="form-control" id="entry"
|
198
|
+
placeholder="Type your message here" />
|
199
|
+
</div>
|
200
|
+
<div>
|
201
|
+
<button
|
202
|
+
id="send-button"
|
203
|
+
class="btn btn-primary"
|
204
|
+
type="button"
|
205
|
+
onclick="appActions.enterText()"
|
206
|
+
disabled
|
207
|
+
>
|
208
|
+
Send
|
209
|
+
</button>
|
210
|
+
</div>
|
211
|
+
</div>
|
212
|
+
</div>
|
213
|
+
</div>
|
214
|
+
</div>
|
215
|
+
|
216
|
+
<div id="screenshare-area">
|
217
|
+
<div>
|
218
|
+
<span id="screenshare-info">
|
219
|
+
</span>
|
220
|
+
<span id="screenshare-resolution">
|
221
|
+
</span>
|
222
|
+
</div>
|
223
|
+
<video id="screenshare-video" autoplay playsinline></video>
|
224
|
+
</div>
|
225
|
+
|
226
|
+
<div id="participants-area">
|
223
227
|
</div>
|
224
228
|
|
225
|
-
<div
|
226
|
-
|
227
|
-
<div class="col-md-6 video-container" id="local-video"></div>
|
229
|
+
<div id="log-area">
|
230
|
+
<textarea id="log"></textarea>
|
228
231
|
</div>
|
229
232
|
</div>
|
230
233
|
<script src="bundle.js"></script>
|
234
|
+
<!-- for icons -->
|
235
|
+
<script src="https://kit.fontawesome.com/7c1c4c7e9c.js" crossorigin="anonymous"></script>
|
231
236
|
</body>
|
232
237
|
</html>
|