@dcl/asset-packs 2.16.1 → 2.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +445 -325
- package/catalog.json +92 -0
- package/dist/admin-toolkit-ui/Active.d.ts +3 -2
- package/dist/admin-toolkit-ui/Active.js +1 -1
- package/dist/admin-toolkit-ui/Card.d.ts +2 -1
- package/dist/admin-toolkit-ui/Card.js +1 -1
- package/dist/admin-toolkit-ui/FeedbackButton.js +2 -2
- package/dist/admin-toolkit-ui/Loading.d.ts +3 -2
- package/dist/admin-toolkit-ui/Loading.js +1 -1
- package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.d.ts +1 -1
- package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.js +1 -1
- package/dist/admin-toolkit-ui/ModerationControl/BanUserDescription.js +1 -1
- package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.js +4 -4
- package/dist/admin-toolkit-ui/ModerationControl/UsersList.js +16 -14
- package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +0 -7
- package/dist/admin-toolkit-ui/ModerationControl/index.js +4 -9
- package/dist/admin-toolkit-ui/SmartItemsControl.js +15 -33
- package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +14 -12
- package/dist/admin-toolkit-ui/VideoControl/DclCast/CompactDclCast.js +7 -9
- package/dist/admin-toolkit-ui/VideoControl/DclCast/DclCastInfo.js +4 -3
- package/dist/admin-toolkit-ui/VideoControl/DclCast/index.d.ts +0 -14
- package/dist/admin-toolkit-ui/VideoControl/DclCast/index.js +32 -136
- package/dist/admin-toolkit-ui/VideoControl/DclCast/presentation-detector.d.ts +2 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/presentation-detector.js +116 -0
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.d.ts +1 -1
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.js +2 -2
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.d.ts +1 -1
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.js +2 -2
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +5 -4
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +2 -2
- package/dist/admin-toolkit-ui/VideoControl/api.d.ts +5 -2
- package/dist/admin-toolkit-ui/VideoControl/api.js +22 -12
- package/dist/admin-toolkit-ui/VideoControl/index.js +14 -15
- package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +2 -0
- package/dist/admin-toolkit-ui/VideoControl/utils.js +15 -3
- package/dist/admin-toolkit-ui/actions.d.ts +42 -0
- package/dist/admin-toolkit-ui/actions.js +138 -0
- package/dist/admin-toolkit-ui/admin-message-bus.js +17 -2
- package/dist/admin-toolkit-ui/index.d.ts +0 -3
- package/dist/admin-toolkit-ui/index.js +20 -93
- package/dist/admin-toolkit-ui/store.d.ts +2 -0
- package/dist/admin-toolkit-ui/store.js +45 -0
- package/dist/admin-toolkit-ui/types.d.ts +22 -5
- package/dist/admin-toolkit-ui/types.js +1 -2
- package/dist/bin/index.js +445 -325
- package/package.json +1 -1
- package/dist/admin-toolkit-ui/RewardsControl.d.ts +0 -7
- package/dist/admin-toolkit-ui/RewardsControl.js +0 -95
|
@@ -4,6 +4,7 @@ import { getExplorerComponents } from '../components';
|
|
|
4
4
|
import { getComponents } from '../definitions';
|
|
5
5
|
import { isPreview } from './fetch-utils';
|
|
6
6
|
import { getVideoPlayers } from './VideoControl/utils';
|
|
7
|
+
import { clearInterval, setInterval } from './utils';
|
|
7
8
|
const MSG = {
|
|
8
9
|
SET_VIDEO: 'admin:set-video',
|
|
9
10
|
SET_ANNOUNCEMENT: 'admin:set-announcement',
|
|
@@ -25,6 +26,7 @@ export function initAdminMessageBus(engine, admins, adminToolkitUiEntity, player
|
|
|
25
26
|
const authoritativeVideo = new Map();
|
|
26
27
|
let authoritativeAnnouncement = null;
|
|
27
28
|
let adminHasActed = false;
|
|
29
|
+
let receivedRemoteState = false;
|
|
28
30
|
function isAdminWallet(sender) {
|
|
29
31
|
if (isPreview())
|
|
30
32
|
return true;
|
|
@@ -141,7 +143,9 @@ export function initAdminMessageBus(engine, admins, adminToolkitUiEntity, player
|
|
|
141
143
|
return;
|
|
142
144
|
emitMessage(MSG.SYNC_STATE, { video, announcement });
|
|
143
145
|
}
|
|
144
|
-
onAdminMessage(MSG.SYNC_STATE, (payload,
|
|
146
|
+
onAdminMessage(MSG.SYNC_STATE, (payload, sender) => {
|
|
147
|
+
if (sender !== 'self' && payload.video.length > 0)
|
|
148
|
+
receivedRemoteState = true;
|
|
145
149
|
for (const vs of payload.video) {
|
|
146
150
|
const entity = vs.entity;
|
|
147
151
|
authoritativeVideo.set(entity, {
|
|
@@ -183,7 +187,18 @@ export function initAdminMessageBus(engine, admins, adminToolkitUiEntity, player
|
|
|
183
187
|
onAdminMessage(MSG.SYNC_ADMINS, (_payload, _sender) => {
|
|
184
188
|
onRefetchAdmins?.();
|
|
185
189
|
});
|
|
190
|
+
const REQUEST_RETRY_INTERVAL_MS = 1000;
|
|
191
|
+
const MAX_REQUEST_ATTEMPTS = 10;
|
|
192
|
+
let requestAttempts = 1;
|
|
186
193
|
emitMessage(MSG.REQUEST_STATE, {});
|
|
194
|
+
const requestStateRetry = setInterval(engine, () => {
|
|
195
|
+
if (receivedRemoteState || requestAttempts >= MAX_REQUEST_ATTEMPTS) {
|
|
196
|
+
clearInterval(engine, requestStateRetry);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
requestAttempts += 1;
|
|
200
|
+
emitMessage(MSG.REQUEST_STATE, {});
|
|
201
|
+
}, REQUEST_RETRY_INTERVAL_MS);
|
|
187
202
|
engine.addSystem(() => {
|
|
188
203
|
for (const [entity, authState] of authoritativeVideo) {
|
|
189
204
|
const vp = VideoPlayer.getOrNull(entity);
|
|
@@ -228,4 +243,4 @@ export function initAdminMessageBus(engine, admins, adminToolkitUiEntity, player
|
|
|
228
243
|
};
|
|
229
244
|
return instance;
|
|
230
245
|
}
|
|
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==
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbWVzc2FnZS1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9hZG1pbi1tZXNzYWdlLWJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLElBQUksU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQXFCckQsTUFBTSxHQUFHLEdBQUc7SUFDVixTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLGdCQUFnQixFQUFFLHdCQUF3QjtJQUMxQyxrQkFBa0IsRUFBRSwwQkFBMEI7SUFDOUMsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxtQkFBbUI7Q0FDeEIsQ0FBQztBQVlYLElBQUksUUFBUSxHQUFtQyxJQUFJLENBQUM7QUFFcEQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxJQUFJLENBQUMsUUFBUTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBSUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFlLEVBQ2YsTUFBb0IsRUFDcEIsb0JBQTRCLEVBQzVCLGFBQThCLEVBQzlCLGVBQTRCO0lBRTVCLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUV6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QUFHLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELGNBQWM7WUFDWixXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsZUFBZSxDQUFDLE1BQW9CO1lBQ2xDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDdkIsQ0FBQztLQUNGLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZG1pbiBNZXNzYWdlIEJ1c1xuICpcbiAqIFNlY3VyZXMgYWRtaW4tY29udHJvbGxlZCBjb21wb25lbnRzIChWaWRlb1BsYXllciwgVGV4dEFubm91bmNlbWVudHMpIGFnYWluc3RcbiAqIHVuYXV0aG9yaXplZCBDUkRUIG92ZXJ3cml0ZXMgYnkgbW92aW5nIGFkbWluIHN0YXRlIGNoYW5nZXMgdG8gYSBzZXBhcmF0ZVxuICogY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuICpcbiAqIEFyY2hpdGVjdHVyZTpcbiAqXG4gKiAgIDEuIENSRFQgc3luYyBmb3IgVmlkZW9QbGF5ZXIgaXMgRElTQUJMRUQgb24gYWRtaW4tY29udHJvbGxlZCBlbnRpdGllcyBieVxuICogICAgICByZW1vdmluZyBpdCBmcm9tIFN5bmNDb21wb25lbnRzLiBUaGlzIHByZXZlbnRzIGF0dGFja2VyIENSRFQgd3JpdGVzXG4gKiAgICAgIGZyb20gcHJvcGFnYXRpbmcgdGhyb3VnaCB0aGUgbm9ybWFsIHN5bmMgdHJhbnNwb3J0LlxuICpcbiAqICAgMi4gQWRtaW4gY29tbWFuZHMgZmxvdyB2aWEgdGhlIFRFWFQgY29tbXMgY2hhbm5lbCAoTWVzc2FnZUJ1cyksIHdoaWNoIGlzIGFcbiAqICAgICAgc2VwYXJhdGUgdHJhbnNwb3J0IGZyb20gdGhlIGJpbmFyeSBDUkRUIGNoYW5uZWwuIEFsbCBwYXJ0aWNpcGFudHNcbiAqICAgICAgcmVjZWl2ZSBhZG1pbiBjb21tYW5kcyB0aHJvdWdoIHRoaXMgY2hhbm5lbCBhbmQgdmFsaWRhdGUgdGhlIHNlbmRlcidzXG4gKiAgICAgIHdhbGxldCBhZGRyZXNzIGFnYWluc3QgdGhlIHNjZW5lIGFkbWluIGxpc3QgYmVmb3JlIGFwcGx5aW5nLlxuICpcbiAqICAgMy4gT24gbG9hZCwgZWFjaCBjbGllbnQgc2VlZHMgYXV0aG9yaXRhdGl2ZSBzdGF0ZSBmcm9tXG4gKiAgICAgIFZpZGVvU2NyZWVuLmRlZmF1bHRVUkwgKGRlcGxveS10aW1lIHZhbHVlLCBub3Qgd3JpdGFibGUgdmlhIENSRFQpLlxuICogICAgICBBIHBlci1mcmFtZSByZXZlcnQgc3lzdGVtIGVuZm9yY2VzIHRoaXMgc3RhdGUgYWdhaW5zdCBhbnkgcmF3IENSRFRcbiAqICAgICAgd3JpdGVzIGluamVjdGVkIGRpcmVjdGx5IHZpYSBMaXZlS2l0LlxuICpcbiAqICAgNC4gTGF0ZSBqb2luZXJzIHJlcXVlc3Qgc3RhdGUgZnJvbSBleGlzdGluZyBwYXJ0aWNpcGFudHMgdmlhIGFcbiAqICAgICAgcmVxdWVzdC9yZXNwb25zZSBoYW5kc2hha2Ugb3ZlciB0aGUgTWVzc2FnZUJ1cy5cbiAqXG4gKiBTZW5kaW5nIHVzZXMgY29tbXVuaWNhdGlvbnNDb250cm9sbGVyLnNlbmQoKSBkaXJlY3RseSByYXRoZXIgdGhhbiB0aGVcbiAqIE1lc3NhZ2VCdXMgY2xhc3MncyBlbWl0KCksIGJlY2F1c2UgdGhlIGNsYXNzJ3MgaW50ZXJuYWwgZmx1c2ggcXVldWUgZHJvcHNcbiAqIHN1YnNlcXVlbnQgbWVzc2FnZXMuIFJlY2VpdmluZyB1c2VzIE1lc3NhZ2VCdXMub24oKSwgd2hpY2ggcmVnaXN0ZXJzIG9uIHRoZVxuICogZ2xvYmFsIG9uQ29tbXNNZXNzYWdlIG9ic2VydmFibGUgYW5kIHdvcmtzIHJlbGlhYmx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgRW50aXR5LCBJRW5naW5lLCBQQlZpZGVvUGxheWVyIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHsgTWVzc2FnZUJ1cyB9IGZyb20gJ0BkY2wvc2RrL21lc3NhZ2UtYnVzJztcbmltcG9ydCB7IHNlbmQgYXMgY29tbXNTZW5kIH0gZnJvbSAnfnN5c3RlbS9Db21tdW5pY2F0aW9uc0NvbnRyb2xsZXInO1xuaW1wb3J0IHsgZ2V0RXhwbG9yZXJDb21wb25lbnRzIH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBnZXRDb21wb25lbnRzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBJUGxheWVyc0hlbHBlciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzUHJldmlldyB9IGZyb20gJy4vZmV0Y2gtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBTY2VuZUFkbWluIH0gZnJvbSAnLi9Nb2RlcmF0aW9uQ29udHJvbCc7XG5pbXBvcnQgeyBnZXRWaWRlb1BsYXllcnMgfSBmcm9tICcuL1ZpZGVvQ29udHJvbC91dGlscyc7XG5pbXBvcnQgeyBjbGVhckludGVydmFsLCBzZXRJbnRlcnZhbCB9IGZyb20gJy4vdXRpbHMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbnR5cGUgVmlkZW9TdGF0ZSA9IFBpY2s8UEJWaWRlb1BsYXllciwgJ3NyYycgfCAncGxheWluZycgfCAndm9sdW1lJyB8ICdsb29wJz47XG5cbnR5cGUgQW5ub3VuY2VtZW50U3RhdGUgPSB7XG4gIHRleHQ6IHN0cmluZztcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgU3luY1N0YXRlUGF5bG9hZCB7XG4gIHZpZGVvOiBBcnJheTx7IGVudGl0eTogbnVtYmVyIH0gJiBWaWRlb1N0YXRlPjtcbiAgYW5ub3VuY2VtZW50OiBBbm5vdW5jZW1lbnRTdGF0ZSB8IG51bGw7XG59XG5cbnR5cGUgTWVzc2FnZUhhbmRsZXIgPSAocGF5bG9hZDogYW55LCBzZW5kZXI6IHN0cmluZykgPT4gdm9pZDtcblxuLy8g4pSA4pSAIE1lc3NhZ2UgaWRlbnRpZmllcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IE1TRyA9IHtcbiAgU0VUX1ZJREVPOiAnYWRtaW46c2V0LXZpZGVvJyxcbiAgU0VUX0FOTk9VTkNFTUVOVDogJ2FkbWluOnNldC1hbm5vdW5jZW1lbnQnLFxuICBDTEVBUl9BTk5PVU5DRU1FTlQ6ICdhZG1pbjpjbGVhci1hbm5vdW5jZW1lbnQnLFxuICBSRVFVRVNUX1NUQVRFOiAnYWRtaW46cmVxdWVzdC1zdGF0ZScsXG4gIFNZTkNfU1RBVEU6ICdhZG1pbjpzeW5jLXN0YXRlJyxcbiAgU1lOQ19BRE1JTlM6ICdhZG1pbjpzeW5jLWFkbWlucycsXG59IGFzIGNvbnN0O1xuXG4vLyDilIDilIAgUHVibGljIGludGVyZmFjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBBZG1pbk1lc3NhZ2VCdXNJbnN0YW5jZSB7XG4gIGVtaXRTZXRWaWRlbyhlbnRpdHk6IEVudGl0eSwgcHJvcHM6IFBhcnRpYWw8UEJWaWRlb1BsYXllcj4pOiB2b2lkO1xuICBlbWl0U2V0QW5ub3VuY2VtZW50KHRleHQ6IHN0cmluZywgYXV0aG9yPzogc3RyaW5nLCBpZD86IHN0cmluZyk6IHZvaWQ7XG4gIGVtaXRDbGVhckFubm91bmNlbWVudCgpOiB2b2lkO1xuICBlbWl0U3luY0FkbWlucygpOiB2b2lkO1xuICB1cGRhdGVBZG1pbkxpc3QoYWRtaW5zOiBTY2VuZUFkbWluW10pOiB2b2lkO1xufVxuXG5sZXQgaW5zdGFuY2U6IEFkbWluTWVzc2FnZUJ1c0luc3RhbmNlIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZG1pbk1lc3NhZ2VCdXMoKTogQWRtaW5NZXNzYWdlQnVzSW5zdGFuY2Uge1xuICBpZiAoIWluc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ0FkbWluTWVzc2FnZUJ1cyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyDilIDilIAgSW5pdGlhbGl6YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0QWRtaW5NZXNzYWdlQnVzKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIGFkbWluczogU2NlbmVBZG1pbltdLFxuICBhZG1pblRvb2xraXRVaUVudGl0eTogRW50aXR5LFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4gIG9uUmVmZXRjaEFkbWlucz86ICgpID0+IHZvaWQsXG4pOiBBZG1pbk1lc3NhZ2VCdXNJbnN0YW5jZSB7XG4gIGxldCBzY2VuZUFkbWlucyA9IGFkbWlucztcblxuICBjb25zdCB7IFZpZGVvUGxheWVyLCBTeW5jQ29tcG9uZW50cyB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSk7XG4gIGNvbnN0IHsgVGV4dEFubm91bmNlbWVudHMsIFZpZGVvU2NyZWVuIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG5cbiAgY29uc3QgYXV0aG9yaXRhdGl2ZVZpZGVvID0gbmV3IE1hcDxFbnRpdHksIFZpZGVvU3RhdGU+KCk7XG4gIGxldCBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50OiBBbm5vdW5jZW1lbnRTdGF0ZSB8IG51bGwgPSBudWxsO1xuICBsZXQgYWRtaW5IYXNBY3RlZCA9IGZhbHNlO1xuICAvLyBUcnVlIG9uY2Ugd2UndmUgYXBwbGllZCBhdXRob3JpdGF0aXZlIHN0YXRlIGZyb20gYSAqcmVtb3RlKiBhZG1pbi4gR2F0ZXMgdGhlXG4gIC8vIGxhdGUtam9pbmVyIFJFUVVFU1RfU1RBVEUgcmV0cnkgYmVsb3cgKHNlZSB0aGUgcmV0cnkgYmxvY2sgZm9yIHdoeSkuXG4gIGxldCByZWNlaXZlZFJlbW90ZVN0YXRlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gaXNBZG1pbldhbGxldChzZW5kZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChpc1ByZXZpZXcoKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHNlbmRlciA9PT0gJ3NlbGYnKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gc2NlbmVBZG1pbnMuc29tZShhZG1pbiA9PiBhZG1pbi5hZGRyZXNzLnRvTG93ZXJDYXNlKCkgPT09IHNlbmRlci50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBNZXNzYWdpbmcgbGF5ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vXG4gIC8vIExvY2FsIGRlbGl2ZXJ5OiBoYW5kbGVycyBhcmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgb24gZW1pdC5cbiAgLy8gUmVtb3RlIGRlbGl2ZXJ5OiBjb21tdW5pY2F0aW9uc0NvbnRyb2xsZXIuc2VuZCgpIChieXBhc3NlcyBNZXNzYWdlQnVzIGZsdXNoIHF1ZXVlKS5cbiAgLy8gUmVtb3RlIHJlY2VwdGlvbjogTWVzc2FnZUJ1cy5vbigpIChsaXN0ZW5zIG9uIHRoZSBnbG9iYWwgb25Db21tc01lc3NhZ2Ugb2JzZXJ2YWJsZSkuXG5cbiAgY29uc3QgaGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgTWVzc2FnZUhhbmRsZXI+KCk7XG4gIGNvbnN0IHJlY2VpdmVyID0gbmV3IE1lc3NhZ2VCdXMoKTtcblxuICBmdW5jdGlvbiBvbk1lc3NhZ2UodHlwZTogc3RyaW5nLCBoYW5kbGVyOiBNZXNzYWdlSGFuZGxlcikge1xuICAgIGhhbmRsZXJzLnNldCh0eXBlLCBoYW5kbGVyKTtcbiAgICByZWNlaXZlci5vbih0eXBlLCBoYW5kbGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQWRtaW5NZXNzYWdlKHR5cGU6IHN0cmluZywgaGFuZGxlcjogTWVzc2FnZUhhbmRsZXIpIHtcbiAgICBvbk1lc3NhZ2UodHlwZSwgKHBheWxvYWQsIHNlbmRlcikgPT4ge1xuICAgICAgaWYgKCFpc0FkbWluV2FsbGV0KHNlbmRlcikpIHJldHVybjtcbiAgICAgIGhhbmRsZXIocGF5bG9hZCwgc2VuZGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRNZXNzYWdlKHR5cGU6IHN0cmluZywgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMuZ2V0KHR5cGUpO1xuICAgIGlmIChoYW5kbGVyKSBoYW5kbGVyKHBheWxvYWQsICdzZWxmJyk7XG5cbiAgICBjb25zdCByYXcgPSBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2U6IHR5cGUsIHBheWxvYWQgfSk7XG4gICAgY29tbXNTZW5kKHsgbWVzc2FnZTogcmF3IH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCAxLiBEaXNhYmxlIENSRFQgc3luYyBmb3IgVmlkZW9QbGF5ZXIgb24gYWRtaW4tY29udHJvbGxlZCBlbnRpdGllcyDilIDilIDilIDilIDilIDilIBcblxuICBmb3IgKGNvbnN0IHZwIG9mIGdldFZpZGVvUGxheWVycyhlbmdpbmUpKSB7XG4gICAgY29uc3QgZW50aXR5ID0gdnAuZW50aXR5IGFzIEVudGl0eTtcbiAgICBjb25zdCBzeW5jID0gU3luY0NvbXBvbmVudHMuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIGNvbnN0IHdpdGhvdXRWaWRlb1BsYXllciA9IHN5bmMuY29tcG9uZW50SWRzLmZpbHRlcihcbiAgICAgICAgKGlkOiBudW1iZXIpID0+IGlkICE9PSBWaWRlb1BsYXllci5jb21wb25lbnRJZCxcbiAgICAgICk7XG4gICAgICBTeW5jQ29tcG9uZW50cy5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IGNvbXBvbmVudElkczogd2l0aG91dFZpZGVvUGxheWVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCAyLiBTZWVkIGF1dGhvcml0YXRpdmUgc3RhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIFZpZGVvUGxheWVyOiBzZWVkZWQgZnJvbSBWaWRlb1NjcmVlbi5kZWZhdWx0VVJMIChkZXBsb3ktdGltZSwgdHJ1c3RlZCkuXG4gIC8vIFRleHRBbm5vdW5jZW1lbnRzOiBzZWVkZWQgYXMgZW1wdHkgKG5vIGRlZmF1bHQgYW5ub3VuY2VtZW50IGF0IGRlcGxveSB0aW1lKS5cblxuICBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50ID0geyB0ZXh0OiAnJywgYXV0aG9yOiAnJywgaWQ6ICcnIH07XG5cbiAgZm9yIChjb25zdCB2cCBvZiBnZXRWaWRlb1BsYXllcnMoZW5naW5lKSkge1xuICAgIGNvbnN0IGVudGl0eSA9IHZwLmVudGl0eSBhcyBFbnRpdHk7XG4gICAgY29uc3Qgc2NyZWVuID0gVmlkZW9TY3JlZW4uZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgdmlkZW8gPSBWaWRlb1BsYXllci5nZXRPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIXZpZGVvKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHNyYyA9IHNjcmVlbj8uZGVmYXVsdFVSTCB8fCB2aWRlby5zcmM7XG4gICAgYXV0aG9yaXRhdGl2ZVZpZGVvLnNldChlbnRpdHksIHtcbiAgICAgIHNyYyxcbiAgICAgIHBsYXlpbmc6IHZpZGVvLnBsYXlpbmcsXG4gICAgICB2b2x1bWU6IHZpZGVvLnZvbHVtZSxcbiAgICAgIGxvb3A6IHZpZGVvLmxvb3AsXG4gICAgfSk7XG5cbiAgICBpZiAodmlkZW8uc3JjICE9PSBzcmMpIHtcbiAgICAgIFZpZGVvUGxheWVyLmdldE11dGFibGUoZW50aXR5KS5zcmMgPSBzcmM7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIDMuIFJlZ2lzdGVyIGNvbW1hbmQgaGFuZGxlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25BZG1pbk1lc3NhZ2UoTVNHLlNFVF9WSURFTywgKHBheWxvYWQsIF9zZW5kZXIpID0+IHtcbiAgICBjb25zdCBlbnRpdHkgPSBwYXlsb2FkLmVudGl0eSBhcyBFbnRpdHk7XG4gICAgY29uc3QgY3VycmVudCA9IFZpZGVvUGxheWVyLmdldE9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdXBkYXRlZDogVmlkZW9TdGF0ZSA9IHtcbiAgICAgIHNyYzogcGF5bG9hZC5zcmMgPz8gY3VycmVudC5zcmMsXG4gICAgICBwbGF5aW5nOiBwYXlsb2FkLnBsYXlpbmcgPz8gY3VycmVudC5wbGF5aW5nLFxuICAgICAgdm9sdW1lOiBwYXlsb2FkLnZvbHVtZSA/PyBjdXJyZW50LnZvbHVtZSxcbiAgICAgIGxvb3A6IHBheWxvYWQubG9vcCA/PyBjdXJyZW50Lmxvb3AsXG4gICAgfTtcbiAgICBhdXRob3JpdGF0aXZlVmlkZW8uc2V0KGVudGl0eSwgdXBkYXRlZCk7XG5cbiAgICBjb25zdCB2aWRlbyA9IFZpZGVvUGxheWVyLmdldE11dGFibGUoZW50aXR5KTtcbiAgICB2aWRlby5zcmMgPSB1cGRhdGVkLnNyYztcbiAgICB2aWRlby5wbGF5aW5nID0gdXBkYXRlZC5wbGF5aW5nO1xuICAgIHZpZGVvLnZvbHVtZSA9IHVwZGF0ZWQudm9sdW1lO1xuICAgIHZpZGVvLmxvb3AgPSB1cGRhdGVkLmxvb3A7XG4gICAgaWYgKHBheWxvYWQucG9zaXRpb24gIT09IHVuZGVmaW5lZCkgdmlkZW8ucG9zaXRpb24gPSBwYXlsb2FkLnBvc2l0aW9uO1xuXG4gICAgYWRtaW5IYXNBY3RlZCA9IHRydWU7XG4gIH0pO1xuXG4gIG9uQWRtaW5NZXNzYWdlKE1TRy5TRVRfQU5OT1VOQ0VNRU5ULCAocGF5bG9hZCwgX3NlbmRlcikgPT4ge1xuICAgIGF1dGhvcml0YXRpdmVBbm5vdW5jZW1lbnQgPSB7XG4gICAgICB0ZXh0OiBwYXlsb2FkLnRleHQsXG4gICAgICBhdXRob3I6IHBheWxvYWQuYXV0aG9yLFxuICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgfTtcbiAgICBjb25zdCB0YSA9IFRleHRBbm5vdW5jZW1lbnRzLmdldE11dGFibGVPck51bGwoYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgIGlmICghdGEpIHJldHVybjtcbiAgICB0YS50ZXh0ID0gcGF5bG9hZC50ZXh0O1xuICAgIHRhLmF1dGhvciA9IHBheWxvYWQuYXV0aG9yO1xuICAgIHRhLmlkID0gcGF5bG9hZC5pZDtcbiAgICBhZG1pbkhhc0FjdGVkID0gdHJ1ZTtcbiAgfSk7XG5cbiAgb25BZG1pbk1lc3NhZ2UoTVNHLkNMRUFSX0FOTk9VTkNFTUVOVCwgKF9wYXlsb2FkLCBfc2VuZGVyKSA9PiB7XG4gICAgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudCA9IHsgdGV4dDogJycsIGF1dGhvcjogJycsIGlkOiAnJyB9O1xuICAgIGNvbnN0IHRhID0gVGV4dEFubm91bmNlbWVudHMuZ2V0TXV0YWJsZU9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgaWYgKCF0YSkgcmV0dXJuO1xuICAgIHRhLnRleHQgPSAnJztcbiAgICB0YS5hdXRob3IgPSAnJztcbiAgICB0YS5pZCA9ICcnO1xuICAgIGFkbWluSGFzQWN0ZWQgPSB0cnVlO1xuICB9KTtcblxuICAvLyDilIDilIAgNC4gU3RhdGUgc3luYyBmb3IgbGF0ZSBqb2luZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZ1bmN0aW9uIGJyb2FkY2FzdEN1cnJlbnRTdGF0ZSgpIHtcbiAgICBjb25zdCB2aWRlbzogU3luY1N0YXRlUGF5bG9hZFsndmlkZW8nXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdnAgb2YgZ2V0VmlkZW9QbGF5ZXJzKGVuZ2luZSkpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHZwLmVudGl0eSBhcyBFbnRpdHk7XG4gICAgICBjb25zdCBzY3JlZW4gPSBWaWRlb1NjcmVlbi5nZXRPck51bGwoZW50aXR5KTtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBWaWRlb1BsYXllci5nZXRPck51bGwoZW50aXR5KTtcbiAgICAgIGlmICghY3VycmVudCkgY29udGludWU7XG4gICAgICBpZiAoY3VycmVudC5zcmMgIT09IChzY3JlZW4/LmRlZmF1bHRVUkwgfHwgJycpKSB7XG4gICAgICAgIHZpZGVvLnB1c2goeyBlbnRpdHk6IGVudGl0eSBhcyBudW1iZXIsIC4uLmN1cnJlbnQgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdGEgPSBUZXh0QW5ub3VuY2VtZW50cy5nZXRPck51bGwoYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgIGNvbnN0IGFubm91bmNlbWVudCA9IHRhPy5pZCA/IHsgdGV4dDogdGEudGV4dCwgYXV0aG9yOiB0YS5hdXRob3IgPz8gJycsIGlkOiB0YS5pZCB9IDogbnVsbDtcblxuICAgIGlmICh2aWRlby5sZW5ndGggPT09IDAgJiYgIWFubm91bmNlbWVudCkgcmV0dXJuO1xuICAgIGVtaXRNZXNzYWdlKE1TRy5TWU5DX1NUQVRFLCB7IHZpZGVvLCBhbm5vdW5jZW1lbnQgfSk7XG4gIH1cblxuICBvbkFkbWluTWVzc2FnZShNU0cuU1lOQ19TVEFURSwgKHBheWxvYWQ6IFN5bmNTdGF0ZVBheWxvYWQsIHNlbmRlcikgPT4ge1xuICAgIC8vIE9ubHkgYSByZXBseSB0aGF0IGNhcnJpZXMgdmlkZW8gc3RhdGUgc3RvcHMgdGhlIGxhdGUtam9pbmVyIHJldHJ5IChiZWxvdykuXG4gICAgLy8gQW4gYW5ub3VuY2VtZW50LW9ubHkgU1lOQ19TVEFURSAodmlkZW86IFtdKSBpcyBhIHZhbGlkIHJlcGx5IGJ1dCBkb2Vzbid0XG4gICAgLy8gZGVsaXZlciB0aGUgdmlkZW8gc3JjIHRoZSByZXZlcnQgc3lzdGVtIHdvdWxkIG90aGVyd2lzZSBjbG9iYmVyLCBzbyBpdCBtdXN0XG4gICAgLy8gbm90IGNhbmNlbCB0aGUgcmV0cnkg4oCUIHNhbWUgcmVhc29uaW5nIGFzIG5vdCBrZXlpbmcgb24gYWRtaW5IYXNBY3RlZC5cbiAgICBpZiAoc2VuZGVyICE9PSAnc2VsZicgJiYgcGF5bG9hZC52aWRlby5sZW5ndGggPiAwKSByZWNlaXZlZFJlbW90ZVN0YXRlID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHZzIG9mIHBheWxvYWQudmlkZW8pIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHZzLmVudGl0eSBhcyBFbnRpdHk7XG4gICAgICBhdXRob3JpdGF0aXZlVmlkZW8uc2V0KGVudGl0eSwge1xuICAgICAgICBzcmM6IHZzLnNyYyxcbiAgICAgICAgcGxheWluZzogdnMucGxheWluZyxcbiAgICAgICAgdm9sdW1lOiB2cy52b2x1bWUsXG4gICAgICAgIGxvb3A6IHZzLmxvb3AsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHZpZGVvID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgICAgaWYgKCF2aWRlbykgY29udGludWU7XG4gICAgICB2aWRlby5zcmMgPSB2cy5zcmM7XG4gICAgICBpZiAodnMucGxheWluZyAhPT0gdW5kZWZpbmVkKSB2aWRlby5wbGF5aW5nID0gdnMucGxheWluZztcbiAgICAgIGlmICh2cy52b2x1bWUgIT09IHVuZGVmaW5lZCkgdmlkZW8udm9sdW1lID0gdnMudm9sdW1lO1xuICAgICAgaWYgKHZzLmxvb3AgIT09IHVuZGVmaW5lZCkgdmlkZW8ubG9vcCA9IHZzLmxvb3A7XG4gICAgfVxuXG4gICAgaWYgKHBheWxvYWQuYW5ub3VuY2VtZW50Py5pZCkge1xuICAgICAgYXV0aG9yaXRhdGl2ZUFubm91bmNlbWVudCA9IHsgLi4ucGF5bG9hZC5hbm5vdW5jZW1lbnQgfTtcbiAgICAgIGNvbnN0IHRhID0gVGV4dEFubm91bmNlbWVudHMuZ2V0TXV0YWJsZU9yTnVsbChhZG1pblRvb2xraXRVaUVudGl0eSk7XG4gICAgICBpZiAodGEpIHtcbiAgICAgICAgdGEudGV4dCA9IHBheWxvYWQuYW5ub3VuY2VtZW50LnRleHQ7XG4gICAgICAgIHRhLmF1dGhvciA9IHBheWxvYWQuYW5ub3VuY2VtZW50LmF1dGhvcjtcbiAgICAgICAgdGEuaWQgPSBwYXlsb2FkLmFubm91bmNlbWVudC5pZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhZG1pbkhhc0FjdGVkID0gdHJ1ZTtcbiAgfSk7XG5cbiAgb25NZXNzYWdlKE1TRy5SRVFVRVNUX1NUQVRFLCAoX3BheWxvYWQsIF9zZW5kZXIpID0+IHtcbiAgICBpZiAoYWRtaW5IYXNBY3RlZCkgYnJvYWRjYXN0Q3VycmVudFN0YXRlKCk7XG4gIH0pO1xuXG4gIHBsYXllcnNIZWxwZXI/Lm9uRW50ZXJTY2VuZSgoKSA9PiB7XG4gICAgaWYgKGFkbWluSGFzQWN0ZWQpIGJyb2FkY2FzdEN1cnJlbnRTdGF0ZSgpO1xuICB9KTtcblxuICAvLyBXaGVuIGFuIGFkbWluIHNpZ25hbHMgdGhhdCB0aGUgYWRtaW4gbGlzdCBjaGFuZ2VkLCBhbGwgcGFydGljaXBhbnRzIHJlZmV0Y2hcbiAgb25BZG1pbk1lc3NhZ2UoTVNHLlNZTkNfQURNSU5TLCAoX3BheWxvYWQsIF9zZW5kZXIpID0+IHtcbiAgICBvblJlZmV0Y2hBZG1pbnM/LigpO1xuICB9KTtcblxuICAvLyBSZXF1ZXN0IHN0YXRlIGZyb20gYW55IGV4aXN0aW5nIHBhcnRpY2lwYW50IHRoYXQgaGFzIGFkbWluIHN0YXRlLlxuICAvL1xuICAvLyBSRVFVRVNUX1NUQVRFIGFuZCBpdHMgU1lOQ19TVEFURSByZXBseSBhcmUgYmVzdC1lZmZvcnQgY29tbXMgYW5kIGNhbiBiZVxuICAvLyBkcm9wcGVkLiBBIGxvc3QgaGFuZHNoYWtlIGlzIE5PVCBiZW5pZ246IHRoZSByZXZlcnQgc3lzdGVtIGJlbG93IHBpbnMgZXZlcnlcbiAgLy8gc2NyZWVuIHRvIGRlZmF1bHRVUkwsIHNvIGEgbGF0ZSBqb2luZXIgdGhhdCBtaXNzZXMgdGhlIHJlcGx5IHN0YXlzIHN0dWNrIG9uXG4gIC8vIHRoZSBkZWZhdWx0IHZpZGVvIGV2ZW4gdGhvdWdoIHRoZSByZWFsIGNhc3Qgc3JjIGFycml2ZXMgb3ZlciBDUkRUIChpdCBnZXRzXG4gIC8vIHJldmVydGVkIGV2ZXJ5IGZyYW1lKS4gU28gcmV0cnkgdW50aWwgYSByZW1vdGUgU1lOQ19TVEFURSByZXBseSBsYW5kcywgYm91bmRlZFxuICAvLyBieSBNQVhfUkVRVUVTVF9BVFRFTVBUUy4gVGhpcyBvbmx5IHJlY292ZXJzIHN0YXRlIHRoYXQgcHJlZGF0ZXMgdGhlIGpvaW4g4oCUXG4gIC8vIGxpdmUgY2hhbmdlcyBhZnRlciBqb2luaW5nIGFycml2ZSB2aWEgU0VUX1ZJREVPIHJlZ2FyZGxlc3MuIFRoZSBzdG9wIHNpZ25hbCBpc1xuICAvLyByZWNlaXZlZFJlbW90ZVN0YXRlIHNwZWNpZmljYWxseSAoYSBTWU5DX1NUQVRFIGZyb20gYW5vdGhlciBwYXJ0aWNpcGFudCB0aGF0XG4gIC8vIGNhcnJpZXMgdmlkZW8gc3RhdGUpLCBub3QgYWRtaW5IYXNBY3RlZCBhbmQgbm90IGFuIGFubm91bmNlbWVudC1vbmx5IHJlcGx5OlxuICAvLyBlaXRoZXIgd291bGQgc3RvcCB0aGUgcmV0cnkgd2l0aG91dCBldmVyIGRlbGl2ZXJpbmcgdGhlIHZpZGVvIHN0YXRlIHdlJ3JlXG4gIC8vIHN0aWxsIG1pc3NpbmcuXG4gIGNvbnN0IFJFUVVFU1RfUkVUUllfSU5URVJWQUxfTVMgPSAxMDAwO1xuICBjb25zdCBNQVhfUkVRVUVTVF9BVFRFTVBUUyA9IDEwO1xuICBsZXQgcmVxdWVzdEF0dGVtcHRzID0gMTtcblxuICBlbWl0TWVzc2FnZShNU0cuUkVRVUVTVF9TVEFURSwge30pO1xuXG4gIGNvbnN0IHJlcXVlc3RTdGF0ZVJldHJ5ID0gc2V0SW50ZXJ2YWwoXG4gICAgZW5naW5lLFxuICAgICgpID0+IHtcbiAgICAgIGlmIChyZWNlaXZlZFJlbW90ZVN0YXRlIHx8IHJlcXVlc3RBdHRlbXB0cyA+PSBNQVhfUkVRVUVTVF9BVFRFTVBUUykge1xuICAgICAgICBjbGVhckludGVydmFsKGVuZ2luZSwgcmVxdWVzdFN0YXRlUmV0cnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXF1ZXN0QXR0ZW1wdHMgKz0gMTtcbiAgICAgIGVtaXRNZXNzYWdlKE1TRy5SRVFVRVNUX1NUQVRFLCB7fSk7XG4gICAgfSxcbiAgICBSRVFVRVNUX1JFVFJZX0lOVEVSVkFMX01TLFxuICApO1xuXG4gIC8vIOKUgOKUgCA1LiBSZXZlcnQgc3lzdGVtIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvL1xuICAvLyBBdHRhY2tlciBDUkRUIHdyaXRlcyBieXBhc3MgU3luY0NvbXBvbmVudHMgKGluamVjdGVkIGRpcmVjdGx5IHZpYSBMaXZlS2l0KVxuICAvLyBidXQgYXJlIGNhdWdodCBoZXJlLiBBZG1pbiBjb21tYW5kcyB1cGRhdGUgYXV0aG9yaXRhdGl2ZVZpZGVvL0Fubm91bmNlbWVudFxuICAvLyBiZWZvcmUgbXV0YXRpbmcgY29tcG9uZW50cywgc28gbGVnaXRpbWF0ZSBjaGFuZ2VzIGFyZSBuZXZlciByZXZlcnRlZC5cblxuICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGF1dGhTdGF0ZV0gb2YgYXV0aG9yaXRhdGl2ZVZpZGVvKSB7XG4gICAgICBjb25zdCB2cCA9IFZpZGVvUGxheWVyLmdldE9yTnVsbChlbnRpdHkpO1xuICAgICAgaWYgKCF2cCkgY29udGludWU7XG4gICAgICBpZiAodnAuc3JjICE9PSBhdXRoU3RhdGUuc3JjKSB7XG4gICAgICAgIGNvbnN0IG11dCA9IFZpZGVvUGxheWVyLmdldE11dGFibGUoZW50aXR5KTtcbiAgICAgICAgbXV0LnNyYyA9IGF1dGhTdGF0ZS5zcmM7XG4gICAgICAgIG11dC5wbGF5aW5nID0gYXV0aFN0YXRlLnBsYXlpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF1dGhvcml0YXRpdmVBbm5vdW5jZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhID0gVGV4dEFubm91bmNlbWVudHMuZ2V0T3JOdWxsKGFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgIGlmICh0YSAmJiBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LmlkICYmIHRhLmlkICE9PSBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LmlkKSB7XG4gICAgICAgIGNvbnN0IG11dCA9IFRleHRBbm5vdW5jZW1lbnRzLmdldE11dGFibGUoYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgICAgICBtdXQudGV4dCA9IGF1dGhvcml0YXRpdmVBbm5vdW5jZW1lbnQudGV4dDtcbiAgICAgICAgbXV0LmF1dGhvciA9IGF1dGhvcml0YXRpdmVBbm5vdW5jZW1lbnQuYXV0aG9yO1xuICAgICAgICBtdXQuaWQgPSBhdXRob3JpdGF0aXZlQW5ub3VuY2VtZW50LmlkO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8g4pSA4pSAIEluc3RhbmNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGluc3RhbmNlID0ge1xuICAgIGVtaXRTZXRWaWRlbyhlbnRpdHk6IEVudGl0eSwgcHJvcHM6IFBhcnRpYWw8UEJWaWRlb1BsYXllcj4pIHtcbiAgICAgIGVtaXRNZXNzYWdlKE1TRy5TRVRfVklERU8sIHsgZW50aXR5LCAuLi5wcm9wcyB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICB9LFxuXG4gICAgZW1pdFNldEFubm91bmNlbWVudCh0ZXh0OiBzdHJpbmcsIGF1dGhvcj86IHN0cmluZywgaWQ/OiBzdHJpbmcpIHtcbiAgICAgIGVtaXRNZXNzYWdlKE1TRy5TRVRfQU5OT1VOQ0VNRU5ULCB7XG4gICAgICAgIHRleHQsXG4gICAgICAgIGF1dGhvcjogYXV0aG9yID8/ICcnLFxuICAgICAgICBpZDogaWQgPz8gJycsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZW1pdENsZWFyQW5ub3VuY2VtZW50KCkge1xuICAgICAgZW1pdE1lc3NhZ2UoTVNHLkNMRUFSX0FOTk9VTkNFTUVOVCwge30pO1xuICAgIH0sXG5cbiAgICBlbWl0U3luY0FkbWlucygpIHtcbiAgICAgIGVtaXRNZXNzYWdlKE1TRy5TWU5DX0FETUlOUywge30pO1xuICAgIH0sXG5cbiAgICB1cGRhdGVBZG1pbkxpc3QoYWRtaW5zOiBTY2VuZUFkbWluW10pIHtcbiAgICAgIHNjZW5lQWRtaW5zID0gYWRtaW5zO1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuIl19
|
|
@@ -2,9 +2,6 @@ import { Color4 } from '@dcl/sdk/math';
|
|
|
2
2
|
import { type ReactBasedUiSystem } from '@dcl/react-ecs';
|
|
3
3
|
import { type IEngine, type PointerEventsSystem } from '@dcl/ecs';
|
|
4
4
|
import { type IPlayersHelper, type ISDKHelpers } from '../definitions';
|
|
5
|
-
import { type State } from './types';
|
|
6
|
-
export declare const nextTickFunctions: (() => void)[];
|
|
7
|
-
export declare const state: State;
|
|
8
5
|
export declare const containerBackgroundColor: Color4.MutableColor4;
|
|
9
6
|
export declare function fetchSceneAdmins(): Promise<void>;
|
|
10
7
|
export declare function fetchAndSyncSceneAdmins(): Promise<void>;
|
|
@@ -9,15 +9,17 @@ import { Button } from './Button';
|
|
|
9
9
|
import { TextAnnouncements } from './TextAnnouncements';
|
|
10
10
|
import { getContentUrl } from './constants';
|
|
11
11
|
import { TabType } from './types';
|
|
12
|
-
import { getBtnModerationControl, ModerationControl
|
|
12
|
+
import { getBtnModerationControl, ModerationControl } from './ModerationControl';
|
|
13
13
|
import { getSceneAdmins, getSceneBans } from './ModerationControl/api';
|
|
14
14
|
import { ModalUserList, UserListType } from './ModerationControl/UsersList';
|
|
15
|
-
import {
|
|
15
|
+
import { startPresentationDetection } from './VideoControl/DclCast/presentation-detector';
|
|
16
|
+
import { findActiveCastScreenIndex } from './VideoControl/utils';
|
|
16
17
|
import { SpeakerShowcase } from './VideoControl/DclCast/SpeakerShowcase';
|
|
17
18
|
import SharePresentationModal from './VideoControl/DclCast/SharePresentationModal';
|
|
18
19
|
import { isPreview } from './fetch-utils';
|
|
19
20
|
import { initAdminMessageBus, getAdminMessageBus } from './admin-message-bus';
|
|
20
|
-
|
|
21
|
+
import { state } from './store';
|
|
22
|
+
import { setActiveTab, togglePanel, showPresentation, dismissPresentation, setAdminToolkitUiEntity, } from './actions';
|
|
21
23
|
const MOBILE_UI_SCALE = 2;
|
|
22
24
|
const BASE_VIRTUAL_UI_SIZE = { virtualWidth: 1920, virtualHeight: 1080 };
|
|
23
25
|
function getVirtualUiSize() {
|
|
@@ -28,32 +30,6 @@ function getVirtualUiSize() {
|
|
|
28
30
|
}
|
|
29
31
|
: BASE_VIRTUAL_UI_SIZE;
|
|
30
32
|
}
|
|
31
|
-
export const state = {
|
|
32
|
-
adminToolkitUiEntity: 0,
|
|
33
|
-
panelOpen: false,
|
|
34
|
-
activeTab: TabType.NONE,
|
|
35
|
-
videoControl: {
|
|
36
|
-
selectedVideoPlayer: undefined,
|
|
37
|
-
selectedStream: undefined,
|
|
38
|
-
dclCast: undefined,
|
|
39
|
-
isMinimized: false,
|
|
40
|
-
presentationState: undefined,
|
|
41
|
-
},
|
|
42
|
-
smartItemsControl: {
|
|
43
|
-
selectedSmartItem: undefined,
|
|
44
|
-
smartItems: new Map(),
|
|
45
|
-
},
|
|
46
|
-
textAnnouncementControl: {
|
|
47
|
-
entity: undefined,
|
|
48
|
-
text: undefined,
|
|
49
|
-
messageRateTracker: new Map(),
|
|
50
|
-
announcements: [],
|
|
51
|
-
maxAnnouncements: 4,
|
|
52
|
-
},
|
|
53
|
-
rewardsControl: {
|
|
54
|
-
selectedRewardItem: undefined,
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
33
|
let sceneAdminsCache = [];
|
|
58
34
|
let sceneBansCache = [];
|
|
59
35
|
const ADMIN_ICONS = {
|
|
@@ -136,20 +112,12 @@ let adminDataInitialized = false;
|
|
|
136
112
|
export async function initializeAdminData(engine, sdkHelpers, playersHelper) {
|
|
137
113
|
if (!adminDataInitialized) {
|
|
138
114
|
const { VideoControlState } = getComponents(engine);
|
|
139
|
-
|
|
115
|
+
setAdminToolkitUiEntity(getAdminToolkitEntity(engine) ?? engine.addEntity());
|
|
140
116
|
initTextAnnouncementSync(engine);
|
|
141
117
|
if (!VideoControlState.getOrNull(state.adminToolkitUiEntity)) {
|
|
142
118
|
VideoControlState.create(state.adminToolkitUiEntity);
|
|
143
119
|
}
|
|
144
120
|
sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId], ADMIN_TOOLS_ENTITY);
|
|
145
|
-
engine.addSystem(() => {
|
|
146
|
-
if (nextTickFunctions.length > 0) {
|
|
147
|
-
const nextTick = nextTickFunctions.shift();
|
|
148
|
-
if (nextTick) {
|
|
149
|
-
nextTick();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}, Number.POSITIVE_INFINITY);
|
|
153
121
|
await Promise.all([fetchSceneAdmins(), fetchSceneBans()]);
|
|
154
122
|
initAdminMessageBus(engine, sceneAdminsCache, state.adminToolkitUiEntity, playersHelper, fetchSceneAdmins);
|
|
155
123
|
adminDataInitialized = true;
|
|
@@ -160,6 +128,7 @@ export function createAdminToolkitUI(engine, pointerEventsSystem, reactBasedUiSy
|
|
|
160
128
|
initializeAdminData(engine, sdkHelpers, playersHelper).then(() => {
|
|
161
129
|
console.log('createAdminToolkitUI - initialized');
|
|
162
130
|
reactBasedUiSystem.setUiRenderer(() => uiComponent(engine, pointerEventsSystem, sdkHelpers, playersHelper), getVirtualUiSize());
|
|
131
|
+
startPresentationDetection(engine, () => !!isAllowedAdmin(engine, getAdminToolkitComponent(engine), playersHelper?.getPlayer()), () => playersHelper?.getPlayer()?.userId, () => showPresentation(findActiveCastScreenIndex(engine)), () => dismissPresentation());
|
|
163
132
|
});
|
|
164
133
|
}
|
|
165
134
|
function isAllowedAdmin(_engine, adminToolkitEntitie, player) {
|
|
@@ -220,17 +189,7 @@ const uiComponent = (engine, _pointerEventsSystem, _sdkHelpers, playersHelper) =
|
|
|
220
189
|
color: state.activeTab === TabType.MODERATION_CONTROL
|
|
221
190
|
? Color4.Black()
|
|
222
191
|
: Color4.White(),
|
|
223
|
-
}, iconTransform: { height: '100%', width: '100%' }, onMouseDown: () =>
|
|
224
|
-
if (state.activeTab !== TabType.MODERATION_CONTROL) {
|
|
225
|
-
state.activeTab = TabType.NONE;
|
|
226
|
-
nextTickFunctions.push(() => {
|
|
227
|
-
state.activeTab = TabType.MODERATION_CONTROL;
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
state.activeTab = TabType.NONE;
|
|
232
|
-
}
|
|
233
|
-
} }),
|
|
192
|
+
}, iconTransform: { height: '100%', width: '100%' }, onMouseDown: () => setActiveTab(TabType.MODERATION_CONTROL) }),
|
|
234
193
|
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_video_control", variant: state.activeTab === TabType.VIDEO_CONTROL ? 'primary' : 'text', icon: ADMIN_ICONS.BTN_VIDEO_CONTROL, iconBackground: {
|
|
235
194
|
color: state.activeTab === TabType.VIDEO_CONTROL ? Color4.Black() : Color4.White(),
|
|
236
195
|
}, onlyIcon: true, uiTransform: {
|
|
@@ -243,17 +202,7 @@ const uiComponent = (engine, _pointerEventsSystem, _sdkHelpers, playersHelper) =
|
|
|
243
202
|
}, iconTransform: {
|
|
244
203
|
height: '100%',
|
|
245
204
|
width: '100%',
|
|
246
|
-
}, onMouseDown: () =>
|
|
247
|
-
if (state.activeTab !== TabType.VIDEO_CONTROL) {
|
|
248
|
-
state.activeTab = TabType.NONE;
|
|
249
|
-
nextTickFunctions.push(() => {
|
|
250
|
-
state.activeTab = TabType.VIDEO_CONTROL;
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
state.activeTab = TabType.NONE;
|
|
255
|
-
}
|
|
256
|
-
} }),
|
|
205
|
+
}, onMouseDown: () => setActiveTab(TabType.VIDEO_CONTROL) }),
|
|
257
206
|
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_smart_items_control", variant: state.activeTab === TabType.SMART_ITEMS_CONTROL ? 'primary' : 'text', icon: ADMIN_ICONS.BTN_SMART_ITEM_CONTROL, iconBackground: {
|
|
258
207
|
color: state.activeTab === TabType.SMART_ITEMS_CONTROL
|
|
259
208
|
? Color4.Black()
|
|
@@ -268,17 +217,7 @@ const uiComponent = (engine, _pointerEventsSystem, _sdkHelpers, playersHelper) =
|
|
|
268
217
|
}, iconTransform: {
|
|
269
218
|
height: '100%',
|
|
270
219
|
width: '100%',
|
|
271
|
-
}, onMouseDown: () =>
|
|
272
|
-
if (state.activeTab !== TabType.SMART_ITEMS_CONTROL) {
|
|
273
|
-
state.activeTab = TabType.NONE;
|
|
274
|
-
nextTickFunctions.push(() => {
|
|
275
|
-
state.activeTab = TabType.SMART_ITEMS_CONTROL;
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
state.activeTab = TabType.NONE;
|
|
280
|
-
}
|
|
281
|
-
} }),
|
|
220
|
+
}, onMouseDown: () => setActiveTab(TabType.SMART_ITEMS_CONTROL) }),
|
|
282
221
|
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_text_announcement_control", variant: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL ? 'primary' : 'text', icon: ADMIN_ICONS.BTN_TEXT_ANNOUNCEMENT_CONTROL, iconBackground: {
|
|
283
222
|
color: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL
|
|
284
223
|
? Color4.Black()
|
|
@@ -293,17 +232,7 @@ const uiComponent = (engine, _pointerEventsSystem, _sdkHelpers, playersHelper) =
|
|
|
293
232
|
}, iconTransform: {
|
|
294
233
|
height: '100%',
|
|
295
234
|
width: '100%',
|
|
296
|
-
}, onMouseDown: () =>
|
|
297
|
-
if (state.activeTab !== TabType.TEXT_ANNOUNCEMENT_CONTROL) {
|
|
298
|
-
state.activeTab = TabType.NONE;
|
|
299
|
-
nextTickFunctions.push(() => {
|
|
300
|
-
state.activeTab = TabType.TEXT_ANNOUNCEMENT_CONTROL;
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
state.activeTab = TabType.NONE;
|
|
305
|
-
}
|
|
306
|
-
} })),
|
|
235
|
+
}, onMouseDown: () => setActiveTab(TabType.TEXT_ANNOUNCEMENT_CONTROL) })),
|
|
307
236
|
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
308
237
|
width: '100%',
|
|
309
238
|
flexDirection: 'column',
|
|
@@ -341,17 +270,15 @@ const uiComponent = (engine, _pointerEventsSystem, _sdkHelpers, playersHelper) =
|
|
|
341
270
|
},
|
|
342
271
|
textureMode: 'stretch',
|
|
343
272
|
color: Color4.create(1, 1, 1, 1),
|
|
344
|
-
}, onMouseDown: () =>
|
|
345
|
-
state.panelOpen = !state.panelOpen;
|
|
346
|
-
} })))) : null,
|
|
273
|
+
}, onMouseDown: () => togglePanel() })))) : null,
|
|
347
274
|
ReactEcs.createElement(TextAnnouncements, { engine: engine, state: state })),
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
275
|
+
state.moderationControl.showModalAdminList && (ReactEcs.createElement(ModalUserList, { users: sceneAdminsCache ?? [], engine: engine, type: UserListType.ADMIN })),
|
|
276
|
+
state.moderationControl.showModalBanList && (ReactEcs.createElement(ModalUserList, { users: sceneBansCache ?? [], engine: engine, type: UserListType.BAN })),
|
|
277
|
+
state.videoControl.showcase.show &&
|
|
278
|
+
state.videoControl.showcase.onSelectTrack &&
|
|
279
|
+
state.videoControl.showcase.onSetDefault &&
|
|
280
|
+
state.videoControl.showcase.onClose && (ReactEcs.createElement(SpeakerShowcase, { participants: state.videoControl.participants, activeTrackSid: state.videoControl.showcase.activeTrackSid, onSelectTrack: state.videoControl.showcase.onSelectTrack, onSetDefault: state.videoControl.showcase.onSetDefault, onClose: state.videoControl.showcase.onClose })),
|
|
281
|
+
state.videoControl.sharePresentation.show && state.videoControl.sharePresentation.onClose && (ReactEcs.createElement(SharePresentationModal, { onClose: state.videoControl.sharePresentation.onClose, streamingKey: state.videoControl.dclCast?.streamingKey ?? '' })),
|
|
355
282
|
];
|
|
356
283
|
};
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxJQUFJLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9ELE9BQU8sUUFBUSxFQUFFLEVBQ2YsS0FBSyxFQUNMLE1BQU0sSUFBSSxTQUFTLEVBQ25CLFFBQVEsR0FFVCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEdBSWQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBYyxPQUFPLEVBQTBCLE1BQU0sU0FBUyxDQUFDO0FBQ3RFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUV2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVB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LEVBQUUsWUFBWSxDQUFDLEdBQUcsR0FDdEIsQ0FDSDtRQUNELGFBQWEsQ0FBQyxJQUFJO1lBQ2hCLGFBQWEsQ0FBQyxhQUFhO1lBQzNCLGFBQWEsQ0FBQyxZQUFZO1lBQzFCLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FDdkIsdUJBQUMsZUFBZSxJQUNkLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWMsRUFDNUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxhQUFhLEVBQzFDLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sR0FDOUIsQ0FDSDtRQUNILHNCQUFzQixDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxPQUFPLElBQUksQ0FDL0QsdUJBQUMsc0JBQXNCLElBQ3JCLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLEVBQ3ZDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksRUFBRSxHQUM1RCxDQUNIO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yNCB9IGZyb20gJ0BkY2wvc2RrL21hdGgnO1xuaW1wb3J0IHsgaXNNb2JpbGUgYXMgZGV0ZWN0SXNNb2JpbGUgfSBmcm9tICdAZGNsL3Nkay9wbGF0Zm9ybSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFJlYWN0RWNzIGlzIHJlcXVpcmVkIGZvciBKU1ggZmFjdG9yeVxuaW1wb3J0IFJlYWN0RWNzLCB7XG4gIExhYmVsLFxuICBCdXR0b24gYXMgRENMQnV0dG9uLFxuICBVaUVudGl0eSxcbiAgdHlwZSBSZWFjdEJhc2VkVWlTeXN0ZW0sXG59IGZyb20gJ0BkY2wvcmVhY3QtZWNzJztcbmltcG9ydCB7IHR5cGUgRW50aXR5LCB0eXBlIElFbmdpbmUsIHR5cGUgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIHR5cGUgR2V0UGxheWVyRGF0YVJlcyxcbiAgdHlwZSBJUGxheWVyc0hlbHBlcixcbiAgdHlwZSBJU0RLSGVscGVycyxcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgVmlkZW9Db250cm9sIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wnO1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHNDb250cm9sIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wnO1xuaW1wb3J0IHsgU21hcnRJdGVtc0NvbnRyb2wgfSBmcm9tICcuL1NtYXJ0SXRlbXNDb250cm9sJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uJztcbmltcG9ydCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50cyc7XG5pbXBvcnQgeyBnZXRDb250ZW50VXJsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdHlwZSBTdGF0ZSwgVGFiVHlwZSwgdHlwZSBTZWxlY3RlZFNtYXJ0SXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0QnRuTW9kZXJhdGlvbkNvbnRyb2wsXG4gIE1vZGVyYXRpb25Db250cm9sLFxuICBtb2RlcmF0aW9uQ29udHJvbFN0YXRlLFxuICB0eXBlIFNjZW5lQWRtaW4sXG59IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wnO1xuaW1wb3J0IHsgZ2V0U2NlbmVBZG1pbnMsIGdldFNjZW5lQmFucywgdHlwZSBTY2VuZUJhblVzZXIgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL2FwaSc7XG5pbXBvcnQgeyBNb2RhbFVzZXJMaXN0LCBVc2VyTGlzdFR5cGUgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL1VzZXJzTGlzdCc7XG5pbXBvcnQgeyBzaG93Y2FzZVN0YXRlLCBzaGFyZVByZXNlbnRhdGlvblN0YXRlIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wvRGNsQ2FzdCc7XG5pbXBvcnQgeyBTcGVha2VyU2hvd2Nhc2UgfSBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L1NwZWFrZXJTaG93Y2FzZSc7XG5pbXBvcnQgU2hhcmVQcmVzZW50YXRpb25Nb2RhbCBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L1NoYXJlUHJlc2VudGF0aW9uTW9kYWwnO1xuaW1wb3J0IHsgaXNQcmV2aWV3IH0gZnJvbSAnLi9mZXRjaC11dGlscyc7XG5pbXBvcnQgeyBpbml0QWRtaW5NZXNzYWdlQnVzLCBnZXRBZG1pbk1lc3NhZ2VCdXMgfSBmcm9tICcuL2FkbWluLW1lc3NhZ2UtYnVzJztcblxuZXhwb3J0IGNvbnN0IG5leHRUaWNrRnVuY3Rpb25zOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4vLyBNb2JpbGUgc2NhbGluZzogc2hyaW5rIHRoZSB2aXJ0dWFsIGNhbnZhcyBvblxuLy8gbW9iaWxlIHNvIHRoZSBTREsncyBnbG9iYWwgVUkgc2NhbGUgZmFjdG9yIOKAlCBtaW4oc2NyZWVuL3ZpcnR1YWwpLCBzZWVcbi8vIEBkY2wvcmVhY3QtZWNzIGdldFVpU2NhbGVGYWN0b3Ig4oCUIG11bHRpcGxpZXMgRVZFUllUSElORyAoZ2VvbWV0cnkgYW5kXG4vLyBmb250U2l6ZSkgdW5pZm9ybWx5IGJ5IE1PQklMRV9VSV9TQ0FMRS4gV2UgYXV0aG9yIGEgc2luZ2xlIGJhc2UgbGF5b3V0IGFuZFxuLy8gbW9iaWxlIGdldHMgdGhlIHpvb20gZm9yIGZyZWUsIGluY2x1ZGluZyBldmVyeSBjaGlsZCBjb21wb25lbnQncyB0ZXh0LlxuY29uc3QgTU9CSUxFX1VJX1NDQUxFID0gMjtcbmNvbnN0IEJBU0VfVklSVFVBTF9VSV9TSVpFID0geyB2aXJ0dWFsV2lkdGg6IDE5MjAsIHZpcnR1YWxIZWlnaHQ6IDEwODAgfTtcblxuZnVuY3Rpb24gZ2V0VmlydHVhbFVpU2l6ZSgpIHtcbiAgcmV0dXJuIGRldGVjdElzTW9iaWxlKClcbiAgICA/IHtcbiAgICAgICAgdmlydHVhbFdpZHRoOiBCQVNFX1ZJUlRVQUxfVUlfU0laRS52aXJ0dWFsV2lkdGggLyBNT0JJTEVfVUlfU0NBTEUsXG4gICAgICAgIHZpcnR1YWxIZWlnaHQ6IEJBU0VfVklSVFVBTF9VSV9TSVpFLnZpcnR1YWxIZWlnaHQgLyBNT0JJTEVfVUlfU0NBTEUsXG4gICAgICB9XG4gICAgOiBCQVNFX1ZJUlRVQUxfVUlfU0laRTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0YXRlOiBTdGF0ZSA9IHtcbiAgYWRtaW5Ub29sa2l0VWlFbnRpdHk6IDAgYXMgRW50aXR5LFxuICBwYW5lbE9wZW46IGZhbHNlLFxuICBhY3RpdmVUYWI6IFRhYlR5cGUuTk9ORSxcbiAgdmlkZW9Db250cm9sOiB7XG4gICAgc2VsZWN0ZWRWaWRlb1BsYXllcjogdW5kZWZpbmVkLFxuICAgIHNlbGVjdGVkU3RyZWFtOiB1bmRlZmluZWQsXG4gICAgZGNsQ2FzdDogdW5kZWZpbmVkLFxuICAgIGlzTWluaW1pemVkOiBmYWxzZSxcbiAgICBwcmVzZW50YXRpb25TdGF0ZTogdW5kZWZpbmVkLFxuICB9LFxuICBzbWFydEl0ZW1zQ29udHJvbDoge1xuICAgIHNlbGVjdGVkU21hcnRJdGVtOiB1bmRlZmluZWQsXG4gICAgc21hcnRJdGVtczogbmV3IE1hcDxFbnRpdHksIFNlbGVjdGVkU21hcnRJdGVtPigpLFxuICB9LFxuICB0ZXh0QW5ub3VuY2VtZW50Q29udHJvbDoge1xuICAgIGVudGl0eTogdW5kZWZpbmVkLFxuICAgIHRleHQ6IHVuZGVmaW5lZCxcbiAgICBtZXNzYWdlUmF0ZVRyYWNrZXI6IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCksXG4gICAgYW5ub3VuY2VtZW50czogW10sXG4gICAgbWF4QW5ub3VuY2VtZW50czogNCxcbiAgfSxcbiAgcmV3YXJkc0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFJld2FyZEl0ZW06IHVuZGVmaW5lZCxcbiAgfSxcbn07XG5cbmxldCBzY2VuZUFkbWluc0NhY2hlOiBTY2VuZUFkbWluW10gPSBbXTtcbmxldCBzY2VuZUJhbnNDYWNoZTogU2NlbmVCYW5Vc2VyW10gPSBbXTtcblxuLy8gY29uc3QgQlROX1JFV0FSRFNfQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYnV0dG9uLnBuZ2Bcbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXJld2FyZHMtY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQURNSU5fSUNPTlMgPSB7XG4gIGdldCBCVE5fVklERU9fQ09OVFJPTCgpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC12aWRlby1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX1NNQVJUX0lURU1fQ09OVFJPTCgpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1zbWFydC1pdGVtLWNvbnRyb2wtYnV0dG9uLnBuZ2A7XG4gIH0sXG4gIGdldCBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCgpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC10ZXh0LWFubm91bmNlbWVudC1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX0FETUlOX1RPT0xLSVRfQ09OVFJPTCgpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCgpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9iYWNrZ3JvdW5kcy9hZG1pbi10b29sLWJhY2tncm91bmQucG5nYDtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcjQuY3JlYXRlKDAsIDAsIDAsIDAuNzUpO1xuXG4vLyBUaGUgZWRpdG9yIHN0YXJ0cyB1c2luZyBlbnRpdGllcyBmcm9tIFs4MDAxXS5cbmNvbnN0IEFETUlOX1RPT0xTX0VOVElUWSA9IDgwMDAgYXMgRW50aXR5O1xuXG5mdW5jdGlvbiBnZXRBZG1pblRvb2xraXRFbnRpdHkoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IHsgQWRtaW5Ub29scyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuICByZXR1cm4gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFkbWluVG9vbHMpKVswXVswXTtcbn1cblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFNjZW5lQWRtaW5zKCkge1xuICBjb25zdCBbZXJyb3IsIHJlc3BvbnNlXSA9IGF3YWl0IGdldFNjZW5lQWRtaW5zKCk7XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBlcnJvciB9KSk7XG4gICAgc2NlbmVBZG1pbnNDYWNoZSA9IFtdO1xuICAgIHJldHVybjtcbiAgfVxuICBzY2VuZUFkbWluc0NhY2hlID0gKHJlc3BvbnNlID8/IFtdKVxuICAgIC5tYXAoJCA9PiAoe1xuICAgICAgbmFtZTogJC5uYW1lLFxuICAgICAgYWRkcmVzczogJC5hZG1pbixcbiAgICAgIHJvbGU6ICdhZG1pbicgYXMgY29uc3QsXG4gICAgICB2ZXJpZmllZDogISQubmFtZS5pbmNsdWRlcygnIycpLFxuICAgICAgY2FuQmVSZW1vdmVkOiAhISQuY2FuQmVSZW1vdmVkLFxuICAgIH0pKVxuICAgIC5zb3J0KGEgPT4gKGEuY2FuQmVSZW1vdmVkID8gMSA6IC0xKSk7XG4gIGlmIChhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGdldEFkbWluTWVzc2FnZUJ1cygpLnVwZGF0ZUFkbWluTGlzdChzY2VuZUFkbWluc0NhY2hlKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbmRTeW5jU2NlbmVBZG1pbnMoKSB7XG4gIGF3YWl0IGZldGNoU2NlbmVBZG1pbnMoKTtcbiAgaWYgKGFkbWluRGF0YUluaXRpYWxpemVkKSB7XG4gICAgZ2V0QWRtaW5NZXNzYWdlQnVzKCkuZW1pdFN5bmNBZG1pbnMoKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUJhbnMoKSB7XG4gIGNvbnN0IFtlcnJvciwgcmVzcG9uc2VdID0gYXdhaXQgZ2V0U2NlbmVCYW5zKCk7XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgc2NlbmVCYW5zQ2FjaGUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBzY2VuZUJhbnNDYWNoZSA9IHJlc3BvbnNlPy5yZXN1bHRzID8/IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTY2VuZUJhbnNDYWNoZSgpIHtcbiAgc2NlbmVCYW5zQ2FjaGUgPSBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNtYXJ0SXRlbXMoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdENvbXBvbmVudCA9IGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudC5zbWFydEl0ZW1zQ29udHJvbC5zbWFydEl0ZW1zID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gaW5pdFRleHRBbm5vdW5jZW1lbnRTeW5jKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG5cbiAgVGV4dEFubm91bmNlbWVudHMuY3JlYXRlT3JSZXBsYWNlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LCB7XG4gICAgdGV4dDogJycsXG4gICAgYXV0aG9yOiAnJyxcbiAgICBpZDogJycsXG4gIH0pO1xufVxuXG4vLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIFVJIHJlbmRlcmluZ1xubGV0IGFkbWluRGF0YUluaXRpYWxpemVkID0gZmFsc2U7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFkbWluRGF0YShcbiAgZW5naW5lOiBJRW5naW5lLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICBpZiAoIWFkbWluRGF0YUluaXRpYWxpemVkKSB7XG4gICAgY29uc3QgeyBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBBZG1pblRvb2xraXRVaUVudGl0eVxuICAgIHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5ID0gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZSkgPz8gZW5naW5lLmFkZEVudGl0eSgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBUZXh0QW5ub3VuY2VtZW50cyBzeW5jIGNvbXBvbmVudFxuICAgIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmUpO1xuXG4gICAgLy8gLy8gSW5pdGlhbGl6ZSBSZXdhcmRzIHN5bmNcbiAgICAvLyBpbml0UmV3YXJkc1N5bmMoZW5naW5lLCBzZGtIZWxwZXJzKVxuXG4gICAgaWYgKCFWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpKSB7XG4gICAgICBWaWRlb0NvbnRyb2xTdGF0ZS5jcmVhdGUoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgIH1cblxuICAgIHNka0hlbHBlcnM/LnN5bmNFbnRpdHk/LihcbiAgICAgIHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LFxuICAgICAgW1ZpZGVvQ29udHJvbFN0YXRlLmNvbXBvbmVudElkXSxcbiAgICAgIEFETUlOX1RPT0xTX0VOVElUWSxcbiAgICApO1xuXG4gICAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgICBpZiAobmV4dFRpY2tGdW5jdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0VGljayA9IG5leHRUaWNrRnVuY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGlmIChuZXh0VGljaykge1xuICAgICAgICAgIG5leHRUaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzY2VuZSBkYXRhXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW2ZldGNoU2NlbmVBZG1pbnMoKSwgZmV0Y2hTY2VuZUJhbnMoKV0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhZG1pbiBtZXNzYWdlIGJ1cyB3aXRoIHNlbmRlciB2YWxpZGF0aW9uXG4gICAgaW5pdEFkbWluTWVzc2FnZUJ1cyhcbiAgICAgIGVuZ2luZSxcbiAgICAgIHNjZW5lQWRtaW5zQ2FjaGUsXG4gICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgIHBsYXllcnNIZWxwZXIsXG4gICAgICBmZXRjaFNjZW5lQWRtaW5zLFxuICAgICk7XG5cbiAgICBhZG1pbkRhdGFJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZUFkbWluRGF0YSAtIGluaXRpYWxpemVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluVG9vbGtpdFVJKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHJlYWN0QmFzZWRVaVN5c3RlbTogUmVhY3RCYXNlZFVpU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICAvLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIHNldHRpbmcgdXAgdGhlIFVJXG4gIGluaXRpYWxpemVBZG1pbkRhdGEoZW5naW5lLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlQWRtaW5Ub29sa2l0VUkgLSBpbml0aWFsaXplZCcpO1xuICAgIHJlYWN0QmFzZWRVaVN5c3RlbS5zZXRVaVJlbmRlcmVyKFxuICAgICAgKCkgPT4gdWlDb21wb25lbnQoZW5naW5lLCBwb2ludGVyRXZlbnRzU3lzdGVtLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKSxcbiAgICAgIGdldFZpcnR1YWxVaVNpemUoKSxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkQWRtaW4oXG4gIF9lbmdpbmU6IElFbmdpbmUsXG4gIGFkbWluVG9vbGtpdEVudGl0aWU6IFJldHVyblR5cGU8dHlwZW9mIGdldEFkbWluVG9vbGtpdENvbXBvbmVudD4sXG4gIHBsYXllcjogR2V0UGxheWVyRGF0YVJlcyB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFwbGF5ZXIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBwbGF5ZXJBZGRyZXNzID0gcGxheWVyLnVzZXJJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpc0FkbWluID0gc2NlbmVBZG1pbnNDYWNoZS5maW5kKCQgPT4gJC5hZGRyZXNzID09PSBwbGF5ZXJBZGRyZXNzKTtcblxuICByZXR1cm4gaXNBZG1pbiB8fCBpc1ByZXZpZXcoKTtcbn1cblxuY29uc3QgdWlDb21wb25lbnQgPSAoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgX3BvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIF9zZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikgPT4ge1xuICBjb25zdCBhZG1pblRvb2xraXRFbnRpdHkgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcbiAgY29uc3QgcGxheWVyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk7XG4gIGNvbnN0IGlzUGxheWVyQWRtaW4gPSBpc0FsbG93ZWRBZG1pbihlbmdpbmUsIGFkbWluVG9vbGtpdEVudGl0eSwgcGxheWVyKTtcbiAgY29uc3QgaXNNb2JpbGUgPSBkZXRlY3RJc01vYmlsZSgpO1xuXG4gIC8vIE1vYmlsZSBzYWZlIGFyZWEgKGZyb20gRGVjZW50cmFsYW5kIEJ1aWxkaW5nLWZvci1Nb2JpbGUgZ3VpZGUpOlxuICAvLyAgIFJFRCAodW5zYWZlKSB6b25lczpcbiAgLy8gICAtIExlZnQgMjUlICAoZnVsbCBoZWlnaHQpICDihpIgQ2hhdCwgU2VhcmNoLCBQcm9maWxlLCBKb3lzdGljaywgRW1vdGVzXG4gIC8vICAgLSBUb3AtcmlnaHQgIDI1JSDDlyAyMyUgICAg4oaSIFByb2ZpbGUgYWNjZXNzLCBjYW1lcmEgY29udHJvbGxlcnNcbiAgLy8gICAtIEJvdHRvbS1yaWdodCAyNSUgw5cgNTUlICDihpIgSW50ZXJhY3Rpb24gYnV0dG9uc1xuICAvLyAgIEdSRUVOIChzYWZlKSB6b25lID0gQ0VOVEVSIG9mIHNjcmVlblxuXG4gIC8vIERlc2t0b3A6IHJvdyBsYXlvdXQsIGFuY2hvcmVkIHRvcC1yaWdodCAodW5jaGFuZ2VkIGZyb20gb3JpZ2luYWwpLlxuICAvLyBNb2JpbGU6IHJvdyBsYXlvdXQsIGFuY2hvcmVkIHRvcC1sZWZ0IGluc2lkZSB0aGUgc2FmZSB6b25lLlxuICBjb25zdCBvdXRlclBvc2l0aW9uID0gaXNNb2JpbGUgPyB7IHRvcDogMTYsIGxlZnQ6IDMwMCB9IDogeyB0b3A6IDEyMCwgcmlnaHQ6IDE0IH07XG4gIGNvbnN0IGlubmVyUG9zaXRpb24gPSBpc01vYmlsZSA/IHsgbGVmdDogOCwgdG9wOiAyIH0gOiB7IHJpZ2h0OiA4IH07XG4gIGNvbnN0IHRvZ2dsZUJ0blNpemUgPSBpc01vYmlsZSA/IDU0IDogNDI7XG5cbiAgcmV0dXJuIFtcbiAgICA8VWlFbnRpdHlcbiAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtpc1BsYXllckFkbWluID8gKFxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogaXNNb2JpbGUgPyAncm93LXJldmVyc2UnIDogJ3JvdycsXG4gICAgICAgICAgICBwb3NpdGlvbjogb3V0ZXJQb3NpdGlvbixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiBzdGF0ZS5wYW5lbE9wZW4gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgIHdpZHRoOiA1MDAsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBtYXJnaW46IGlubmVyUG9zaXRpb24sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MCxcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDEyLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17eyBjb2xvcjogY29udGFpbmVyQmFja2dyb3VuZENvbG9yIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIHZhbHVlPVwiQURNSU4gVE9PTFNcIlxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsyMH1cbiAgICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmNyZWF0ZSgxNjAsIDE1NSwgMTY4LCAxKX1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X21vZGVyYXRpb25fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtnZXRCdG5Nb2RlcmF0aW9uQ29udHJvbCgpfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICAgICAgICAgIGFkbWluVG9vbGtpdEVudGl0eS5tb2RlcmF0aW9uQ29udHJvbC5pc0VuYWJsZWQgJiYgIWlzUHJldmlldygpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7IGhlaWdodDogJzEwMCUnLCB3aWR0aDogJzEwMCUnIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0w7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdmlkZW9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlZJREVPX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1ZJREVPX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/IENvbG9yNC5CbGFjaygpIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudmlkZW9Db250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuVklERU9fQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF9zbWFydF9pdGVtc19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fU01BUlRfSVRFTV9DT05UUk9MfVxuICAgICAgICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgICAgICBjb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yNC5CbGFjaygpXG4gICAgICAgICAgICAgICAgICAgICAgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0eS5zbWFydEl0ZW1zQ29udHJvbC5pc0VuYWJsZWQgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4IH0sXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25UcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0w7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5LnRleHRBbm5vdW5jZW1lbnRDb250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgIC8vIE1vYmlsZTogY2FwIHRoZSB0YWIgY29udGVudCB0byB0aGUgdmlld3BvcnQgYW5kIHNjcm9sbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdywgc28gdGFsbCB0YWJzIChlLmcuIHBlcm1pc3Npb25zKSBzdGF5IGZ1bGx5IHJlYWNoYWJsZS5cbiAgICAgICAgICAgICAgICAvLyBUaGUgaGVhZGVyIGFib3ZlIHN0YXlzIGZpeGVkOyBkZXNrdG9wIGlzIGxlZnQgdW50b3VjaGVkLlxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogaXNNb2JpbGUgPyAnODV2aCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGlzTW9iaWxlID8gJ3Njcm9sbCcgOiAndmlzaWJsZScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgICA8VGV4dEFubm91bmNlbWVudHNDb250cm9sXG4gICAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICAgIHBsYXllcj17cGxheWVyfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlZJREVPX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgICAgPFZpZGVvQ29udHJvbFxuICAgICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgICAgICBwbGF5ZXJBZGRyZXNzPXtwbGF5ZXI/LnVzZXJJZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gKFxuICAgICAgICAgICAgICAgIDxTbWFydEl0ZW1zQ29udHJvbFxuICAgICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MICYmIChcbiAgICAgICAgICAgICAgICA8TW9kZXJhdGlvbkNvbnRyb2xcbiAgICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgICAgcGxheWVyPXtwbGF5ZXJ9XG4gICAgICAgICAgICAgICAgICBzY2VuZUFkbWlucz17c2NlbmVBZG1pbnNDYWNoZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHRvZ2dsZUJ0blNpemUsXG4gICAgICAgICAgICAgIHdpZHRoOiB0b2dnbGVCdG5TaXplLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBBRE1JTl9JQ09OUy5CVE5fQURNSU5fVE9PTEtJVF9CQUNLR1JPVU5ELFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAxLCAxLCAxKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERDTEJ1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0b2dnbGVCdG5TaXplIC0gMixcbiAgICAgICAgICAgICAgICB3aWR0aDogdG9nZ2xlQnRuU2l6ZSAtIDIsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogQURNSU5fSUNPTlMuQlROX0FETUlOX1RPT0xLSVRfQ09OVFJPTCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFuZWxPcGVuID0gIXN0YXRlLnBhbmVsT3BlbjtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFRleHRBbm5vdW5jZW1lbnRzXG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAvPlxuICAgIDwvVWlFbnRpdHk+LFxuICAgIG1vZGVyYXRpb25Db250cm9sU3RhdGUuc2hvd01vZGFsQWRtaW5MaXN0ICYmIChcbiAgICAgIDxNb2RhbFVzZXJMaXN0XG4gICAgICAgIHVzZXJzPXtzY2VuZUFkbWluc0NhY2hlID8/IFtdfVxuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgdHlwZT17VXNlckxpc3RUeXBlLkFETUlOfVxuICAgICAgLz5cbiAgICApLFxuICAgIG1vZGVyYXRpb25Db250cm9sU3RhdGUuc2hvd01vZGFsQmFuTGlzdCAmJiAoXG4gICAgICA8TW9kYWxVc2VyTGlzdFxuICAgICAgICB1c2Vycz17c2NlbmVCYW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICB0eXBlPXtVc2VyTGlzdFR5cGUuQkFOfVxuICAgICAgLz5cbiAgICApLFxuICAgIHNob3djYXNlU3RhdGUuc2hvdyAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrICYmXG4gICAgICBzaG93Y2FzZVN0YXRlLm9uU2V0RGVmYXVsdCAmJlxuICAgICAgc2hvd2Nhc2VTdGF0ZS5vbkNsb3NlICYmIChcbiAgICAgICAgPFNwZWFrZXJTaG93Y2FzZVxuICAgICAgICAgIHBhcnRpY2lwYW50cz17c2hvd2Nhc2VTdGF0ZS5wYXJ0aWNpcGFudHN9XG4gICAgICAgICAgYWN0aXZlVHJhY2tTaWQ9e3Nob3djYXNlU3RhdGUuYWN0aXZlVHJhY2tTaWR9XG4gICAgICAgICAgb25TZWxlY3RUcmFjaz17c2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrfVxuICAgICAgICAgIG9uU2V0RGVmYXVsdD17c2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHR9XG4gICAgICAgICAgb25DbG9zZT17c2hvd2Nhc2VTdGF0ZS5vbkNsb3NlfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLnNob3cgJiYgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5vbkNsb3NlICYmIChcbiAgICAgIDxTaGFyZVByZXNlbnRhdGlvbk1vZGFsXG4gICAgICAgIG9uQ2xvc2U9e3NoYXJlUHJlc2VudGF0aW9uU3RhdGUub25DbG9zZX1cbiAgICAgICAgc3RyZWFtaW5nS2V5PXtzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdD8uc3RyZWFtaW5nS2V5ID8/ICcnfVxuICAgICAgLz5cbiAgICApLFxuICBdO1xufTtcbiJdfQ==
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxJQUFJLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9ELE9BQU8sUUFBUSxFQUFFLEVBQ2YsS0FBSyxFQUNMLE1BQU0sSUFBSSxTQUFTLEVBQ25CLFFBQVEsR0FFVCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEdBSWQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFD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LHNCQUFzQixJQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQ3JELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksRUFBRSxHQUM1RCxDQUNIO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yNCB9IGZyb20gJ0BkY2wvc2RrL21hdGgnO1xuaW1wb3J0IHsgaXNNb2JpbGUgYXMgZGV0ZWN0SXNNb2JpbGUgfSBmcm9tICdAZGNsL3Nkay9wbGF0Zm9ybSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFJlYWN0RWNzIGlzIHJlcXVpcmVkIGZvciBKU1ggZmFjdG9yeVxuaW1wb3J0IFJlYWN0RWNzLCB7XG4gIExhYmVsLFxuICBCdXR0b24gYXMgRENMQnV0dG9uLFxuICBVaUVudGl0eSxcbiAgdHlwZSBSZWFjdEJhc2VkVWlTeXN0ZW0sXG59IGZyb20gJ0BkY2wvcmVhY3QtZWNzJztcbmltcG9ydCB7IHR5cGUgRW50aXR5LCB0eXBlIElFbmdpbmUsIHR5cGUgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIHR5cGUgR2V0UGxheWVyRGF0YVJlcyxcbiAgdHlwZSBJUGxheWVyc0hlbHBlcixcbiAgdHlwZSBJU0RLSGVscGVycyxcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgVmlkZW9Db250cm9sIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wnO1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHNDb250cm9sIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wnO1xuaW1wb3J0IHsgU21hcnRJdGVtc0NvbnRyb2wgfSBmcm9tICcuL1NtYXJ0SXRlbXNDb250cm9sJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uJztcbmltcG9ydCB7IFRleHRBbm5vdW5jZW1lbnRzIH0gZnJvbSAnLi9UZXh0QW5ub3VuY2VtZW50cyc7XG5pbXBvcnQgeyBnZXRDb250ZW50VXJsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVGFiVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0QnRuTW9kZXJhdGlvbkNvbnRyb2wsIE1vZGVyYXRpb25Db250cm9sLCB0eXBlIFNjZW5lQWRtaW4gfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sJztcbmltcG9ydCB7IGdldFNjZW5lQWRtaW5zLCBnZXRTY2VuZUJhbnMsIHR5cGUgU2NlbmVCYW5Vc2VyIH0gZnJvbSAnLi9Nb2RlcmF0aW9uQ29udHJvbC9hcGknO1xuaW1wb3J0IHsgTW9kYWxVc2VyTGlzdCwgVXNlckxpc3RUeXBlIH0gZnJvbSAnLi9Nb2RlcmF0aW9uQ29udHJvbC9Vc2Vyc0xpc3QnO1xuaW1wb3J0IHsgc3RhcnRQcmVzZW50YXRpb25EZXRlY3Rpb24gfSBmcm9tICcuL1ZpZGVvQ29udHJvbC9EY2xDYXN0L3ByZXNlbnRhdGlvbi1kZXRlY3Rvcic7XG5pbXBvcnQgeyBmaW5kQWN0aXZlQ2FzdFNjcmVlbkluZGV4IH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wvdXRpbHMnO1xuaW1wb3J0IHsgU3BlYWtlclNob3djYXNlIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9TcGVha2VyU2hvd2Nhc2UnO1xuaW1wb3J0IFNoYXJlUHJlc2VudGF0aW9uTW9kYWwgZnJvbSAnLi9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9TaGFyZVByZXNlbnRhdGlvbk1vZGFsJztcbmltcG9ydCB7IGlzUHJldmlldyB9IGZyb20gJy4vZmV0Y2gtdXRpbHMnO1xuaW1wb3J0IHsgaW5pdEFkbWluTWVzc2FnZUJ1cywgZ2V0QWRtaW5NZXNzYWdlQnVzIH0gZnJvbSAnLi9hZG1pbi1tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHtcbiAgc2V0QWN0aXZlVGFiLFxuICB0b2dnbGVQYW5lbCxcbiAgc2hvd1ByZXNlbnRhdGlvbixcbiAgZGlzbWlzc1ByZXNlbnRhdGlvbixcbiAgc2V0QWRtaW5Ub29sa2l0VWlFbnRpdHksXG59IGZyb20gJy4vYWN0aW9ucyc7XG5cbi8vIE1vYmlsZSBzY2FsaW5nOiBzaHJpbmsgdGhlIHZpcnR1YWwgY2FudmFzIG9uXG4vLyBtb2JpbGUgc28gdGhlIFNESydzIGdsb2JhbCBVSSBzY2FsZSBmYWN0b3Ig4oCUIG1pbihzY3JlZW4vdmlydHVhbCksIHNlZVxuLy8gQGRjbC9yZWFjdC1lY3MgZ2V0VWlTY2FsZUZhY3RvciDigJQgbXVsdGlwbGllcyBFVkVSWVRISU5HIChnZW9tZXRyeSBhbmRcbi8vIGZvbnRTaXplKSB1bmlmb3JtbHkgYnkgTU9CSUxFX1VJX1NDQUxFLiBXZSBhdXRob3IgYSBzaW5nbGUgYmFzZSBsYXlvdXQgYW5kXG4vLyBtb2JpbGUgZ2V0cyB0aGUgem9vbSBmb3IgZnJlZSwgaW5jbHVkaW5nIGV2ZXJ5IGNoaWxkIGNvbXBvbmVudCdzIHRleHQuXG5jb25zdCBNT0JJTEVfVUlfU0NBTEUgPSAyO1xuY29uc3QgQkFTRV9WSVJUVUFMX1VJX1NJWkUgPSB7IHZpcnR1YWxXaWR0aDogMTkyMCwgdmlydHVhbEhlaWdodDogMTA4MCB9O1xuXG5mdW5jdGlvbiBnZXRWaXJ0dWFsVWlTaXplKCkge1xuICByZXR1cm4gZGV0ZWN0SXNNb2JpbGUoKVxuICAgID8ge1xuICAgICAgICB2aXJ0dWFsV2lkdGg6IEJBU0VfVklSVFVBTF9VSV9TSVpFLnZpcnR1YWxXaWR0aCAvIE1PQklMRV9VSV9TQ0FMRSxcbiAgICAgICAgdmlydHVhbEhlaWdodDogQkFTRV9WSVJUVUFMX1VJX1NJWkUudmlydHVhbEhlaWdodCAvIE1PQklMRV9VSV9TQ0FMRSxcbiAgICAgIH1cbiAgICA6IEJBU0VfVklSVFVBTF9VSV9TSVpFO1xufVxuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW107XG5sZXQgc2NlbmVCYW5zQ2FjaGU6IFNjZW5lQmFuVXNlcltdID0gW107XG5cbmNvbnN0IEFETUlOX0lDT05TID0ge1xuICBnZXQgQlROX1ZJREVPX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtc21hcnQtaXRlbS1jb250cm9sLWJ1dHRvbi5wbmdgO1xuICB9LFxuICBnZXQgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0woKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYDtcbiAgfSxcbiAgZ2V0IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQoKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvYmFja2dyb3VuZHMvYWRtaW4tdG9vbC1iYWNrZ3JvdW5kLnBuZ2A7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KTtcblxuLy8gVGhlIGVkaXRvciBzdGFydHMgdXNpbmcgZW50aXRpZXMgZnJvbSBbODAwMV0uXG5jb25zdCBBRE1JTl9UT09MU19FTlRJVFkgPSA4MDAwIGFzIEVudGl0eTtcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF07XG59XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgZXJyb3IgfSkpO1xuICAgIHNjZW5lQWRtaW5zQ2FjaGUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgc2NlbmVBZG1pbnNDYWNoZSA9IChyZXNwb25zZSA/PyBbXSlcbiAgICAubWFwKCQgPT4gKHtcbiAgICAgIG5hbWU6ICQubmFtZSxcbiAgICAgIGFkZHJlc3M6ICQuYWRtaW4sXG4gICAgICByb2xlOiAnYWRtaW4nIGFzIGNvbnN0LFxuICAgICAgdmVyaWZpZWQ6ICEkLm5hbWUuaW5jbHVkZXMoJyMnKSxcbiAgICAgIGNhbkJlUmVtb3ZlZDogISEkLmNhbkJlUmVtb3ZlZCxcbiAgICB9KSlcbiAgICAuc29ydChhID0+IChhLmNhbkJlUmVtb3ZlZCA/IDEgOiAtMSkpO1xuICBpZiAoYWRtaW5EYXRhSW5pdGlhbGl6ZWQpIHtcbiAgICBnZXRBZG1pbk1lc3NhZ2VCdXMoKS51cGRhdGVBZG1pbkxpc3Qoc2NlbmVBZG1pbnNDYWNoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kU3luY1NjZW5lQWRtaW5zKCkge1xuICBhd2FpdCBmZXRjaFNjZW5lQWRtaW5zKCk7XG4gIGlmIChhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGdldEFkbWluTWVzc2FnZUJ1cygpLmVtaXRTeW5jQWRtaW5zKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoU2NlbmVCYW5zKCkge1xuICBjb25zdCBbZXJyb3IsIHJlc3BvbnNlXSA9IGF3YWl0IGdldFNjZW5lQmFucygpO1xuXG4gIGlmIChlcnJvcikge1xuICAgIHNjZW5lQmFuc0NhY2hlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NlbmVCYW5zQ2FjaGUgPSByZXNwb25zZT8ucmVzdWx0cyA/PyBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2NlbmVCYW5zQ2FjaGUoKSB7XG4gIHNjZW5lQmFuc0NhY2hlID0gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcyA/PyBbXSk7XG59XG5cbmZ1bmN0aW9uIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIFRleHRBbm5vdW5jZW1lbnRzLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHRleHQ6ICcnLFxuICAgIGF1dGhvcjogJycsXG4gICAgaWQ6ICcnLFxuICB9KTtcbn1cblxuLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBVSSByZW5kZXJpbmdcbmxldCBhZG1pbkRhdGFJbml0aWFsaXplZCA9IGZhbHNlO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBZG1pbkRhdGEoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgaWYgKCFhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzZXRBZG1pblRvb2xraXRVaUVudGl0eShnZXRBZG1pblRvb2xraXRFbnRpdHkoZW5naW5lKSA/PyBlbmdpbmUuYWRkRW50aXR5KCkpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBUZXh0QW5ub3VuY2VtZW50cyBzeW5jIGNvbXBvbmVudFxuICAgIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmUpO1xuXG4gICAgLy8gLy8gSW5pdGlhbGl6ZSBSZXdhcmRzIHN5bmNcbiAgICAvLyBpbml0UmV3YXJkc1N5bmMoZW5naW5lLCBzZGtIZWxwZXJzKVxuXG4gICAgaWYgKCFWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpKSB7XG4gICAgICBWaWRlb0NvbnRyb2xTdGF0ZS5jcmVhdGUoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgIH1cblxuICAgIHNka0hlbHBlcnM/LnN5bmNFbnRpdHk/LihcbiAgICAgIHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LFxuICAgICAgW1ZpZGVvQ29udHJvbFN0YXRlLmNvbXBvbmVudElkXSxcbiAgICAgIEFETUlOX1RPT0xTX0VOVElUWSxcbiAgICApO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzY2VuZSBkYXRhXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW2ZldGNoU2NlbmVBZG1pbnMoKSwgZmV0Y2hTY2VuZUJhbnMoKV0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhZG1pbiBtZXNzYWdlIGJ1cyB3aXRoIHNlbmRlciB2YWxpZGF0aW9uXG4gICAgaW5pdEFkbWluTWVzc2FnZUJ1cyhcbiAgICAgIGVuZ2luZSxcbiAgICAgIHNjZW5lQWRtaW5zQ2FjaGUsXG4gICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgIHBsYXllcnNIZWxwZXIsXG4gICAgICBmZXRjaFNjZW5lQWRtaW5zLFxuICAgICk7XG5cbiAgICBhZG1pbkRhdGFJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZUFkbWluRGF0YSAtIGluaXRpYWxpemVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluVG9vbGtpdFVJKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHJlYWN0QmFzZWRVaVN5c3RlbTogUmVhY3RCYXNlZFVpU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICAvLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIHNldHRpbmcgdXAgdGhlIFVJXG4gIGluaXRpYWxpemVBZG1pbkRhdGEoZW5naW5lLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlQWRtaW5Ub29sa2l0VUkgLSBpbml0aWFsaXplZCcpO1xuICAgIHJlYWN0QmFzZWRVaVN5c3RlbS5zZXRVaVJlbmRlcmVyKFxuICAgICAgKCkgPT4gdWlDb21wb25lbnQoZW5naW5lLCBwb2ludGVyRXZlbnRzU3lzdGVtLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKSxcbiAgICAgIGdldFZpcnR1YWxVaVNpemUoKSxcbiAgICApO1xuXG4gICAgLy8gQmFja2dyb3VuZCBzZXJ2aWNlOiBhdXRvLW9wZW4gdGhlIHBhbmVsIHRvIHRoZSBEQ0wgQ2FzdCB0YWIgd2hlbiBhXG4gICAgLy8gcHJlc2VudGF0aW9uIGdvZXMgbGl2ZSwgcmVnYXJkbGVzcyBvZiB3aGljaCB0YWIgKGlmIGFueSkgdGhlIGFkbWluIGlzIG9uLlxuICAgIHN0YXJ0UHJlc2VudGF0aW9uRGV0ZWN0aW9uKFxuICAgICAgZW5naW5lLFxuICAgICAgKCkgPT4gISFpc0FsbG93ZWRBZG1pbihlbmdpbmUsIGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpLCBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKSksXG4gICAgICAoKSA9PiBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKT8udXNlcklkLFxuICAgICAgKCkgPT4gc2hvd1ByZXNlbnRhdGlvbihmaW5kQWN0aXZlQ2FzdFNjcmVlbkluZGV4KGVuZ2luZSkpLFxuICAgICAgKCkgPT4gZGlzbWlzc1ByZXNlbnRhdGlvbigpLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWRBZG1pbihcbiAgX2VuZ2luZTogSUVuZ2luZSxcbiAgYWRtaW5Ub29sa2l0RW50aXRpZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50PixcbiAgcGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBpZiAoIXBsYXllcikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHBsYXllckFkZHJlc3MgPSBwbGF5ZXIudXNlcklkLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGlzQWRtaW4gPSBzY2VuZUFkbWluc0NhY2hlLmZpbmQoJCA9PiAkLmFkZHJlc3MgPT09IHBsYXllckFkZHJlc3MpO1xuXG4gIHJldHVybiBpc0FkbWluIHx8IGlzUHJldmlldygpO1xufVxuXG5jb25zdCB1aUNvbXBvbmVudCA9IChcbiAgZW5naW5lOiBJRW5naW5lLFxuICBfcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgX3Nka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSA9PiB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdEVudGl0eSA9IGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpO1xuICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKTtcbiAgY29uc3QgaXNQbGF5ZXJBZG1pbiA9IGlzQWxsb3dlZEFkbWluKGVuZ2luZSwgYWRtaW5Ub29sa2l0RW50aXR5LCBwbGF5ZXIpO1xuICBjb25zdCBpc01vYmlsZSA9IGRldGVjdElzTW9iaWxlKCk7XG5cbiAgLy8gTW9iaWxlIHNhZmUgYXJlYSAoZnJvbSBEZWNlbnRyYWxhbmQgQnVpbGRpbmctZm9yLU1vYmlsZSBndWlkZSk6XG4gIC8vICAgUkVEICh1bnNhZmUpIHpvbmVzOlxuICAvLyAgIC0gTGVmdCAyNSUgIChmdWxsIGhlaWdodCkgIOKGkiBDaGF0LCBTZWFyY2gsIFByb2ZpbGUsIEpveXN0aWNrLCBFbW90ZXNcbiAgLy8gICAtIFRvcC1yaWdodCAgMjUlIMOXIDIzJSAgICDihpIgUHJvZmlsZSBhY2Nlc3MsIGNhbWVyYSBjb250cm9sbGVyc1xuICAvLyAgIC0gQm90dG9tLXJpZ2h0IDI1JSDDlyA1NSUgIOKGkiBJbnRlcmFjdGlvbiBidXR0b25zXG4gIC8vICAgR1JFRU4gKHNhZmUpIHpvbmUgPSBDRU5URVIgb2Ygc2NyZWVuXG5cbiAgLy8gRGVza3RvcDogcm93IGxheW91dCwgYW5jaG9yZWQgdG9wLXJpZ2h0ICh1bmNoYW5nZWQgZnJvbSBvcmlnaW5hbCkuXG4gIC8vIE1vYmlsZTogcm93IGxheW91dCwgYW5jaG9yZWQgdG9wLWxlZnQgaW5zaWRlIHRoZSBzYWZlIHpvbmUuXG4gIGNvbnN0IG91dGVyUG9zaXRpb24gPSBpc01vYmlsZSA/IHsgdG9wOiAxNiwgbGVmdDogMzAwIH0gOiB7IHRvcDogMTIwLCByaWdodDogMTQgfTtcbiAgY29uc3QgaW5uZXJQb3NpdGlvbiA9IGlzTW9iaWxlID8geyBsZWZ0OiA4LCB0b3A6IDIgfSA6IHsgcmlnaHQ6IDggfTtcbiAgY29uc3QgdG9nZ2xlQnRuU2l6ZSA9IGlzTW9iaWxlID8gNTQgOiA0MjtcblxuICByZXR1cm4gW1xuICAgIDxVaUVudGl0eVxuICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2lzUGxheWVyQWRtaW4gPyAoXG4gICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBwb3NpdGlvblR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBpc01vYmlsZSA/ICdyb3ctcmV2ZXJzZScgOiAncm93JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBvdXRlclBvc2l0aW9uLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IHN0YXRlLnBhbmVsT3BlbiA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICAgICAgcG9pbnRlckZpbHRlcjogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgIG1hcmdpbjogaW5uZXJQb3NpdGlvbixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICAgICAgbGVmdDogMTIsXG4gICAgICAgICAgICAgICAgICByaWdodDogMTIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7IGNvbG9yOiBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJBRE1JTiBUT09MU1wiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezIwfVxuICAgICAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuY3JlYXRlKDE2MCwgMTU1LCAxNjgsIDEpfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfbW9kZXJhdGlvbl9jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MID8gJ3ByaW1hcnknIDogJ3RleHQnfVxuICAgICAgICAgICAgICAgIGljb249e2dldEJ0bk1vZGVyYXRpb25Db250cm9sKCl9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub29sa2l0RW50aXR5Lm1vZGVyYXRpb25Db250cm9sLmlzRW5hYmxlZCAmJiAhaXNQcmV2aWV3KClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yNC5CbGFjaygpXG4gICAgICAgICAgICAgICAgICAgICAgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25UcmFuc2Zvcm09e3sgaGVpZ2h0OiAnMTAwJScsIHdpZHRoOiAnMTAwJScgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gc2V0QWN0aXZlVGFiKFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF92aWRlb19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PXtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICBpY29uPXtBRE1JTl9JQ09OUy5CVE5fVklERU9fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gQ29sb3I0LkJsYWNrKCkgOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0eS52aWRlb0NvbnRyb2wuaXNFbmFibGVkID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gc2V0QWN0aXZlVGFiKFRhYlR5cGUuVklERU9fQ09OVFJPTCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfc21hcnRfaXRlbXNfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1NNQVJUX0lURU1fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkuc21hcnRJdGVtc0NvbnRyb2wuaXNFbmFibGVkID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gc2V0QWN0aXZlVGFiKFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPyAncHJpbWFyeScgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgaWNvbj17QURNSU5fSUNPTlMuQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgaWNvbkJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5LnRleHRBbm5vdW5jZW1lbnRDb250cm9sLmlzRW5hYmxlZCA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHNldEFjdGl2ZVRhYihUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgLy8gTW9iaWxlOiBjYXAgdGhlIHRhYiBjb250ZW50IHRvIHRoZSB2aWV3cG9ydCBhbmQgc2Nyb2xsIHRoZVxuICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyB0YWxsIHRhYnMgKGUuZy4gcGVybWlzc2lvbnMpIHN0YXkgZnVsbHkgcmVhY2hhYmxlLlxuICAgICAgICAgICAgICAgIC8vIFRoZSBoZWFkZXIgYWJvdmUgc3RheXMgZml4ZWQ7IGRlc2t0b3AgaXMgbGVmdCB1bnRvdWNoZWQuXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBpc01vYmlsZSA/ICc4NXZoJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaXNNb2JpbGUgPyAnc2Nyb2xsJyA6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2xcbiAgICAgICAgICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgICAgcGxheWVyPXtwbGF5ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgICA8VmlkZW9Db250cm9sXG4gICAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICAgIHBsYXllckFkZHJlc3M9e3BsYXllcj8udXNlcklkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgICAgPFNtYXJ0SXRlbXNDb250cm9sXG4gICAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wgJiYgKFxuICAgICAgICAgICAgICAgIDxNb2RlcmF0aW9uQ29udHJvbFxuICAgICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgICAgIHNjZW5lQWRtaW5zPXtzY2VuZUFkbWluc0NhY2hlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGhlaWdodDogdG9nZ2xlQnRuU2l6ZSxcbiAgICAgICAgICAgICAgd2lkdGg6IHRvZ2dsZUJ0blNpemUsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICBzcmM6IEFETUlOX0lDT05TLkJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RENMQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRvZ2dsZUJ0blNpemUgLSAyLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0b2dnbGVCdG5TaXplIC0gMixcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICAgICAgc3JjOiBBRE1JTl9JQ09OUy5CVE5fQURNSU5fVE9PTEtJVF9DT05UUk9MLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAxLCAxLCAxKSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHRvZ2dsZVBhbmVsKCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxUZXh0QW5ub3VuY2VtZW50c1xuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgLz5cbiAgICA8L1VpRW50aXR5PixcbiAgICBzdGF0ZS5tb2RlcmF0aW9uQ29udHJvbC5zaG93TW9kYWxBZG1pbkxpc3QgJiYgKFxuICAgICAgPE1vZGFsVXNlckxpc3RcbiAgICAgICAgdXNlcnM9e3NjZW5lQWRtaW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICB0eXBlPXtVc2VyTGlzdFR5cGUuQURNSU59XG4gICAgICAvPlxuICAgICksXG4gICAgc3RhdGUubW9kZXJhdGlvbkNvbnRyb2wuc2hvd01vZGFsQmFuTGlzdCAmJiAoXG4gICAgICA8TW9kYWxVc2VyTGlzdFxuICAgICAgICB1c2Vycz17c2NlbmVCYW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICB0eXBlPXtVc2VyTGlzdFR5cGUuQkFOfVxuICAgICAgLz5cbiAgICApLFxuICAgIHN0YXRlLnZpZGVvQ29udHJvbC5zaG93Y2FzZS5zaG93ICYmXG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2hvd2Nhc2Uub25TZWxlY3RUcmFjayAmJlxuICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNob3djYXNlLm9uU2V0RGVmYXVsdCAmJlxuICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNob3djYXNlLm9uQ2xvc2UgJiYgKFxuICAgICAgICA8U3BlYWtlclNob3djYXNlXG4gICAgICAgICAgcGFydGljaXBhbnRzPXtzdGF0ZS52aWRlb0NvbnRyb2wucGFydGljaXBhbnRzfVxuICAgICAgICAgIGFjdGl2ZVRyYWNrU2lkPXtzdGF0ZS52aWRlb0NvbnRyb2wuc2hvd2Nhc2UuYWN0aXZlVHJhY2tTaWR9XG4gICAgICAgICAgb25TZWxlY3RUcmFjaz17c3RhdGUudmlkZW9Db250cm9sLnNob3djYXNlLm9uU2VsZWN0VHJhY2t9XG4gICAgICAgICAgb25TZXREZWZhdWx0PXtzdGF0ZS52aWRlb0NvbnRyb2wuc2hvd2Nhc2Uub25TZXREZWZhdWx0fVxuICAgICAgICAgIG9uQ2xvc2U9e3N0YXRlLnZpZGVvQ29udHJvbC5zaG93Y2FzZS5vbkNsb3NlfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2hhcmVQcmVzZW50YXRpb24uc2hvdyAmJiBzdGF0ZS52aWRlb0NvbnRyb2wuc2hhcmVQcmVzZW50YXRpb24ub25DbG9zZSAmJiAoXG4gICAgICA8U2hhcmVQcmVzZW50YXRpb25Nb2RhbFxuICAgICAgICBvbkNsb3NlPXtzdGF0ZS52aWRlb0NvbnRyb2wuc2hhcmVQcmVzZW50YXRpb24ub25DbG9zZX1cbiAgICAgICAgc3RyZWFtaW5nS2V5PXtzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdD8uc3RyZWFtaW5nS2V5ID8/ICcnfVxuICAgICAgLz5cbiAgICApLFxuICBdO1xufTtcbiJdfQ==
|