@dcl/asset-packs 2.15.2 → 2.15.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.
@@ -0,0 +1,231 @@
1
+ import { MessageBus } from '@dcl/sdk/message-bus';
2
+ import { send as commsSend } from '~system/CommunicationsController';
3
+ import { getExplorerComponents } from '../components';
4
+ import { getComponents } from '../definitions';
5
+ import { isPreview } from './fetch-utils';
6
+ import { getVideoPlayers } from './VideoControl/utils';
7
+ const MSG = {
8
+ SET_VIDEO: 'admin:set-video',
9
+ SET_ANNOUNCEMENT: 'admin:set-announcement',
10
+ CLEAR_ANNOUNCEMENT: 'admin:clear-announcement',
11
+ REQUEST_STATE: 'admin:request-state',
12
+ SYNC_STATE: 'admin:sync-state',
13
+ SYNC_ADMINS: 'admin:sync-admins',
14
+ };
15
+ let instance = null;
16
+ export function getAdminMessageBus() {
17
+ if (!instance)
18
+ throw new Error('AdminMessageBus not initialized');
19
+ return instance;
20
+ }
21
+ export function initAdminMessageBus(engine, admins, adminToolkitUiEntity, playersHelper, onRefetchAdmins) {
22
+ let sceneAdmins = admins;
23
+ const { VideoPlayer, SyncComponents } = getExplorerComponents(engine);
24
+ const { TextAnnouncements, VideoScreen } = getComponents(engine);
25
+ const authoritativeVideo = new Map();
26
+ let authoritativeAnnouncement = null;
27
+ let adminHasActed = false;
28
+ function isAdminWallet(sender) {
29
+ if (isPreview())
30
+ return true;
31
+ if (sender === 'self')
32
+ return true;
33
+ return sceneAdmins.some(admin => admin.address.toLowerCase() === sender.toLowerCase());
34
+ }
35
+ const handlers = new Map();
36
+ const receiver = new MessageBus();
37
+ function onMessage(type, handler) {
38
+ handlers.set(type, handler);
39
+ receiver.on(type, handler);
40
+ }
41
+ function onAdminMessage(type, handler) {
42
+ onMessage(type, (payload, sender) => {
43
+ if (!isAdminWallet(sender))
44
+ return;
45
+ handler(payload, sender);
46
+ });
47
+ }
48
+ function emitMessage(type, payload) {
49
+ const handler = handlers.get(type);
50
+ if (handler)
51
+ handler(payload, 'self');
52
+ const raw = JSON.stringify({ message: type, payload });
53
+ commsSend({ message: raw }).catch(() => { });
54
+ }
55
+ for (const vp of getVideoPlayers(engine)) {
56
+ const entity = vp.entity;
57
+ const sync = SyncComponents.getOrNull(entity);
58
+ if (sync) {
59
+ const withoutVideoPlayer = sync.componentIds.filter((id) => id !== VideoPlayer.componentId);
60
+ SyncComponents.createOrReplace(entity, { componentIds: withoutVideoPlayer });
61
+ }
62
+ }
63
+ authoritativeAnnouncement = { text: '', author: '', id: '' };
64
+ for (const vp of getVideoPlayers(engine)) {
65
+ const entity = vp.entity;
66
+ const screen = VideoScreen.getOrNull(entity);
67
+ const video = VideoPlayer.getOrNull(entity);
68
+ if (!video)
69
+ continue;
70
+ const src = screen?.defaultURL || video.src;
71
+ authoritativeVideo.set(entity, {
72
+ src,
73
+ playing: video.playing,
74
+ volume: video.volume,
75
+ loop: video.loop,
76
+ });
77
+ if (video.src !== src) {
78
+ VideoPlayer.getMutable(entity).src = src;
79
+ }
80
+ }
81
+ onAdminMessage(MSG.SET_VIDEO, (payload, _sender) => {
82
+ const entity = payload.entity;
83
+ const current = VideoPlayer.getOrNull(entity);
84
+ if (!current)
85
+ return;
86
+ const updated = {
87
+ src: payload.src ?? current.src,
88
+ playing: payload.playing ?? current.playing,
89
+ volume: payload.volume ?? current.volume,
90
+ loop: payload.loop ?? current.loop,
91
+ };
92
+ authoritativeVideo.set(entity, updated);
93
+ const video = VideoPlayer.getMutable(entity);
94
+ video.src = updated.src;
95
+ video.playing = updated.playing;
96
+ video.volume = updated.volume;
97
+ video.loop = updated.loop;
98
+ if (payload.position !== undefined)
99
+ video.position = payload.position;
100
+ adminHasActed = true;
101
+ });
102
+ onAdminMessage(MSG.SET_ANNOUNCEMENT, (payload, _sender) => {
103
+ authoritativeAnnouncement = {
104
+ text: payload.text,
105
+ author: payload.author,
106
+ id: payload.id,
107
+ };
108
+ const ta = TextAnnouncements.getMutableOrNull(adminToolkitUiEntity);
109
+ if (!ta)
110
+ return;
111
+ ta.text = payload.text;
112
+ ta.author = payload.author;
113
+ ta.id = payload.id;
114
+ adminHasActed = true;
115
+ });
116
+ onAdminMessage(MSG.CLEAR_ANNOUNCEMENT, (_payload, _sender) => {
117
+ authoritativeAnnouncement = { text: '', author: '', id: '' };
118
+ const ta = TextAnnouncements.getMutableOrNull(adminToolkitUiEntity);
119
+ if (!ta)
120
+ return;
121
+ ta.text = '';
122
+ ta.author = '';
123
+ ta.id = '';
124
+ adminHasActed = true;
125
+ });
126
+ function broadcastCurrentState() {
127
+ const video = [];
128
+ for (const vp of getVideoPlayers(engine)) {
129
+ const entity = vp.entity;
130
+ const screen = VideoScreen.getOrNull(entity);
131
+ const current = VideoPlayer.getOrNull(entity);
132
+ if (!current)
133
+ continue;
134
+ if (current.src !== (screen?.defaultURL || '')) {
135
+ video.push({ entity: entity, ...current });
136
+ }
137
+ }
138
+ const ta = TextAnnouncements.getOrNull(adminToolkitUiEntity);
139
+ const announcement = ta?.id ? { text: ta.text, author: ta.author ?? '', id: ta.id } : null;
140
+ if (video.length === 0 && !announcement)
141
+ return;
142
+ emitMessage(MSG.SYNC_STATE, { video, announcement });
143
+ }
144
+ onAdminMessage(MSG.SYNC_STATE, (payload, _sender) => {
145
+ for (const vs of payload.video) {
146
+ const entity = vs.entity;
147
+ authoritativeVideo.set(entity, {
148
+ src: vs.src,
149
+ playing: vs.playing,
150
+ volume: vs.volume,
151
+ loop: vs.loop,
152
+ });
153
+ const video = VideoPlayer.getMutableOrNull(entity);
154
+ if (!video)
155
+ continue;
156
+ video.src = vs.src;
157
+ if (vs.playing !== undefined)
158
+ video.playing = vs.playing;
159
+ if (vs.volume !== undefined)
160
+ video.volume = vs.volume;
161
+ if (vs.loop !== undefined)
162
+ video.loop = vs.loop;
163
+ }
164
+ if (payload.announcement?.id) {
165
+ authoritativeAnnouncement = { ...payload.announcement };
166
+ const ta = TextAnnouncements.getMutableOrNull(adminToolkitUiEntity);
167
+ if (ta) {
168
+ ta.text = payload.announcement.text;
169
+ ta.author = payload.announcement.author;
170
+ ta.id = payload.announcement.id;
171
+ }
172
+ }
173
+ adminHasActed = true;
174
+ });
175
+ onMessage(MSG.REQUEST_STATE, (_payload, _sender) => {
176
+ if (adminHasActed)
177
+ broadcastCurrentState();
178
+ });
179
+ playersHelper?.onEnterScene(() => {
180
+ if (adminHasActed)
181
+ broadcastCurrentState();
182
+ });
183
+ onAdminMessage(MSG.SYNC_ADMINS, (_payload, _sender) => {
184
+ onRefetchAdmins?.();
185
+ });
186
+ emitMessage(MSG.REQUEST_STATE, {});
187
+ engine.addSystem(() => {
188
+ for (const [entity, authState] of authoritativeVideo) {
189
+ const vp = VideoPlayer.getOrNull(entity);
190
+ if (!vp)
191
+ continue;
192
+ if (vp.src !== authState.src) {
193
+ const mut = VideoPlayer.getMutable(entity);
194
+ mut.src = authState.src;
195
+ mut.playing = authState.playing;
196
+ }
197
+ }
198
+ if (authoritativeAnnouncement) {
199
+ const ta = TextAnnouncements.getOrNull(adminToolkitUiEntity);
200
+ if (ta && authoritativeAnnouncement.id && ta.id !== authoritativeAnnouncement.id) {
201
+ const mut = TextAnnouncements.getMutable(adminToolkitUiEntity);
202
+ mut.text = authoritativeAnnouncement.text;
203
+ mut.author = authoritativeAnnouncement.author;
204
+ mut.id = authoritativeAnnouncement.id;
205
+ }
206
+ }
207
+ });
208
+ instance = {
209
+ emitSetVideo(entity, props) {
210
+ emitMessage(MSG.SET_VIDEO, { entity, ...props });
211
+ },
212
+ emitSetAnnouncement(text, author, id) {
213
+ emitMessage(MSG.SET_ANNOUNCEMENT, {
214
+ text,
215
+ author: author ?? '',
216
+ id: id ?? '',
217
+ });
218
+ },
219
+ emitClearAnnouncement() {
220
+ emitMessage(MSG.CLEAR_ANNOUNCEMENT, {});
221
+ },
222
+ emitSyncAdmins() {
223
+ emitMessage(MSG.SYNC_ADMINS, {});
224
+ },
225
+ updateAdminList(admins) {
226
+ sceneAdmins = admins;
227
+ },
228
+ };
229
+ return instance;
230
+ }
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbWVzc2FnZS1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9hZG1pbi1tZXNzYWdlLWJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLElBQUksU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXFCdkQsTUFBTSxHQUFHLEdBQUc7SUFDVixTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLGdCQUFnQixFQUFFLHdCQUF3QjtJQUMxQyxrQkFBa0IsRUFBRSwwQkFBMEI7SUFDOUMsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxtQkFBbUI7Q0FDeEIsQ0FBQztBQVlYLElBQUksUUFBUSxHQUFtQyxJQUFJLENBQUM7QUFFcEQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxJQUFJLENBQUMsUUFBUTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBSUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFlLEVBQ2YsTUFBb0IsRUFDcEIsb0JBQTRCLEVBQzVCLGFBQThCLEVBQzlCLGVBQTRCO0lBRTVCLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUV6QixNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxHQUFHLHFCQUFxQixDQUFDLE1B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QyxDQUFDO0lBSUgsUUFBUSxHQUFHO1FBQ1QsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUE2QjtZQUN4RCxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssRUFBNkIsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsTUFBZSxFQUFFLEVBQVc7WUFDNUQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDaEMsSUFBSTtnQkFDSixNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUU7Z0JBQ3BCLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRTthQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxxQkFBcUI7WUFDbkIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsY0FBYztZQUNaLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxlQUFlLENBQUMsTUFBb0I7WUFDbEMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFkbWluIE1lc3NhZ2UgQnVzXG4gKlxuICogU2VjdXJlcyBhZG1pbi1jb250cm9sbGVkIGNvbXBvbmVudHMgKFZpZGVvUGxheWVyLCBUZXh0QW5ub3VuY2VtZW50cykgYWdhaW5zdFxuICogdW5hdXRob3JpemVkIENSRFQgb3ZlcndyaXRlcyBieSBtb3ZpbmcgYWRtaW4gc3RhdGUgY2hhbmdlcyB0byBhIHNlcGFyYXRlXG4gKiBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4gKlxuICogQXJjaGl0ZWN0dXJlOlxuICpcbiAqICAgMS4gQ1JEVCBzeW5jIGZvciBWaWRlb1BsYXllciBpcyBESVNBQkxFRCBvbiBhZG1pbi1jb250cm9sbGVkIGVudGl0aWVzIGJ5XG4gKiAgICAgIHJlbW92aW5nIGl0IGZyb20gU3luY0NvbXBvbmVudHMuIFRoaXMgcHJldmVudHMgYXR0YWNrZXIgQ1JEVCB3cml0ZXNcbiAqICAgICAgZnJvbSBwcm9wYWdhdGluZyB0aHJvdWdoIHRoZSBub3JtYWwgc3luYyB0cmFuc3BvcnQuXG4gKlxuICogICAyLiBBZG1pbiBjb21tYW5kcyBmbG93IHZpYSB0aGUgVEVYVCBjb21tcyBjaGFubmVsIChNZXNzYWdlQnVzKSwgd2hpY2ggaXMgYVxuICogICAgICBzZXBhcmF0ZSB0cmFuc3BvcnQgZnJvbSB0aGUgYmluYXJ5IENSRFQgY2hhbm5lbC4gQWxsIHBhcnRpY2lwYW50c1xuICogICAgICByZWNlaXZlIGFkbWluIGNvbW1hbmRzIHRocm91Z2ggdGhpcyBjaGFubmVsIGFuZCB2YWxpZGF0ZSB0aGUgc2VuZGVyJ3NcbiAqICAgICAgd2FsbGV0IGFkZHJlc3MgYWdhaW5zdCB0aGUgc2NlbmUgYWRtaW4gbGlzdCBiZWZvcmUgYXBwbHlpbmcuXG4gKlxuICogICAzLiBPbiBsb2FkLCBlYWNoIGNsaWVudCBzZWVkcyBhdXRob3JpdGF0aXZlIHN0YXRlIGZyb21cbiAqICAgICAgVmlkZW9TY3JlZW4uZGVmYXVsdFVSTCAoZGVwbG95LXRpbWUgdmFsdWUsIG5vdCB3cml0YWJsZSB2aWEgQ1JEVCkuXG4gKiAgICAgIEEgcGVyLWZyYW1lIHJldmVydCBzeXN0ZW0gZW5mb3JjZXMgdGhpcyBzdGF0ZSBhZ2FpbnN0IGFueSByYXcgQ1JEVFxuICogICAgICB3cml0ZXMgaW5qZWN0ZWQgZGlyZWN0bHkgdmlhIExpdmVLaXQuXG4gKlxuICogICA0LiBMYXRlIGpvaW5lcnMgcmVxdWVzdCBzdGF0ZSBmcm9tIGV4aXN0aW5nIHBhcnRpY2lwYW50cyB2aWEgYVxuICogICAgICByZXF1ZXN0L3Jlc3BvbnNlIGhhbmRzaGFrZSBvdmVyIHRoZSBNZXNzYWdlQnVzLlxuICpcbiAqIFNlbmRpbmcgdXNlcyBjb21tdW5pY2F0aW9uc0NvbnRyb2xsZXIuc2VuZCgpIGRpcmVjdGx5IHJhdGhlciB0aGFuIHRoZVxuICogTWVzc2FnZUJ1cyBjbGFzcydzIGVtaXQoKSwgYmVjYXVzZSB0aGUgY2xhc3MncyBpbnRlcm5hbCBmbHVzaCBxdWV1ZSBkcm9wc1xuICogc3Vic2VxdWVudCBtZXNzYWdlcy4gUmVjZWl2aW5nIHVzZXMgTWVzc2FnZUJ1cy5vbigpLCB3aGljaCByZWdpc3RlcnMgb24gdGhlXG4gKiBnbG9iYWwgb25Db21tc01lc3NhZ2Ugb2JzZXJ2YWJsZSBhbmQgd29ya3MgcmVsaWFibHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbnRpdHksIElFbmdpbmUsIFBCVmlkZW9QbGF5ZXIgfSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBNZXNzYWdlQnVzIH0gZnJvbSAnQGRjbC9zZGsvbWVzc2FnZS1idXMnO1xuaW1wb3J0IHsgc2VuZCBhcyBjb21tc1NlbmQgfSBmcm9tICd+c3lzdGVtL0NvbW11bmljYXRpb25zQ29udHJvbGxlcic7XG5pbXBvcnQgeyBnZXRFeHBsb3JlckNvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJztcbmltcG9ydCB7IGdldENvbXBvbmVudHMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IElQbGF5ZXJzSGVscGVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNQcmV2aWV3IH0gZnJvbSAnLi9mZXRjaC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFNjZW5lQWRtaW4gfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sJztcbmltcG9ydCB7IGdldFZpZGVvUGxheWVycyB9IGZyb20gJy4vVmlkZW9Db250cm9sL3V0aWxzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG50eXBlIFZpZGVvU3RhdGUgPSBQaWNrPFBCVmlkZW9QbGF5ZXIsICdzcmMnIHwgJ3BsYXlpbmcnIHwgJ3ZvbHVtZScgfCAnbG9vcCc+O1xuXG50eXBlIEFubm91bmNlbWVudFN0YXRlID0ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xufTtcblxuaW50ZXJmYWNlIFN5bmNTdGF0ZVBheWxvYWQge1xuICB2aWRlbzogQXJyYXk8eyBlbnRpdHk6IG51bWJlciB9ICYgVmlkZW9TdGF0ZT47XG4gIGFubm91bmNlbWVudDogQW5ub3VuY2VtZW50U3RhdGUgfCBudWxsO1xufVxuXG50eXBlIE1lc3NhZ2VIYW5kbGVyID0gKHBheWxvYWQ6IGFueSwgc2VuZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8vIOKUgOKUgCBNZXNzYWdlIGlkZW50aWZpZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBNU0cgPSB7XG4gIFNFVF9WSURFTzogJ2FkbWluOnNldC12aWRlbycsXG4gIFNFVF9BTk5PVU5DRU1FTlQ6ICdhZG1pbjpzZXQtYW5ub3VuY2VtZW50JyxcbiAgQ0xFQVJfQU5OT1VOQ0VNRU5UOiAnYWRtaW46Y2xlYXItYW5ub3VuY2VtZW50JyxcbiAgUkVRVUVTVF9TVEFURTogJ2FkbWluOnJlcXVlc3Qtc3RhdGUnLFxuICBTWU5DX1NUQVRFOiAnYWRtaW46c3luYy1zdGF0ZScsXG4gIFNZTkNfQURNSU5TOiAnYWRtaW46c3luYy1hZG1pbnMnLFxufSBhcyBjb25zdDtcblxuLy8g4pSA4pSAIFB1YmxpYyBpbnRlcmZhY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRtaW5NZXNzYWdlQnVzSW5zdGFuY2Uge1xuICBlbWl0U2V0VmlkZW8oZW50aXR5OiBFbnRpdHksIHByb3BzOiBQYXJ0aWFsPFBCVmlkZW9QbGF5ZXI+KTogdm9pZDtcbiAgZW1pdFNldEFubm91bmNlbWVudCh0ZXh0OiBzdHJpbmcsIGF1dGhvcj86IHN0cmluZywgaWQ/OiBzdHJpbmcpOiB2b2lkO1xuICBlbWl0Q2xlYXJBbm5vdW5jZW1lbnQoKTogdm9pZDtcbiAgZW1pdFN5bmNBZG1pbnMoKTogdm9pZDtcbiAgdXBkYXRlQWRtaW5MaXN0KGFkbWluczogU2NlbmVBZG1pbltdKTogdm9pZDtcbn1cblxubGV0IGluc3RhbmNlOiBBZG1pbk1lc3NhZ2VCdXNJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRtaW5NZXNzYWdlQnVzKCk6IEFkbWluTWVzc2FnZUJ1c0luc3RhbmNlIHtcbiAgaWYgKCFpbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdBZG1pbk1lc3NhZ2VCdXMgbm90IGluaXRpYWxpemVkJyk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8g4pSA4pSAIEluaXRpYWxpemF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEFkbWluTWVzc2FnZUJ1cyhcbiAgZW5naW5lOiBJRW5naW5lLFxuICBhZG1pbnM6IFNjZW5lQWRtaW5bXSxcbiAgYWRtaW5Ub29sa2l0VWlFbnRpdHk6IEVudGl0eSxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuICBvblJlZmV0Y2hBZG1pbnM/OiAoKSA9PiB2b2lkLFxuKTogQWRtaW5NZXNzYWdlQnVzSW5zdGFuY2Uge1xuICBsZXQgc2NlbmVBZG1pbnMgPSBhZG1pbnM7XG5cbiAgY29uc3QgeyBWaWRlb1BsYXllciwgU3luY0NvbXBvbmVudHMgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpO1xuICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzLCBWaWRlb1NjcmVlbiB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIGNvbnN0IGF1dGhvcml0YXRpdmVWaWRlbyA9IG5ldyBNYXA8RW50aXR5LCBWaWRlb1N0YXRlPigpO1xuICBsZXQgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudDogQW5ub3VuY2VtZW50U3RhdGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGFkbWluSGFzQWN0ZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBpc0FkbWluV2FsbGV0KHNlbmRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzUHJldmlldygpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc2VuZGVyID09PSAnc2VsZicpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBzY2VuZUFkbWlucy5zb21lKGFkbWluID0+IGFkbWluLmFkZHJlc3MudG9Mb3dlckNhc2UoKSA9PT0gc2VuZGVyLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgLy8g4pSA4pSAIE1lc3NhZ2luZyBsYXllciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gTG9jYWwgZGVsaXZlcnk6IGhhbmRsZXJzIGFyZSBjYWxsZWQgc3luY2hyb25vdXNseSBvbiBlbWl0LlxuICAvLyBSZW1vdGUgZGVsaXZlcnk6IGNvbW11bmljYXRpb25zQ29udHJvbGxlci5zZW5kKCkgKGJ5cGFzc2VzIE1lc3NhZ2VCdXMgZmx1c2ggcXVldWUpLlxuICAvLyBSZW1vdGUgcmVjZXB0aW9uOiBNZXNzYWdlQnVzLm9uKCkgKGxpc3RlbnMgb24gdGhlIGdsb2JhbCBvbkNvbW1zTWVzc2FnZSBvYnNlcnZhYmxlKS5cblxuICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBNZXNzYWdlSGFuZGxlcj4oKTtcbiAgY29uc3QgcmVjZWl2ZXIgPSBuZXcgTWVzc2FnZUJ1cygpO1xuXG4gIGZ1bmN0aW9uIG9uTWVzc2FnZSh0eXBlOiBzdHJpbmcsIGhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgaGFuZGxlcnMuc2V0KHR5cGUsIGhhbmRsZXIpO1xuICAgIHJlY2VpdmVyLm9uKHR5cGUsIGhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25BZG1pbk1lc3NhZ2UodHlwZTogc3RyaW5nLCBoYW5kbGVyOiBNZXNzYWdlSGFuZGxlcikge1xuICAgIG9uTWVzc2FnZSh0eXBlLCAocGF5bG9hZCwgc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoIWlzQWRtaW5XYWxsZXQoc2VuZGVyKSkgcmV0dXJuO1xuICAgICAgaGFuZGxlcihwYXlsb2FkLCBzZW5kZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZW1pdE1lc3NhZ2UodHlwZTogc3RyaW5nLCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVycy5nZXQodHlwZSk7XG4gICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIocGF5bG9hZCwgJ3NlbGYnKTtcblxuICAgIGNvbnN0IHJhdyA9IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZTogdHlwZSwgcGF5bG9hZCB9KTtcbiAgICBjb21tc1NlbmQoeyBtZXNzYWdlOiByYXcgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgLy8g4pSA4pSAIDEuIERpc2FibGUgQ1JEVCBzeW5jIGZvciBWaWRlb1BsYXllciBvbiBhZG1pbi1jb250cm9sbGVkIGVudGl0aWVzIOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZvciAoY29uc3QgdnAgb2YgZ2V0VmlkZW9QbGF5ZXJzKGVuZ2luZSkpIHtcbiAgICBjb25zdCBlbnRpdHkgPSB2cC5lbnRpdHkgYXMgRW50aXR5O1xuICAgIGNvbnN0IHN5bmMgPSBTeW5jQ29tcG9uZW50cy5nZXRPck51bGwoZW50aXR5KTtcbiAgICBpZiAoc3luYykge1xuICAgICAgY29uc3Qgd2l0aG91dFZpZGVvUGxheWVyID0gc3luYy5jb21wb25lbnRJZHMuZmlsdGVyKFxuICAgICAgICAoaWQ6IG51bWJlcikgPT4gaWQgIT09IFZpZGVvUGxheWVyLmNvbXBvbmVudElkLFxuICAgICAgKTtcbiAgICAgIFN5bmNDb21wb25lbnRzLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgY29tcG9uZW50SWRzOiB3aXRob3V0VmlkZW9QbGF5ZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIDIuIFNlZWQgYXV0aG9yaXRhdGl2ZSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gVmlkZW9QbGF5ZXI6IHNlZWRlZCBmcm9tIFZpZGVvU2NyZWVuLmRlZmF1bHRVUkwgKGRlcGxveS10aW1lLCB0cnVzdGVkKS5cbiAgLy8gVGV4dEFubm91bmNlbWVudHM6IHNlZWRlZCBhcyBlbXB0eSAobm8gZGVmYXVsdCBhbm5vdW5jZW1lbnQgYXQgZGVwbG95IHRpbWUpLlxuXG4gIGF1dGhvcml0YXRpdmVBbm5vdW5jZW1lbnQgPSB7IHRleHQ6ICcnLCBhdXRob3I6ICcnLCBpZDogJycgfTtcblxuICBmb3IgKGNvbnN0IHZwIG9mIGdldFZpZGVvUGxheWVycyhlbmdpbmUpKSB7XG4gICAgY29uc3QgZW50aXR5ID0gdnAuZW50aXR5IGFzIEVudGl0eTtcbiAgICBjb25zdCBzY3JlZW4gPSBWaWRlb1NjcmVlbi5nZXRPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCB2aWRlbyA9IFZpZGVvUGxheWVyLmdldE9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdmlkZW8pIGNvbnRpbnVlO1xuXG4gICAgY29uc3Qgc3JjID0gc2NyZWVuPy5kZWZhdWx0VVJMIHx8IHZpZGVvLnNyYztcbiAgICBhdXRob3JpdGF0aXZlVmlkZW8uc2V0KGVudGl0eSwge1xuICAgICAgc3JjLFxuICAgICAgcGxheWluZzogdmlkZW8ucGxheWluZyxcbiAgICAgIHZvbHVtZTogdmlkZW8udm9sdW1lLFxuICAgICAgbG9vcDogdmlkZW8ubG9vcCxcbiAgICB9KTtcblxuICAgIGlmICh2aWRlby5zcmMgIT09IHNyYykge1xuICAgICAgVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZShlbnRpdHkpLnNyYyA9IHNyYztcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgMy4gUmVnaXN0ZXIgY29tbWFuZCBoYW5kbGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvbkFkbWluTWVzc2FnZShNU0cuU0VUX1ZJREVPLCAocGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHBheWxvYWQuZW50aXR5IGFzIEVudGl0eTtcbiAgICBjb25zdCBjdXJyZW50ID0gVmlkZW9QbGF5ZXIuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG5cbiAgICBjb25zdCB1cGRhdGVkOiBWaWRlb1N0YXRlID0ge1xuICAgICAgc3JjOiBwYXlsb2FkLnNyYyA/PyBjdXJyZW50LnNyYyxcbiAgICAgIHBsYXlpbmc6IHBheWxvYWQucGxheWluZyA/PyBjdXJyZW50LnBsYXlpbmcsXG4gICAgICB2b2x1bWU6IHBheWxvYWQudm9sdW1lID8/IGN1cnJlbnQudm9sdW1lLFxuICAgICAgbG9vcDogcGF5bG9hZC5sb29wID8/IGN1cnJlbnQubG9vcCxcbiAgICB9O1xuICAgIGF1dGhvcml0YXRpdmVWaWRlby5zZXQoZW50aXR5LCB1cGRhdGVkKTtcblxuICAgIGNvbnN0IHZpZGVvID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgIHZpZGVvLnNyYyA9IHVwZGF0ZWQuc3JjO1xuICAgIHZpZGVvLnBsYXlpbmcgPSB1cGRhdGVkLnBsYXlpbmc7XG4gICAgdmlkZW8udm9sdW1lID0gdXBkYXRlZC52b2x1bWU7XG4gICAgdmlkZW8ubG9vcCA9IHVwZGF0ZWQubG9vcDtcbiAgICBpZiAocGF5bG9hZC5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB2aWRlby5wb3NpdGlvbiA9IHBheWxvYWQucG9zaXRpb247XG5cbiAgICBhZG1pbkhhc0FjdGVkID0gdHJ1ZTtcbiAgfSk7XG5cbiAgb25BZG1pbk1lc3NhZ2UoTVNHLlNFVF9BTk5PVU5DRU1FTlQsIChwYXlsb2FkLCBfc2VuZGVyKSA9PiB7XG4gICAgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudCA9IHtcbiAgICAgIHRleHQ6IHBheWxvYWQudGV4dCxcbiAgICAgIGF1dGhvcjogcGF5bG9hZC5hdXRob3IsXG4gICAgICBpZDogcGF5bG9hZC5pZCxcbiAgICB9O1xuICAgIGNvbnN0IHRhID0gVGV4dEFubm91bmNlbWVudHMuZ2V0TXV0YWJsZU9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgaWYgKCF0YSkgcmV0dXJuO1xuICAgIHRhLnRleHQgPSBwYXlsb2FkLnRleHQ7XG4gICAgdGEuYXV0aG9yID0gcGF5bG9hZC5hdXRob3I7XG4gICAgdGEuaWQgPSBwYXlsb2FkLmlkO1xuICAgIGFkbWluSGFzQWN0ZWQgPSB0cnVlO1xuICB9KTtcblxuICBvbkFkbWluTWVzc2FnZShNU0cuQ0xFQVJfQU5OT1VOQ0VNRU5ULCAoX3BheWxvYWQsIF9zZW5kZXIpID0+IHtcbiAgICBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50ID0geyB0ZXh0OiAnJywgYXV0aG9yOiAnJywgaWQ6ICcnIH07XG4gICAgY29uc3QgdGEgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRNdXRhYmxlT3JOdWxsKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICBpZiAoIXRhKSByZXR1cm47XG4gICAgdGEudGV4dCA9ICcnO1xuICAgIHRhLmF1dGhvciA9ICcnO1xuICAgIHRhLmlkID0gJyc7XG4gICAgYWRtaW5IYXNBY3RlZCA9IHRydWU7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCA0LiBTdGF0ZSBzeW5jIGZvciBsYXRlIGpvaW5lcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gYnJvYWRjYXN0Q3VycmVudFN0YXRlKCkge1xuICAgIGNvbnN0IHZpZGVvOiBTeW5jU3RhdGVQYXlsb2FkWyd2aWRlbyddID0gW107XG4gICAgZm9yIChjb25zdCB2cCBvZiBnZXRWaWRlb1BsYXllcnMoZW5naW5lKSkge1xuICAgICAgY29uc3QgZW50aXR5ID0gdnAuZW50aXR5IGFzIEVudGl0eTtcbiAgICAgIGNvbnN0IHNjcmVlbiA9IFZpZGVvU2NyZWVuLmdldE9yTnVsbChlbnRpdHkpO1xuICAgICAgY29uc3QgY3VycmVudCA9IFZpZGVvUGxheWVyLmdldE9yTnVsbChlbnRpdHkpO1xuICAgICAgaWYgKCFjdXJyZW50KSBjb250aW51ZTtcbiAgICAgIGlmIChjdXJyZW50LnNyYyAhPT0gKHNjcmVlbj8uZGVmYXVsdFVSTCB8fCAnJykpIHtcbiAgICAgICAgdmlkZW8ucHVzaCh7IGVudGl0eTogZW50aXR5IGFzIG51bWJlciwgLi4uY3VycmVudCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YSA9IFRleHRBbm5vdW5jZW1lbnRzLmdldE9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgY29uc3QgYW5ub3VuY2VtZW50ID0gdGE/LmlkID8geyB0ZXh0OiB0YS50ZXh0LCBhdXRob3I6IHRhLmF1dGhvciA/PyAnJywgaWQ6IHRhLmlkIH0gOiBudWxsO1xuXG4gICAgaWYgKHZpZGVvLmxlbmd0aCA9PT0gMCAmJiAhYW5ub3VuY2VtZW50KSByZXR1cm47XG4gICAgZW1pdE1lc3NhZ2UoTVNHLlNZTkNfU1RBVEUsIHsgdmlkZW8sIGFubm91bmNlbWVudCB9KTtcbiAgfVxuXG4gIG9uQWRtaW5NZXNzYWdlKE1TRy5TWU5DX1NUQVRFLCAocGF5bG9hZDogU3luY1N0YXRlUGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGZvciAoY29uc3QgdnMgb2YgcGF5bG9hZC52aWRlbykge1xuICAgICAgY29uc3QgZW50aXR5ID0gdnMuZW50aXR5IGFzIEVudGl0eTtcbiAgICAgIGF1dGhvcml0YXRpdmVWaWRlby5zZXQoZW50aXR5LCB7XG4gICAgICAgIHNyYzogdnMuc3JjLFxuICAgICAgICBwbGF5aW5nOiB2cy5wbGF5aW5nLFxuICAgICAgICB2b2x1bWU6IHZzLnZvbHVtZSxcbiAgICAgICAgbG9vcDogdnMubG9vcCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdmlkZW8gPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgICBpZiAoIXZpZGVvKSBjb250aW51ZTtcbiAgICAgIHZpZGVvLnNyYyA9IHZzLnNyYztcbiAgICAgIGlmICh2cy5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHZpZGVvLnBsYXlpbmcgPSB2cy5wbGF5aW5nO1xuICAgICAgaWYgKHZzLnZvbHVtZSAhPT0gdW5kZWZpbmVkKSB2aWRlby52b2x1bWUgPSB2cy52b2x1bWU7XG4gICAgICBpZiAodnMubG9vcCAhPT0gdW5kZWZpbmVkKSB2aWRlby5sb29wID0gdnMubG9vcDtcbiAgICB9XG5cbiAgICBpZiAocGF5bG9hZC5hbm5vdW5jZW1lbnQ/LmlkKSB7XG4gICAgICBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50ID0geyAuLi5wYXlsb2FkLmFubm91bmNlbWVudCB9O1xuICAgICAgY29uc3QgdGEgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRNdXRhYmxlT3JOdWxsKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgIGlmICh0YSkge1xuICAgICAgICB0YS50ZXh0ID0gcGF5bG9hZC5hbm5vdW5jZW1lbnQudGV4dDtcbiAgICAgICAgdGEuYXV0aG9yID0gcGF5bG9hZC5hbm5vdW5jZW1lbnQuYXV0aG9yO1xuICAgICAgICB0YS5pZCA9IHBheWxvYWQuYW5ub3VuY2VtZW50LmlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFkbWluSGFzQWN0ZWQgPSB0cnVlO1xuICB9KTtcblxuICBvbk1lc3NhZ2UoTVNHLlJFUVVFU1RfU1RBVEUsIChfcGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGlmIChhZG1pbkhhc0FjdGVkKSBicm9hZGNhc3RDdXJyZW50U3RhdGUoKTtcbiAgfSk7XG5cbiAgcGxheWVyc0hlbHBlcj8ub25FbnRlclNjZW5lKCgpID0+IHtcbiAgICBpZiAoYWRtaW5IYXNBY3RlZCkgYnJvYWRjYXN0Q3VycmVudFN0YXRlKCk7XG4gIH0pO1xuXG4gIC8vIFdoZW4gYW4gYWRtaW4gc2lnbmFscyB0aGF0IHRoZSBhZG1pbiBsaXN0IGNoYW5nZWQsIGFsbCBwYXJ0aWNpcGFudHMgcmVmZXRjaFxuICBvbkFkbWluTWVzc2FnZShNU0cuU1lOQ19BRE1JTlMsIChfcGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIG9uUmVmZXRjaEFkbWlucz8uKCk7XG4gIH0pO1xuXG4gIC8vIFJlcXVlc3Qgc3RhdGUgZnJvbSBhbnkgZXhpc3RpbmcgcGFydGljaXBhbnQgdGhhdCBoYXMgYWRtaW4gc3RhdGVcbiAgZW1pdE1lc3NhZ2UoTVNHLlJFUVVFU1RfU1RBVEUsIHt9KTtcblxuICAvLyDilIDilIAgNS4gUmV2ZXJ0IHN5c3RlbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gQXR0YWNrZXIgQ1JEVCB3cml0ZXMgYnlwYXNzIFN5bmNDb21wb25lbnRzIChpbmplY3RlZCBkaXJlY3RseSB2aWEgTGl2ZUtpdClcbiAgLy8gYnV0IGFyZSBjYXVnaHQgaGVyZS4gQWRtaW4gY29tbWFuZHMgdXBkYXRlIGF1dGhvcml0YXRpdmVWaWRlby9Bbm5vdW5jZW1lbnRcbiAgLy8gYmVmb3JlIG11dGF0aW5nIGNvbXBvbmVudHMsIHNvIGxlZ2l0aW1hdGUgY2hhbmdlcyBhcmUgbmV2ZXIgcmV2ZXJ0ZWQuXG5cbiAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBhdXRoU3RhdGVdIG9mIGF1dGhvcml0YXRpdmVWaWRlbykge1xuICAgICAgY29uc3QgdnAgPSBWaWRlb1BsYXllci5nZXRPck51bGwoZW50aXR5KTtcbiAgICAgIGlmICghdnApIGNvbnRpbnVlO1xuICAgICAgaWYgKHZwLnNyYyAhPT0gYXV0aFN0YXRlLnNyYykge1xuICAgICAgICBjb25zdCBtdXQgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlKGVudGl0eSk7XG4gICAgICAgIG11dC5zcmMgPSBhdXRoU3RhdGUuc3JjO1xuICAgICAgICBtdXQucGxheWluZyA9IGF1dGhTdGF0ZS5wbGF5aW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50KSB7XG4gICAgICBjb25zdCB0YSA9IFRleHRBbm5vdW5jZW1lbnRzLmdldE9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgICBpZiAodGEgJiYgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudC5pZCAmJiB0YS5pZCAhPT0gYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudC5pZCkge1xuICAgICAgICBjb25zdCBtdXQgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRNdXRhYmxlKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgICAgbXV0LnRleHQgPSBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LnRleHQ7XG4gICAgICAgIG11dC5hdXRob3IgPSBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LmF1dGhvcjtcbiAgICAgICAgbXV0LmlkID0gYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudC5pZDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBJbnN0YW5jZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpbnN0YW5jZSA9IHtcbiAgICBlbWl0U2V0VmlkZW8oZW50aXR5OiBFbnRpdHksIHByb3BzOiBQYXJ0aWFsPFBCVmlkZW9QbGF5ZXI+KSB7XG4gICAgICBlbWl0TWVzc2FnZShNU0cuU0VUX1ZJREVPLCB7IGVudGl0eSwgLi4ucHJvcHMgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgfSxcblxuICAgIGVtaXRTZXRBbm5vdW5jZW1lbnQodGV4dDogc3RyaW5nLCBhdXRob3I/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG4gICAgICBlbWl0TWVzc2FnZShNU0cuU0VUX0FOTk9VTkNFTUVOVCwge1xuICAgICAgICB0ZXh0LFxuICAgICAgICBhdXRob3I6IGF1dGhvciA/PyAnJyxcbiAgICAgICAgaWQ6IGlkID8/ICcnLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGVtaXRDbGVhckFubm91bmNlbWVudCgpIHtcbiAgICAgIGVtaXRNZXNzYWdlKE1TRy5DTEVBUl9BTk5PVU5DRU1FTlQsIHt9KTtcbiAgICB9LFxuXG4gICAgZW1pdFN5bmNBZG1pbnMoKSB7XG4gICAgICBlbWl0TWVzc2FnZShNU0cuU1lOQ19BRE1JTlMsIHt9KTtcbiAgICB9LFxuXG4gICAgdXBkYXRlQWRtaW5MaXN0KGFkbWluczogU2NlbmVBZG1pbltdKSB7XG4gICAgICBzY2VuZUFkbWlucyA9IGFkbWlucztcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbiJdfQ==
@@ -4,9 +4,10 @@ import { type IEngine, type PointerEventsSystem } from '@dcl/ecs';
4
4
  import { type IPlayersHelper, type ISDKHelpers } from '../definitions';
5
5
  import { type State } from './types';
6
6
  export declare const nextTickFunctions: (() => void)[];
7
- export declare let state: State;
7
+ export declare const state: State;
8
8
  export declare const containerBackgroundColor: Color4.MutableColor4;
9
9
  export declare function fetchSceneAdmins(): Promise<void>;
10
+ export declare function fetchAndSyncSceneAdmins(): Promise<void>;
10
11
  export declare function fetchSceneBans(): Promise<void>;
11
12
  export declare function clearSceneBansCache(): void;
12
13
  export declare function getSmartItems(engine: IEngine): import("@dcl/ecs").DeepReadonlyObject<import("@dcl/ecs").MapResult<{
@@ -14,5 +15,5 @@ export declare function getSmartItems(engine: IEngine): import("@dcl/ecs").DeepR
14
15
  customName: import("@dcl/ecs").ISchema<string>;
15
16
  defaultAction: import("@dcl/ecs").ISchema<string>;
16
17
  }>>[];
17
- export declare function initializeAdminData(engine: IEngine, sdkHelpers?: ISDKHelpers): Promise<void>;
18
+ export declare function initializeAdminData(engine: IEngine, sdkHelpers?: ISDKHelpers, playersHelper?: IPlayersHelper): Promise<void>;
18
19
  export declare function createAdminToolkitUI(engine: IEngine, pointerEventsSystem: PointerEventsSystem, reactBasedUiSystem: ReactBasedUiSystem, sdkHelpers?: ISDKHelpers, playersHelper?: IPlayersHelper): void;
@@ -15,9 +15,10 @@ import { showcaseState, sharePresentationState } from './VideoControl/DclCast';
15
15
  import { SpeakerShowcase } from './VideoControl/DclCast/SpeakerShowcase';
16
16
  import SharePresentationModal from './VideoControl/DclCast/SharePresentationModal';
17
17
  import { isPreview } from './fetch-utils';
18
+ import { initAdminMessageBus, getAdminMessageBus } from './admin-message-bus';
18
19
  export const nextTickFunctions = [];
19
20
  const ADMIN_TOOLKIT_VIRTUAL_UI_SIZE = { virtualWidth: 1920, virtualHeight: 1080 };
20
- export let state = {
21
+ export const state = {
21
22
  adminToolkitUiEntity: 0,
22
23
  panelOpen: false,
23
24
  activeTab: TabType.NONE,
@@ -88,6 +89,15 @@ export async function fetchSceneAdmins() {
88
89
  canBeRemoved: !!$.canBeRemoved,
89
90
  }))
90
91
  .sort(a => (a.canBeRemoved ? 1 : -1));
92
+ if (adminDataInitialized) {
93
+ getAdminMessageBus().updateAdminList(sceneAdminsCache);
94
+ }
95
+ }
96
+ export async function fetchAndSyncSceneAdmins() {
97
+ await fetchSceneAdmins();
98
+ if (adminDataInitialized) {
99
+ getAdminMessageBus().emitSyncAdmins();
100
+ }
91
101
  }
92
102
  export async function fetchSceneBans() {
93
103
  const [error, response] = await getSceneBans();
@@ -104,10 +114,6 @@ export function getSmartItems(engine) {
104
114
  const adminToolkitComponent = getAdminToolkitComponent(engine);
105
115
  return Array.from(adminToolkitComponent.smartItemsControl.smartItems ?? []);
106
116
  }
107
- function getRewards(engine) {
108
- const adminToolkitComponent = getAdminToolkitComponent(engine);
109
- return Array.from(adminToolkitComponent?.rewardsControl?.rewardItems ?? []);
110
- }
111
117
  function initTextAnnouncementSync(engine) {
112
118
  const { TextAnnouncements } = getComponents(engine);
113
119
  TextAnnouncements.createOrReplace(state.adminToolkitUiEntity, {
@@ -117,15 +123,15 @@ function initTextAnnouncementSync(engine) {
117
123
  });
118
124
  }
119
125
  let adminDataInitialized = false;
120
- export async function initializeAdminData(engine, sdkHelpers) {
126
+ export async function initializeAdminData(engine, sdkHelpers, playersHelper) {
121
127
  if (!adminDataInitialized) {
122
- const { TextAnnouncements, VideoControlState } = getComponents(engine);
128
+ const { VideoControlState } = getComponents(engine);
123
129
  state.adminToolkitUiEntity = getAdminToolkitEntity(engine) ?? engine.addEntity();
124
130
  initTextAnnouncementSync(engine);
125
131
  if (!VideoControlState.getOrNull(state.adminToolkitUiEntity)) {
126
132
  VideoControlState.create(state.adminToolkitUiEntity);
127
133
  }
128
- sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId, TextAnnouncements.componentId], ADMIN_TOOLS_ENTITY);
134
+ sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId], ADMIN_TOOLS_ENTITY);
129
135
  engine.addSystem(() => {
130
136
  if (nextTickFunctions.length > 0) {
131
137
  const nextTick = nextTickFunctions.shift();
@@ -135,12 +141,13 @@ export async function initializeAdminData(engine, sdkHelpers) {
135
141
  }
136
142
  }, Number.POSITIVE_INFINITY);
137
143
  await Promise.all([fetchSceneAdmins(), fetchSceneBans()]);
144
+ initAdminMessageBus(engine, sceneAdminsCache, state.adminToolkitUiEntity, playersHelper, fetchSceneAdmins);
138
145
  adminDataInitialized = true;
139
146
  console.log('initializeAdminData - initialized');
140
147
  }
141
148
  }
142
149
  export function createAdminToolkitUI(engine, pointerEventsSystem, reactBasedUiSystem, sdkHelpers, playersHelper) {
143
- initializeAdminData(engine, sdkHelpers).then(() => {
150
+ initializeAdminData(engine, sdkHelpers, playersHelper).then(() => {
144
151
  console.log('createAdminToolkitUI - initialized');
145
152
  reactBasedUiSystem.setUiRenderer(() => uiComponent(engine, pointerEventsSystem, sdkHelpers, playersHelper), ADMIN_TOOLKIT_VIRTUAL_UI_SIZE);
146
153
  });
@@ -327,4 +334,4 @@ const uiComponent = (engine, pointerEventsSystem, sdkHelpers, playersHelper) =>
327
334
  sharePresentationState.show && sharePresentationState.onClose && (ReactEcs.createElement(SharePresentationModal, { onClose: sharePresentationState.onClose, streamingKey: state.videoControl.dclCast?.streamingKey ?? '' })),
328
335
  ];
329
336
  };
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQWMsT0FBTyxFQUEwQixNQUFNLFNBQVMsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixzQkFBc0IsR0FFdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxzQkFBc0IsTUFBTSwrQ0FBK0MsQ0FB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QUFhLENBQUMsY0FBYyxFQUM1QyxhQUFhLEVBQUUsYUFBYSxDQUFDLGFBQWEsRUFDMUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQ3hDLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxHQUM5QixDQUNIO1FBQ0gsc0JBQXNCLENBQUMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxDQUMvRCx1QkFBQyxzQkFBc0IsSUFDckIsT0FBTyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sRUFDdkMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksSUFBSSxFQUFFLEdBQzVELENBQ0g7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFJlYWN0RWNzIGlzIHJlcXVpcmVkIGZvciBKU1ggZmFjdG9yeVxuaW1wb3J0IFJlYWN0RWNzLCB7XG4gIExhYmVsLFxuICBCdXR0b24gYXMgRENMQnV0dG9uLFxuICBVaUVudGl0eSxcbiAgdHlwZSBSZWFjdEJhc2VkVWlTeXN0ZW0sXG59IGZyb20gJ0BkY2wvcmVhY3QtZWNzJztcbmltcG9ydCB7IHR5cGUgRW50aXR5LCB0eXBlIElFbmdpbmUsIHR5cGUgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIHR5cGUgR2V0UGxheWVyRGF0YVJlcyxcbiAgdHlwZSBJUGxheWVyc0hlbHBlcixcbiAgdHlwZSBJU0RLSGVscGVycyxcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgVmlkZW9Db250cm9sIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wnO1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHNDb250cm9sIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wnO1xuaW1wb3J0IHsgU21hcnRJdGVtc0NvbnRyb2wgfSBmcm9tICcuL1NtYXJ0SXRlbXNDb250cm9sJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uJztcbmltcG9ydCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50cyc7XG5pbXBvcnQgeyBnZXRDb250ZW50VXJsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdHlwZSBTdGF0ZSwgVGFiVHlwZSwgdHlwZSBTZWxlY3RlZFNtYXJ0SXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0QnRuTW9kZXJhdGlvbkNvbnRyb2wsXG4gIE1vZGVyYXRpb25Db250cm9sLFxuICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLFxuICB0eXBlIFNjZW5lQWRtaW4sXG59IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wnO1xuaW1wb3J0IHsgZ2V0U2NlbmVBZG1pbnMsIGdldFNjZW5lQmFucywgdHlwZSBTY2VuZUJhblVzZXIgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL2FwaSc7XG5pbXBvcnQgeyBNb2RhbFVzZXJMaXN0LCBVc2VyTGlzdFR5cGUgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL1VzZXJzTGlzdCc7XG5pbXBvcnQgeyBzaG93Y2FzZVN0YXRlLCBzaGFyZVByZXNlbnRhdGlvblN0YXRlIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wvRGNsQ2FzdCc7XG5pbXBvcnQgeyBTcGVha2VyU2hvd2Nhc2UgfSBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L1NwZWFrZXJTaG93Y2FzZSc7XG5pbXBvcnQgU2hhcmVQcmVzZW50YXRpb25Nb2RhbCBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L1NoYXJlUHJlc2VudGF0aW9uTW9kYWwnO1xuaW1wb3J0IHsgaXNQcmV2aWV3IH0gZnJvbSAnLi9mZXRjaC11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBuZXh0VGlja0Z1bmN0aW9uczogKCgpID0+IHZvaWQpW10gPSBbXTtcbmNvbnN0IEFETUlOX1RPT0xLSVRfVklSVFVBTF9VSV9TSVpFID0geyB2aXJ0dWFsV2lkdGg6IDE5MjAsIHZpcnR1YWxIZWlnaHQ6IDEwODAgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuZXhwb3J0IGxldCBzdGF0ZTogU3RhdGUgPSB7XG4gIGFkbWluVG9vbGtpdFVpRW50aXR5OiAwIGFzIEVudGl0eSxcbiAgcGFuZWxPcGVuOiBmYWxzZSxcbiAgYWN0aXZlVGFiOiBUYWJUeXBlLk5PTkUsXG4gIHZpZGVvQ29udHJvbDoge1xuICAgIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZFN0cmVhbTogdW5kZWZpbmVkLFxuICAgIGRjbENhc3Q6IHVuZGVmaW5lZCxcbiAgICBpc01pbmltaXplZDogZmFsc2UsXG4gICAgcHJlc2VudGF0aW9uU3RhdGU6IHVuZGVmaW5lZCxcbiAgfSxcbiAgc21hcnRJdGVtc0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFNtYXJ0SXRlbTogdW5kZWZpbmVkLFxuICAgIHNtYXJ0SXRlbXM6IG5ldyBNYXA8RW50aXR5LCBTZWxlY3RlZFNtYXJ0SXRlbT4oKSxcbiAgfSxcbiAgdGV4dEFubm91bmNlbWVudENvbnRyb2w6IHtcbiAgICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgICB0ZXh0OiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZVJhdGVUcmFja2VyOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgIGFubm91bmNlbWVudHM6IFtdLFxuICAgIG1heEFubm91bmNlbWVudHM6IDQsXG4gIH0sXG4gIHJld2FyZHNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRSZXdhcmRJdGVtOiB1bmRlZmluZWQsXG4gIH0sXG59O1xuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW107XG5sZXQgc2NlbmVCYW5zQ2FjaGU6IFNjZW5lQmFuVXNlcltdID0gW107XG5cbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtcmV3YXJkcy1jb250cm9sLWJ1dHRvbi5wbmdgXG4vLyBjb25zdCBCVE5fUkVXQVJEU19DT05UUk9MX0FDVElWRSA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYWN0aXZlLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEFETUlOX0lDT05TID0ge1xuICBnZXQgQlROX1ZJREVPX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtc21hcnQtaXRlbS1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQoKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvYmFja2dyb3VuZHMvYWRtaW4tdG9vbC1iYWNrZ3JvdW5kLnBuZ2A7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KTtcblxuLy8gVGhlIGVkaXRvciBzdGFydHMgdXNpbmcgZW50aXRpZXMgZnJvbSBbODAwMV0uXG5jb25zdCBBRE1JTl9UT09MU19FTlRJVFkgPSA4MDAwIGFzIEVudGl0eTtcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF07XG59XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIC8vIHVzZXIgZG9lc250IGhhdmUgcGVybWlzc2lvbnNcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGVycm9yIH0pKTtcbiAgICBzY2VuZUFkbWluc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIHNjZW5lQWRtaW5zQ2FjaGUgPSAocmVzcG9uc2UgPz8gW10pXG4gICAgLm1hcCgkID0+ICh7XG4gICAgICBuYW1lOiAkLm5hbWUsXG4gICAgICBhZGRyZXNzOiAkLmFkbWluLFxuICAgICAgcm9sZTogJ2FkbWluJyBhcyBjb25zdCxcbiAgICAgIHZlcmlmaWVkOiAhJC5uYW1lLmluY2x1ZGVzKCcjJyksXG4gICAgICBjYW5CZVJlbW92ZWQ6ICEhJC5jYW5CZVJlbW92ZWQsXG4gICAgfSkpXG4gICAgLnNvcnQoYSA9PiAoYS5jYW5CZVJlbW92ZWQgPyAxIDogLTEpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoU2NlbmVCYW5zKCkge1xuICBjb25zdCBbZXJyb3IsIHJlc3BvbnNlXSA9IGF3YWl0IGdldFNjZW5lQmFucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIHNjZW5lQmFuc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NlbmVCYW5zQ2FjaGUgPSByZXNwb25zZT8ucmVzdWx0cyA/PyBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2NlbmVCYW5zQ2FjaGUoKSB7XG4gIHNjZW5lQmFuc0NhY2hlID0gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcyA/PyBbXSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGdldFJld2FyZHMoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdENvbXBvbmVudCA9IGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudD8ucmV3YXJkc0NvbnRyb2w/LnJld2FyZEl0ZW1zID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gaW5pdFRleHRBbm5vdW5jZW1lbnRTeW5jKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG5cbiAgVGV4dEFubm91bmNlbWVudHMuY3JlYXRlT3JSZXBsYWNlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LCB7XG4gICAgdGV4dDogJycsXG4gICAgYXV0aG9yOiAnJyxcbiAgICBpZDogJycsXG4gIH0pO1xufVxuXG4vLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIFVJIHJlbmRlcmluZ1xubGV0IGFkbWluRGF0YUluaXRpYWxpemVkID0gZmFsc2U7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFkbWluRGF0YShlbmdpbmU6IElFbmdpbmUsIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycykge1xuICBpZiAoIWFkbWluRGF0YUluaXRpYWxpemVkKSB7XG4gICAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cywgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSA9IGdldEFkbWluVG9vbGtpdEVudGl0eShlbmdpbmUpID8/IGVuZ2luZS5hZGRFbnRpdHkoKTtcblxuICAgIC8vIEluaXRpYWxpemUgVGV4dEFubm91bmNlbWVudHMgc3luYyBjb21wb25lbnRcbiAgICBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lKTtcblxuICAgIC8vIC8vIEluaXRpYWxpemUgUmV3YXJkcyBzeW5jXG4gICAgLy8gaW5pdFJld2FyZHNTeW5jKGVuZ2luZSwgc2RrSGVscGVycylcblxuICAgIGlmICghVmlkZW9Db250cm9sU3RhdGUuZ2V0T3JOdWxsKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KSkge1xuICAgICAgVmlkZW9Db250cm9sU3RhdGUuY3JlYXRlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICB9XG5cbiAgICBzZGtIZWxwZXJzPy5zeW5jRW50aXR5Py4oXG4gICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgIFtWaWRlb0NvbnRyb2xTdGF0ZS5jb21wb25lbnRJZCwgVGV4dEFubm91bmNlbWVudHMuY29tcG9uZW50SWRdLFxuICAgICAgQURNSU5fVE9PTFNfRU5USVRZLFxuICAgICk7XG5cbiAgICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICAgIGlmIChuZXh0VGlja0Z1bmN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRUaWNrID0gbmV4dFRpY2tGdW5jdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5leHRUaWNrKSB7XG4gICAgICAgICAgbmV4dFRpY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHNjZW5lIGRhdGFcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbZmV0Y2hTY2VuZUFkbWlucygpLCBmZXRjaFNjZW5lQmFucygpXSk7XG5cbiAgICBhZG1pbkRhdGFJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZUFkbWluRGF0YSAtIGluaXRpYWxpemVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluVG9vbGtpdFVJKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHJlYWN0QmFzZWRVaVN5c3RlbTogUmVhY3RCYXNlZFVpU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICAvLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIHNldHRpbmcgdXAgdGhlIFVJXG4gIGluaXRpYWxpemVBZG1pbkRhdGEoZW5naW5lLCBzZGtIZWxwZXJzKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlQWRtaW5Ub29sa2l0VUkgLSBpbml0aWFsaXplZCcpO1xuICAgIHJlYWN0QmFzZWRVaVN5c3RlbS5zZXRVaVJlbmRlcmVyKFxuICAgICAgKCkgPT4gdWlDb21wb25lbnQoZW5naW5lLCBwb2ludGVyRXZlbnRzU3lzdGVtLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKSxcbiAgICAgIEFETUlOX1RPT0xLSVRfVklSVFVBTF9VSV9TSVpFLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWRBZG1pbihcbiAgX2VuZ2luZTogSUVuZ2luZSxcbiAgYWRtaW5Ub29sa2l0RW50aXRpZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50PixcbiAgcGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBpZiAoIXBsYXllcikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHBsYXllckFkZHJlc3MgPSBwbGF5ZXIudXNlcklkLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGlzQWRtaW4gPSBzY2VuZUFkbWluc0NhY2hlLmZpbmQoJCA9PiAkLmFkZHJlc3MgPT09IHBsYXllckFkZHJlc3MpO1xuXG4gIHJldHVybiBpc0FkbWluIHx8IGlzUHJldmlldygpO1xufVxuXG5jb25zdCB1aUNvbXBvbmVudCA9IChcbiAgZW5naW5lOiBJRW5naW5lLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtOiBQb2ludGVyRXZlbnRzU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikgPT4ge1xuICBjb25zdCBhZG1pblRvb2xraXRFbnRpdHkgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcbiAgY29uc3QgcGxheWVyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk7XG4gIGNvbnN0IGlzUGxheWVyQWRtaW4gPSBpc0FsbG93ZWRBZG1pbihlbmdpbmUsIGFkbWluVG9vbGtpdEVudGl0eSwgcGxheWVyKTtcblxuICByZXR1cm4gW1xuICAgIDxVaUVudGl0eVxuICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2lzUGxheWVyQWRtaW4gPyAoXG4gICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBwb3NpdGlvblR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogMTIwLCByaWdodDogMTQgfSxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiBzdGF0ZS5wYW5lbE9wZW4gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgIHdpZHRoOiA1MDAsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgICAgbGVmdDogMTIsXG4gICAgICAgICAgICAgICAgICByaWdodDogMTIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7IGNvbG9yOiBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJBRE1JTiBUT09MU1wiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezIwfVxuICAgICAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuY3JlYXRlKDE2MCwgMTU1LCAxNjgsIDEpfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfbW9kZXJhdGlvbl9jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MID8gJ3ByaW1hcnknIDogJ3RleHQnfVxuICAgICAgICAgICAgICAgIGljb249e2dldEJ0bk1vZGVyYXRpb25Db250cm9sKCl9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub29sa2l0RW50aXR5Lm1vZGVyYXRpb25Db250cm9sLmlzRW5hYmxlZCAmJiAhaXNQcmV2aWV3KClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yNC5CbGFjaygpXG4gICAgICAgICAgICAgICAgICAgICAgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25UcmFuc2Zvcm09e3sgaGVpZ2h0OiAnMTAwJScsIHdpZHRoOiAnMTAwJScgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF92aWRlb19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fVklERU9fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gQ29sb3I0LkJsYWNrKCkgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0eS52aWRlb0NvbnRyb2wuaXNFbmFibGVkID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5WSURFT19DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5WSURFT19DT05UUk9MO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X3BhbmVsX3NtYXJ0X2l0ZW1zX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9e3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gJ3ByaW1hcnknIDogJ3RleHQnfVxuICAgICAgICAgICAgICAgIGljb249e0FETUlOX0lDT05TLkJUTl9TTUFSVF9JVEVNX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5LnNtYXJ0SXRlbXNDb250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF90ZXh0X2Fubm91bmNlbWVudF9jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudGV4dEFubm91bmNlbWVudENvbnRyb2wuaXNFbmFibGVkID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgPFRleHRBbm5vdW5jZW1lbnRzQ29udHJvbFxuICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8VmlkZW9Db250cm9sXG4gICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgIHBsYXllckFkZHJlc3M9e3BsYXllcj8udXNlcklkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgIDxTbWFydEl0ZW1zQ29udHJvbFxuICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wgJiYgKFxuICAgICAgICAgICAgICA8TW9kZXJhdGlvbkNvbnRyb2xcbiAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgICBzY2VuZUFkbWlucz17c2NlbmVBZG1pbnNDYWNoZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgd2lkdGg6IDQyLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBBRE1JTl9JQ09OUy5CVE5fQURNSU5fVE9PTEtJVF9CQUNLR1JPVU5ELFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAxLCAxLCAxKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERDTEJ1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogQURNSU5fSUNPTlMuQlROX0FETUlOX1RPT0xLSVRfQ09OVFJPTCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFuZWxPcGVuID0gIXN0YXRlLnBhbmVsT3BlbjtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFRleHRBbm5vdW5jZW1lbnRzXG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAvPlxuICAgIDwvVWlFbnRpdHk+LFxuICAgIG1vZGVyYXRpb25Db250cm9sU3RhdGUuc2hvd01vZGFsQWRtaW5MaXN0ICYmIChcbiAgICAgIDxNb2RhbFVzZXJMaXN0XG4gICAgICAgIHVzZXJzPXtzY2VuZUFkbWluc0NhY2hlID8/IFtdfVxuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgdHlwZT17VXNlckxpc3RUeXBlLkFETUlOfVxuICAgICAgLz5cbiAgICApLFxuICAgIG1vZGVyYXRpb25Db250cm9sU3RhdGUuc2hvd01vZGFsQmFuTGlzdCAmJiAoXG4gICAgICA8TW9kYWxVc2VyTGlzdFxuICAgICAgICB1c2Vycz17c2NlbmVCYW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICB0eXBlPXtVc2VyTGlzdFR5cGUuQkFOfVxuICAgICAgLz5cbiAgICApLFxuICAgIHNob3djYXNlU3RhdGUuc2hvdyAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrICYmXG4gICAgICBzaG93Y2FzZVN0YXRlLm9uU2V0RGVmYXVsdCAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vbkNsb3NlICYmIChcbiAgICAgICAgPFNwZWFrZXJTaG93Y2FzZVxuICAgICAgICAgIHBhcnRpY2lwYW50cz17c2hvd2Nhc2VTdGF0ZS5wYXJ0aWNpcGFudHN9XG4gICAgICAgICAgYWN0aXZlVHJhY2tTaWQ9e3Nob3djYXNlU3RhdGUuYWN0aXZlVHJhY2tTaWR9XG4gICAgICAgICAgb25TZWxlY3RUcmFjaz17c2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrfVxuICAgICAgICAgIG9uU2V0RGVmYXVsdD17c2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHR9XG4gICAgICAgICAgb25DbG9zZT17c2hvd2Nhc2VTdGF0ZS5vbkNsb3NlfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLnNob3cgJiYgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5vbkNsb3NlICYmIChcbiAgICAgIDxTaGFyZVByZXNlbnRhdGlvbk1vZGFsXG4gICAgICAgIG9uQ2xvc2U9e3NoYXJlUHJlc2VudGF0aW9uU3RhdGUub25DbG9zZX1cbiAgICAgICAgc3RyZWFtaW5nS2V5PXtzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdD8uc3RyZWFtaW5nS2V5ID8/ICcnfVxuICAgICAgLz5cbiAgICApLFxuICBdO1xufTtcbiJdfQ==
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQWMsT0FBTyxFQUEwQixNQUFNLFNBQVMsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixzQkFBc0IsR0FFdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxzQkFBc0IsTUFBTSwrQ0FBK0MsQ0FB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LE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLEdBQ3RCLENBQ0g7UUFDRCxhQUFhLENBQUMsSUFBSTtZQUNoQixhQUFhLENBQUMsYUFBYTtZQUMzQixhQUFhLENBQUMsWUFBWTtZQUMxQixhQUFhLENBQUMsT0FBTyxJQUFJLENBQ3ZCLHVCQUFDLGVBQWUsSUFDZCxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFDeEMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQzVDLGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYSxFQUMxQyxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFDeEMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEdBQzlCLENBQ0g7UUFDSCxzQkFBc0IsQ0FBQyxJQUFJLElBQUksc0JBQXNCLENBQUMsT0FBTyxJQUFJLENBQy9ELHVCQUFDLHNCQUFzQixJQUNyQixPQUFPLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxFQUN2QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLEVBQUUsR0FDNUQsQ0FDSDtLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgLS0gUmVhY3RFY3MgaXMgcmVxdWlyZWQgZm9yIEpTWCBmYWN0b3J5XG5pbXBvcnQgUmVhY3RFY3MsIHtcbiAgTGFiZWwsXG4gIEJ1dHRvbiBhcyBEQ0xCdXR0b24sXG4gIFVpRW50aXR5LFxuICB0eXBlIFJlYWN0QmFzZWRVaVN5c3RlbSxcbn0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHksIHR5cGUgSUVuZ2luZSwgdHlwZSBQb2ludGVyRXZlbnRzU3lzdGVtIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHtcbiAgZ2V0Q29tcG9uZW50cyxcbiAgdHlwZSBHZXRQbGF5ZXJEYXRhUmVzLFxuICB0eXBlIElQbGF5ZXJzSGVscGVyLFxuICB0eXBlIElTREtIZWxwZXJzLFxufSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBWaWRlb0NvbnRyb2wgfSBmcm9tICcuL1ZpZGVvQ29udHJvbCc7XG5pbXBvcnQgeyBUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzQ29udHJvbCc7XG5pbXBvcnQgeyBTbWFydEl0ZW1zQ29udHJvbCB9IGZyb20gJy4vU21hcnRJdGVtc0NvbnRyb2wnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24nO1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHMgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzJztcbmltcG9ydCB7IGdldENvbnRlbnRVcmwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB0eXBlIFN0YXRlLCBUYWJUeXBlLCB0eXBlIFNlbGVjdGVkU21hcnRJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBnZXRCdG5Nb2RlcmF0aW9uQ29udHJvbCxcbiAgTW9kZXJhdGlvbkNvbnRyb2wsXG4gIG1vZGVyYXRpb25Db250cm9sU3RhdGUsXG4gIHR5cGUgU2NlbmVBZG1pbixcbn0gZnJvbSAnLi9Nb2RlcmF0aW9uQ29udHJvbCc7XG5pbXBvcnQgeyBnZXRTY2VuZUFkbWlucywgZ2V0U2NlbmVCYW5zLCB0eXBlIFNjZW5lQmFuVXNlciB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wvYXBpJztcbmltcG9ydCB7IE1vZGFsVXNlckxpc3QsIFVzZXJMaXN0VHlwZSB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wvVXNlcnNMaXN0JztcbmltcG9ydCB7IHNob3djYXNlU3RhdGUsIHNoYXJlUHJlc2VudGF0aW9uU3RhdGUgfSBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0JztcbmltcG9ydCB7IFNwZWFrZXJTaG93Y2FzZSB9IGZyb20gJy4vVmlkZW9Db250cm9sL0RjbENhc3QvU3BlYWtlclNob3djYXNlJztcbmltcG9ydCBTaGFyZVByZXNlbnRhdGlvbk1vZGFsIGZyb20gJy4vVmlkZW9Db250cm9sL0RjbENhc3QvU2hhcmVQcmVzZW50YXRpb25Nb2RhbCc7XG5pbXBvcnQgeyBpc1ByZXZpZXcgfSBmcm9tICcuL2ZldGNoLXV0aWxzJztcbmltcG9ydCB7IGluaXRBZG1pbk1lc3NhZ2VCdXMsIGdldEFkbWluTWVzc2FnZUJ1cyB9IGZyb20gJy4vYWRtaW4tbWVzc2FnZS1idXMnO1xuXG5leHBvcnQgY29uc3QgbmV4dFRpY2tGdW5jdGlvbnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5jb25zdCBBRE1JTl9UT09MS0lUX1ZJUlRVQUxfVUlfU0laRSA9IHsgdmlydHVhbFdpZHRoOiAxOTIwLCB2aXJ0dWFsSGVpZ2h0OiAxMDgwIH07XG5cbmV4cG9ydCBjb25zdCBzdGF0ZTogU3RhdGUgPSB7XG4gIGFkbWluVG9vbGtpdFVpRW50aXR5OiAwIGFzIEVudGl0eSxcbiAgcGFuZWxPcGVuOiBmYWxzZSxcbiAgYWN0aXZlVGFiOiBUYWJUeXBlLk5PTkUsXG4gIHZpZGVvQ29udHJvbDoge1xuICAgIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZFN0cmVhbTogdW5kZWZpbmVkLFxuICAgIGRjbENhc3Q6IHVuZGVmaW5lZCxcbiAgICBpc01pbmltaXplZDogZmFsc2UsXG4gICAgcHJlc2VudGF0aW9uU3RhdGU6IHVuZGVmaW5lZCxcbiAgfSxcbiAgc21hcnRJdGVtc0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFNtYXJ0SXRlbTogdW5kZWZpbmVkLFxuICAgIHNtYXJ0SXRlbXM6IG5ldyBNYXA8RW50aXR5LCBTZWxlY3RlZFNtYXJ0SXRlbT4oKSxcbiAgfSxcbiAgdGV4dEFubm91bmNlbWVudENvbnRyb2w6IHtcbiAgICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgICB0ZXh0OiB1bmRlZmluZWQsXG4gICAgbWVzc2FnZVJhdGVUcmFja2VyOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgIGFubm91bmNlbWVudHM6IFtdLFxuICAgIG1heEFubm91bmNlbWVudHM6IDQsXG4gIH0sXG4gIHJld2FyZHNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRSZXdhcmRJdGVtOiB1bmRlZmluZWQsXG4gIH0sXG59O1xuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW107XG5sZXQgc2NlbmVCYW5zQ2FjaGU6IFNjZW5lQmFuVXNlcltdID0gW107XG5cbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtcmV3YXJkcy1jb250cm9sLWJ1dHRvbi5wbmdgXG4vLyBjb25zdCBCVE5fUkVXQVJEU19DT05UUk9MX0FDVElWRSA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYWN0aXZlLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEFETUlOX0lDT05TID0ge1xuICBnZXQgQlROX1ZJREVPX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtc21hcnQtaXRlbS1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQoKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvYmFja2dyb3VuZHMvYWRtaW4tdG9vbC1iYWNrZ3JvdW5kLnBuZ2A7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KTtcblxuLy8gVGhlIGVkaXRvciBzdGFydHMgdXNpbmcgZW50aXRpZXMgZnJvbSBbODAwMV0uXG5jb25zdCBBRE1JTl9UT09MU19FTlRJVFkgPSA4MDAwIGFzIEVudGl0eTtcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF07XG59XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgZXJyb3IgfSkpO1xuICAgIHNjZW5lQWRtaW5zQ2FjaGUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgc2NlbmVBZG1pbnNDYWNoZSA9IChyZXNwb25zZSA/PyBbXSlcbiAgICAubWFwKCQgPT4gKHtcbiAgICAgIG5hbWU6ICQubmFtZSxcbiAgICAgIGFkZHJlc3M6ICQuYWRtaW4sXG4gICAgICByb2xlOiAnYWRtaW4nIGFzIGNvbnN0LFxuICAgICAgdmVyaWZpZWQ6ICEkLm5hbWUuaW5jbHVkZXMoJyMnKSxcbiAgICAgIGNhbkJlUmVtb3ZlZDogISEkLmNhbkJlUmVtb3ZlZCxcbiAgICB9KSlcbiAgICAuc29ydChhID0+IChhLmNhbkJlUmVtb3ZlZCA/IDEgOiAtMSkpO1xuICBpZiAoYWRtaW5EYXRhSW5pdGlhbGl6ZWQpIHtcbiAgICBnZXRBZG1pbk1lc3NhZ2VCdXMoKS51cGRhdGVBZG1pbkxpc3Qoc2NlbmVBZG1pbnNDYWNoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kU3luY1NjZW5lQWRtaW5zKCkge1xuICBhd2FpdCBmZXRjaFNjZW5lQWRtaW5zKCk7XG4gIGlmIChhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGdldEFkbWluTWVzc2FnZUJ1cygpLmVtaXRTeW5jQWRtaW5zKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoU2NlbmVCYW5zKCkge1xuICBjb25zdCBbZXJyb3IsIHJlc3BvbnNlXSA9IGF3YWl0IGdldFNjZW5lQmFucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIHNjZW5lQmFuc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NlbmVCYW5zQ2FjaGUgPSByZXNwb25zZT8ucmVzdWx0cyA/PyBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2NlbmVCYW5zQ2FjaGUoKSB7XG4gIHNjZW5lQmFuc0NhY2hlID0gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcyA/PyBbXSk7XG59XG5cbmZ1bmN0aW9uIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIFRleHRBbm5vdW5jZW1lbnRzLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHRleHQ6ICcnLFxuICAgIGF1dGhvcjogJycsXG4gICAgaWQ6ICcnLFxuICB9KTtcbn1cblxuLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBVSSByZW5kZXJpbmdcbmxldCBhZG1pbkRhdGFJbml0aWFsaXplZCA9IGZhbHNlO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBZG1pbkRhdGEoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgaWYgKCFhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSA9IGdldEFkbWluVG9vbGtpdEVudGl0eShlbmdpbmUpID8/IGVuZ2luZS5hZGRFbnRpdHkoKTtcblxuICAgIC8vIEluaXRpYWxpemUgVGV4dEFubm91bmNlbWVudHMgc3luYyBjb21wb25lbnRcbiAgICBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lKTtcblxuICAgIC8vIC8vIEluaXRpYWxpemUgUmV3YXJkcyBzeW5jXG4gICAgLy8gaW5pdFJld2FyZHNTeW5jKGVuZ2luZSwgc2RrSGVscGVycylcblxuICAgIGlmICghVmlkZW9Db250cm9sU3RhdGUuZ2V0T3JOdWxsKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KSkge1xuICAgICAgVmlkZW9Db250cm9sU3RhdGUuY3JlYXRlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICB9XG5cbiAgICBzZGtIZWxwZXJzPy5zeW5jRW50aXR5Py4oXG4gICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgIFtWaWRlb0NvbnRyb2xTdGF0ZS5jb21wb25lbnRJZF0sXG4gICAgICBBRE1JTl9UT09MU19FTlRJVFksXG4gICAgKTtcblxuICAgIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgICAgaWYgKG5leHRUaWNrRnVuY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dFRpY2sgPSBuZXh0VGlja0Z1bmN0aW9ucy5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dFRpY2spIHtcbiAgICAgICAgICBuZXh0VGljaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcblxuICAgIC8vIEluaXRpYWxpemUgc2NlbmUgZGF0YVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtmZXRjaFNjZW5lQWRtaW5zKCksIGZldGNoU2NlbmVCYW5zKCldKTtcblxuICAgIC8vIEluaXRpYWxpemUgYWRtaW4gbWVzc2FnZSBidXMgd2l0aCBzZW5kZXIgdmFsaWRhdGlvblxuICAgIGluaXRBZG1pbk1lc3NhZ2VCdXMoXG4gICAgICBlbmdpbmUsXG4gICAgICBzY2VuZUFkbWluc0NhY2hlLFxuICAgICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHksXG4gICAgICBwbGF5ZXJzSGVscGVyLFxuICAgICAgZmV0Y2hTY2VuZUFkbWlucyxcbiAgICApO1xuXG4gICAgYWRtaW5EYXRhSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEgLSBpbml0aWFsaXplZCcpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZG1pblRvb2xraXRVSShcbiAgZW5naW5lOiBJRW5naW5lLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtOiBQb2ludGVyRXZlbnRzU3lzdGVtLFxuICByZWFjdEJhc2VkVWlTeXN0ZW06IFJlYWN0QmFzZWRVaVN5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBVSVxuICBpbml0aWFsaXplQWRtaW5EYXRhKGVuZ2luZSwgc2RrSGVscGVycywgcGxheWVyc0hlbHBlcikudGhlbigoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2NyZWF0ZUFkbWluVG9vbGtpdFVJIC0gaW5pdGlhbGl6ZWQnKTtcbiAgICByZWFjdEJhc2VkVWlTeXN0ZW0uc2V0VWlSZW5kZXJlcihcbiAgICAgICgpID0+IHVpQ29tcG9uZW50KGVuZ2luZSwgcG9pbnRlckV2ZW50c1N5c3RlbSwgc2RrSGVscGVycywgcGxheWVyc0hlbHBlciksXG4gICAgICBBRE1JTl9UT09MS0lUX1ZJUlRVQUxfVUlfU0laRSxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkQWRtaW4oXG4gIF9lbmdpbmU6IElFbmdpbmUsXG4gIGFkbWluVG9vbGtpdEVudGl0aWU6IFJldHVyblR5cGU8dHlwZW9mIGdldEFkbWluVG9vbGtpdENvbXBvbmVudD4sXG4gIHBsYXllcjogR2V0UGxheWVyRGF0YVJlcyB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFwbGF5ZXIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBwbGF5ZXJBZGRyZXNzID0gcGxheWVyLnVzZXJJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpc0FkbWluID0gc2NlbmVBZG1pbnNDYWNoZS5maW5kKCQgPT4gJC5hZGRyZXNzID09PSBwbGF5ZXJBZGRyZXNzKTtcblxuICByZXR1cm4gaXNBZG1pbiB8fCBpc1ByZXZpZXcoKTtcbn1cblxuY29uc3QgdWlDb21wb25lbnQgPSAoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pID0+IHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0RW50aXR5ID0gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZSk7XG4gIGNvbnN0IHBsYXllciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpO1xuICBjb25zdCBpc1BsYXllckFkbWluID0gaXNBbGxvd2VkQWRtaW4oZW5naW5lLCBhZG1pblRvb2xraXRFbnRpdHksIHBsYXllcik7XG5cbiAgcmV0dXJuIFtcbiAgICA8VWlFbnRpdHlcbiAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtpc1BsYXllckFkbWluID8gKFxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6IDEyMCwgcmlnaHQ6IDE0IH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogc3RhdGUucGFuZWxPcGVuID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4IH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDEyLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17eyBjb2xvcjogY29udGFpbmVyQmFja2dyb3VuZENvbG9yIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIHZhbHVlPVwiQURNSU4gVE9PTFNcIlxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsyMH1cbiAgICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmNyZWF0ZSgxNjAsIDE1NSwgMTY4LCAxKX1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X21vZGVyYXRpb25fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtnZXRCdG5Nb2RlcmF0aW9uQ29udHJvbCgpfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICAgICAgICAgIGFkbWluVG9vbGtpdEVudGl0eS5tb2RlcmF0aW9uQ29udHJvbC5pc0VuYWJsZWQgJiYgIWlzUHJldmlldygpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7IGhlaWdodDogJzEwMCUnLCB3aWR0aDogJzEwMCUnIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0w7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdmlkZW9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlZJREVPX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1ZJREVPX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/IENvbG9yNC5CbGFjaygpIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudmlkZW9Db250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuVklERU9fQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF9zbWFydF9pdGVtc19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fU01BUlRfSVRFTV9DT05UUk9MfVxuICAgICAgICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgICAgICBjb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yNC5CbGFjaygpXG4gICAgICAgICAgICAgICAgICAgICAgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0eS5zbWFydEl0ZW1zQ29udHJvbC5pc0VuYWJsZWQgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4IH0sXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25UcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0w7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5LnRleHRBbm5vdW5jZW1lbnRDb250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgIDxUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2xcbiAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgICAgcGxheWVyPXtwbGF5ZXJ9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgPFZpZGVvQ29udHJvbFxuICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICBwbGF5ZXJBZGRyZXNzPXtwbGF5ZXI/LnVzZXJJZH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8U21hcnRJdGVtc0NvbnRyb2xcbiAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MICYmIChcbiAgICAgICAgICAgICAgPE1vZGVyYXRpb25Db250cm9sXG4gICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgcGxheWVyPXtwbGF5ZXJ9XG4gICAgICAgICAgICAgICAgc2NlbmVBZG1pbnM9e3NjZW5lQWRtaW5zQ2FjaGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgIHdpZHRoOiA0MixcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcG9pbnRlckZpbHRlcjogJ2Jsb2NrJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICAgIHNyYzogQURNSU5fSUNPTlMuQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEQ0xCdXR0b25cbiAgICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IEFETUlOX0lDT05TLkJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhbmVsT3BlbiA9ICFzdGF0ZS5wYW5lbE9wZW47XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxUZXh0QW5ub3VuY2VtZW50c1xuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgLz5cbiAgICA8L1VpRW50aXR5PixcbiAgICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLnNob3dNb2RhbEFkbWluTGlzdCAmJiAoXG4gICAgICA8TW9kYWxVc2VyTGlzdFxuICAgICAgICB1c2Vycz17c2NlbmVBZG1pbnNDYWNoZSA/PyBbXX1cbiAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgIHR5cGU9e1VzZXJMaXN0VHlwZS5BRE1JTn1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLnNob3dNb2RhbEJhbkxpc3QgJiYgKFxuICAgICAgPE1vZGFsVXNlckxpc3RcbiAgICAgICAgdXNlcnM9e3NjZW5lQmFuc0NhY2hlID8/IFtdfVxuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgdHlwZT17VXNlckxpc3RUeXBlLkJBTn1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBzaG93Y2FzZVN0YXRlLnNob3cgJiZcbiAgICAgIHNob3djYXNlU3RhdGUub25TZWxlY3RUcmFjayAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHQgJiZcbiAgICAgIHNob3djYXNlU3RhdGUub25DbG9zZSAmJiAoXG4gICAgICAgIDxTcGVha2VyU2hvd2Nhc2VcbiAgICAgICAgICBwYXJ0aWNpcGFudHM9e3Nob3djYXNlU3RhdGUucGFydGljaXBhbnRzfVxuICAgICAgICAgIGFjdGl2ZVRyYWNrU2lkPXtzaG93Y2FzZVN0YXRlLmFjdGl2ZVRyYWNrU2lkfVxuICAgICAgICAgIG9uU2VsZWN0VHJhY2s9e3Nob3djYXNlU3RhdGUub25TZWxlY3RUcmFja31cbiAgICAgICAgICBvblNldERlZmF1bHQ9e3Nob3djYXNlU3RhdGUub25TZXREZWZhdWx0fVxuICAgICAgICAgIG9uQ2xvc2U9e3Nob3djYXNlU3RhdGUub25DbG9zZX1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5zaG93ICYmIHNoYXJlUHJlc2VudGF0aW9uU3RhdGUub25DbG9zZSAmJiAoXG4gICAgICA8U2hhcmVQcmVzZW50YXRpb25Nb2RhbFxuICAgICAgICBvbkNsb3NlPXtzaGFyZVByZXNlbnRhdGlvblN0YXRlLm9uQ2xvc2V9XG4gICAgICAgIHN0cmVhbWluZ0tleT17c3RhdGUudmlkZW9Db250cm9sLmRjbENhc3Q/LnN0cmVhbWluZ0tleSA/PyAnJ31cbiAgICAgIC8+XG4gICAgKSxcbiAgXTtcbn07XG4iXX0=