@nlabs/metropolisjs 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +128 -42
- package/docs/ACTIONS.md +116 -3
- package/docs/assets/metropolisjs-logo.png +0 -0
- package/docs/assets/metropolisjs-mark.svg +7 -0
- package/examples/crud-usage.tsx +1 -1
- package/examples/factory-pattern-usage.ts +85 -78
- package/examples/signup-error-handling.ts +25 -24
- package/factoryPatternGuide.md +90 -174
- package/lib/actions/awsRumActions/awsRumActions.d.ts +8 -1
- package/lib/actions/awsRumActions/awsRumActions.js +9 -5
- package/lib/actions/translationActions/translationActions.d.ts +2 -11
- package/lib/actions/translationActions/translationActions.js +2 -2
- package/lib/actions/userActions/userActions.d.ts +7 -5
- package/lib/actions/userActions/userActions.js +111 -64
- package/lib/index.d.ts +4 -9
- package/lib/index.js +19 -10
- package/lib/stores/tagStore.d.ts +1 -0
- package/lib/stores/tagStore.js +1 -1
- package/lib/stores/userStore.d.ts +1 -0
- package/lib/stores/userStore.js +2 -1
- package/lib/utils/actionFactory.d.ts +52 -6
- package/lib/utils/actionFactory.js +8 -6
- package/lib/utils/api.d.ts +7 -0
- package/lib/utils/api.js +18 -1
- package/lib/utils/baseActionFactory.d.ts +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/session.d.ts +1 -1
- package/package.json +16 -14
- package/tsconfig.examples.json +23 -0
package/lib/utils/api.d.ts
CHANGED
|
@@ -53,5 +53,12 @@ export declare const publicQuery: <T>(flux: FluxFramework, name: string, dataTyp
|
|
|
53
53
|
export declare const publicMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
|
|
54
54
|
export declare const rumMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
|
|
55
55
|
export declare const rumRequest: <T>(flux: FluxFramework, batch: Record<string, unknown>, options?: RestApiOptions) => Promise<T>;
|
|
56
|
+
/**
|
|
57
|
+
* Attempts terminal RUM delivery with the Beacon API.
|
|
58
|
+
*
|
|
59
|
+
* Returns false when beacon delivery is unavailable or declined so callers
|
|
60
|
+
* can fall back to the standard request transport.
|
|
61
|
+
*/
|
|
62
|
+
export declare const rumBeaconRequest: (flux: FluxFramework, batch: Record<string, unknown>) => boolean;
|
|
56
63
|
export declare const uploadImage: (flux: FluxFramework, image: FormData | Record<string, unknown>, options?: HunterOptionsType) => Promise<ApiResultsType>;
|
|
57
64
|
export declare const refreshSession: (flux: FluxFramework, token?: string, expires?: number) => Promise<FluxAction | null>;
|
package/lib/utils/api.js
CHANGED
|
@@ -256,6 +256,23 @@ export const rumRequest = (flux, batch, options = {})=>{
|
|
|
256
256
|
authenticate: false
|
|
257
257
|
});
|
|
258
258
|
};
|
|
259
|
+
/**
|
|
260
|
+
* Attempts terminal RUM delivery with the Beacon API.
|
|
261
|
+
*
|
|
262
|
+
* Returns false when beacon delivery is unavailable or declined so callers
|
|
263
|
+
* can fall back to the standard request transport.
|
|
264
|
+
*/ export const rumBeaconRequest = (flux, batch)=>{
|
|
265
|
+
const config = getConfigFromFlux(flux);
|
|
266
|
+
const rumUrl = config.app?.api?.endpoints?.rum || config.app?.api?.rum || '';
|
|
267
|
+
if (!rumUrl || typeof globalThis.navigator?.sendBeacon !== 'function') {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
return globalThis.navigator.sendBeacon(rumUrl, JSON.stringify(batch));
|
|
272
|
+
} catch {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
};
|
|
259
276
|
export const uploadImage = (flux, image, options = {})=>{
|
|
260
277
|
const config = getConfigFromFlux(flux);
|
|
261
278
|
const uploadImageUrl = config.app?.api?.uploadImage || '';
|
|
@@ -362,4 +379,4 @@ export const refreshSession = async (flux, token, expires)=>{
|
|
|
362
379
|
}
|
|
363
380
|
};
|
|
364
381
|
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGFqYXgsIGRlbCwgZ2V0LCBncmFwaHFsUXVlcnksIHBvc3QsIHB1dH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdE1ldGhvZCA9ICdERUxFVEUnIHwgJ0dFVCcgfCAnUEFUQ0gnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RBcGlPcHRpb25zIGV4dGVuZHMgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24gPVxuICAnYXBwcycgfFxuICAnY29ubmVjdGlvbnMnIHxcbiAgJ2NvbnRlbnRzJyB8XG4gICdjb252ZXJzYXRpb25zJyB8XG4gICdjcm0nIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdydW0nIHxcbiAgJ3N1YnNjcmlwdGlvbnMnIHxcbiAgJ3RhZ3MnIHxcbiAgJ3RyYW5zbGF0aW9ucycgfFxuICAndXNlcnMnIHxcbiAgJ3ZpZGVvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVlcnlWYXJpYWJsZVR5cGUge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVzIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogQXBpUXVlcnlWYXJpYWJsZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5PzogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlcXVlc3Q/OiB7XG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1zPzogdW5rbm93bjtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgcmVzcG9uc2VNZXRob2Q6IChyZXN1bHRzOiBBcGlSZXN1bHRzVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHlwZSB7XG4gIHJlYWRvbmx5IGV4cGlyZXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzc3VlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyA9IDU7XG5jb25zdCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMgPSAxNTtcblxuY29uc3QgZ2V0TWludXRlc1VudGlsID0gKGV4cGlyZXNBdDogbnVtYmVyKTogbnVtYmVyID0+XG4gIE1hdGgucm91bmQoKGV4cGlyZXNBdCAtIERhdGUubm93KCkpIC8gKDEwMDAgKiA2MCkpO1xuXG5jb25zdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yayk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gIGF3YWl0IGZsdXguY2xlYXJBcHBEYXRhKCk7XG4gIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG59O1xuXG5jb25zdCByZXNvbHZlQXV0aFRva2VuID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gIGNvbnN0IHtcbiAgICBleHBpcmVzOiBhdXRoRXhwaXJlcyA9IDAsXG4gICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICB0b2tlbjogaHlkcmF0ZWRUb2tlblxuICB9OiBTZXNzaW9uVHlwZSA9IGh5ZHJhdGVkU2Vzc2lvbiB8fCB7fTtcbiAgbGV0IHRva2VuID0gaHlkcmF0ZWRUb2tlbiB8fCBzdGF0ZVNlc3Npb24udG9rZW47XG5cbiAgaWYoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3Nlc3Npb24nIH1dLCBuZXcgRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICB0aHJvdyBuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2V4cGlyZWRfc2Vzc2lvbicgfV0sIG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJykpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IG1pbnV0ZXNVbnRpbEV4cGlyeSA9IGdldE1pbnV0ZXNVbnRpbChOdW1iZXIoYXV0aEV4cGlyZXMgfHwgMCkpO1xuICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgY29uc3QgcmVmcmVzaFdpbmRvd01pbnV0ZXMgPSBnZXRSZWZyZXNoV2luZG93TWludXRlcyhcbiAgICBzZXNzaW9uTGlmZXRpbWVNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyxcbiAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICk7XG4gIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgTnVtYmVyKGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICk7XG5cbiAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uOiB1cGRhdGVkU2Vzc2lvbiA9IHt9XG4gICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgIGNvbnN0IHt0b2tlbjogbmV3VG9rZW59OiBTZXNzaW9uVHlwZSA9ICh1cGRhdGVkU2Vzc2lvbiB8fCB7fSk7XG5cbiAgICBpZighbmV3VG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF9zZXNzaW9uJyB9XSwgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKSk7XG4gICAgfVxuXG4gICAgdG9rZW4gPSBuZXdUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaHFsID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB1cmw6IHN0cmluZyxcbiAgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnNcbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7b25TdWNjZXNzfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmV0cnk6IFJldHJ5VHlwZSA9IHtxdWVyeSwgcmVzcG9uc2VNZXRob2Q6IG9uU3VjY2VzcyB8fCAoKCkgPT4ge30pfTtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogc3RyaW5nID0gZmx1eC5nZXRTdGF0ZSgnYXBwLm5ldHdvcmtUeXBlJykgYXMgc3RyaW5nO1xuXG4gICAgaWYobmV0d29ya1R5cGUgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgfVxuXG4gICAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZihhdXRoZW50aWNhdGUpIHtcbiAgICAgIHRva2VuID0gYXdhaXQgcmVzb2x2ZUF1dGhUb2tlbihmbHV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhxbFF1ZXJ5KHVybCwgcXVlcnksIHt0b2tlbjogdG9rZW4gfHwgJyd9KVxuICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdHMpID0+IHtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19TVUNDRVNTfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IChvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhKSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3Qge2Vycm9ycyA9IFtdfSA9IGVycm9yO1xuXG4gICAgICAgIGlmKG9uU3VjY2VzcyAmJiBlcnJvcnMuaW5jbHVkZXMoJ25ldHdvcmtfZXJyb3InKSkge1xuICAgICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSkge1xuICAgICAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgPyBlcnJvci5lcnJvcnMgOiBbXTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSB8fCBtZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBtZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlc3RFbmRwb2ludCA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFyZ2V0RW5kcG9pbnQgPSBTdHJpbmcoZW5kcG9pbnQgfHwgJycpLnRyaW0oKTtcblxuICBpZihpc0VtcHR5KHRhcmdldEVuZHBvaW50KSkge1xuICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF91cmwnIH1dLCBuZXcgRXJyb3IoJ3Jlc3RfZW5kcG9pbnRfcmVxdWlyZWQnKSk7XG4gIH1cblxuICBpZigvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRhcmdldEVuZHBvaW50KSB8fCB0YXJnZXRFbmRwb2ludC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gdGFyZ2V0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgY29uZmlndXJlZEVuZHBvaW50ID0gY29uZmlnLmFwcD8uYXBpPy5lbmRwb2ludHM/Llt0YXJnZXRFbmRwb2ludF0gfHwgJyc7XG5cbiAgaWYoaXNFbXB0eShjb25maWd1cmVkRW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3VybCcgfV0sIG5ldyBFcnJvcihgcmVzdF9lbmRwb2ludF9ub3RfY29uZmlndXJlZDoke3RhcmdldEVuZHBvaW50fWApKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWd1cmVkRW5kcG9pbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdFJlcXVlc3QgPSBhc3luYyA8VCA9IEFwaVJlc3VsdHNUeXBlPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgbWV0aG9kOiBSZXN0TWV0aG9kID0gJ0dFVCcsXG4gIHBhcmFtcz86IHVua25vd24sXG4gIG9wdGlvbnM6IFJlc3RBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCB7YXV0aGVudGljYXRlID0gZmFsc2UsIG9uU3VjY2VzcywgLi4uaHVudGVyT3B0aW9uc30gPSBvcHRpb25zO1xuICBjb25zdCB1cmwgPSByZXNvbHZlUmVzdEVuZHBvaW50KGZsdXgsIGVuZHBvaW50KTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IFN0cmluZyhtZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHJldHJ5OiBSZXRyeVR5cGUgPSB7XG4gICAgcmVxdWVzdDoge21ldGhvZDogcmVxdWVzdE1ldGhvZCwgcGFyYW1zLCB1cmx9LFxuICAgIHJlc3BvbnNlTWV0aG9kOiBvblN1Y2Nlc3MgfHwgKCgpID0+IHt9KVxuICB9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbmV0d29ya1R5cGU6IHN0cmluZyA9IGZsdXguZ2V0U3RhdGUoJ2FwcC5uZXR3b3JrVHlwZScpIGFzIHN0cmluZztcblxuICAgIGlmKG5ldHdvcmtUeXBlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtyZXRyeSwgdHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19FUlJPUn0pIGFzIFByb21pc2U8VD47XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhdXRoZW50aWNhdGUgPyBhd2FpdCByZXNvbHZlQXV0aFRva2VuKGZsdXgpIDogaHVudGVyT3B0aW9ucy50b2tlbjtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7XG4gICAgICAuLi5odW50ZXJPcHRpb25zLFxuICAgICAgLi4uKHRva2VuID8ge3Rva2VufSA6IHt9KVxuICAgIH07XG4gICAgbGV0IGRhdGE6IFQ7XG5cbiAgICBzd2l0Y2gocmVxdWVzdE1ldGhvZCkge1xuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGRlbCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnR0VUJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGdldCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUE9TVCc6XG4gICAgICAgIGRhdGEgPSBhd2FpdCBwb3N0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgICBkYXRhID0gYXdhaXQgcHV0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkYXRhID0gYXdhaXQgYWpheCh1cmwsIHJlcXVlc3RNZXRob2QsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX1NVQ0NFU1N9KTtcblxuICAgIHJldHVybiBvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciA/IGVycm9yLmVycm9ycyA6IFtdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpIHx8IG1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IG1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgICByZXR1cm4ge30gYXMgVDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB2YXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzID0ge30sXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW10sXG4gIHR5cGUgPSAncXVlcnknXG4pID0+IHtcbiAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7Li4udmFyaWFibGVzIHx8IHt9fTtcbiAgY29uc3QgdmFyaWFibGVLZXlzID0gT2JqZWN0LmtleXMocXVlcnlWYXJpYWJsZXMpO1xuICBjb25zdCBxdWVyeU5hbWUgPSBuYW1lLnJlcGxhY2UoLyAvZywgJycpO1xuICBsZXQgcXVlcnk6IHN0cmluZztcblxuICBpZih0eXBlID09PSAnbXV0YXRpb24nKSB7XG4gICAgY29uc3QgbXV0YXRpb25OYW1lID0gdXBwZXJGaXJzdChjYW1lbENhc2UoZGF0YVR5cGUpKSArIHVwcGVyRmlyc3QoY2FtZWxDYXNlKHF1ZXJ5TmFtZSkpO1xuICAgIHF1ZXJ5ID0gYCR7dHlwZX0gJHttdXRhdGlvbk5hbWV9JHtcbiAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJCR7a2V5fTogJHtxdWVyeVZhcmlhYmxlc1trZXldLnR5cGV9YCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnXG4gICAgfSB7XG4gICAgICAke2RhdGFUeXBlfSB7XG4gICAgICAgICR7Y2FtZWxDYXNlKHF1ZXJ5TmFtZSl9JHtcbiAgICAgICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAke2tleX06ICQke2tleX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtyZXR1cm5Qcm9wZXJ0aWVzPy5sZW5ndGggPyBgeyR7cmV0dXJuUHJvcGVydGllcy5qb2luKCcsICcpfX1gIDogJyd9XG4gICAgICB9XG4gICAgfWA7XG4gIH0gZWxzZSB7XG4gICAgcXVlcnkgPSBgJHt0eXBlfSAke3F1ZXJ5TmFtZX0ke1xuICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAkJHtrZXl9OiAke3F1ZXJ5VmFyaWFibGVzW2tleV0udHlwZX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgIDogJydcbiAgICB9IHtcbiAgICAgICR7ZGF0YVR5cGV9IHtcbiAgICAgICAgJHtjYW1lbENhc2UocXVlcnlOYW1lKX0ke1xuICAgICAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fTogJCR7a2V5fWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICAke3JldHVyblByb3BlcnRpZXM/Lmxlbmd0aCA/IGB7JHtyZXR1cm5Qcm9wZXJ0aWVzLmpvaW4oJywgJyl9fWAgOiAnJ31cbiAgICAgIH1cbiAgICB9YDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRWYXJpYWJsZXMgPSB2YXJpYWJsZUtleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigocXVlcnlEYXRhLCBrZXkpID0+IHtcbiAgICBxdWVyeURhdGFba2V5XSA9IHF1ZXJ5VmFyaWFibGVzW2tleV0udmFsdWU7XG4gICAgcmV0dXJuIHF1ZXJ5RGF0YTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB7cXVlcnksIHZhcmlhYmxlczogdXBkYXRlZFZhcmlhYmxlc307XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTXV0YXRpb24gPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMgPSB7fSxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10gPSBbXVxuKSA9PiBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgdmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzLCAnbXV0YXRpb24nKTtcblxuZXhwb3J0IGNvbnN0IGFwcFF1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcE11dGF0aW9uID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZU11dGF0aW9uKG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY1F1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBwdWJsaWNVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8ucHVibGljIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBwdWJsaWNVcmwsIGZhbHNlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNNdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcHVibGljVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnB1YmxpYyB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcHVibGljVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcnVtTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHJ1bVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHJ1bVVybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHJ1bVJlcXVlc3QgPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGJhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogUmVzdEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBydW1Vcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8uZW5kcG9pbnRzPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgJyc7XG5cbiAgcmV0dXJuIHJlc3RSZXF1ZXN0PFQ+KGZsdXgsIHJ1bVVybCwgJ1BPU1QnLCBiYXRjaCwgey4uLm9wdGlvbnMsIGF1dGhlbnRpY2F0ZTogZmFsc2V9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGxvYWRJbWFnZSA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgaW1hZ2U6IEZvcm1EYXRhIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdGlvbnM6IEh1bnRlck9wdGlvbnNUeXBlID0ge31cbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHVwbG9hZEltYWdlVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnVwbG9hZEltYWdlIHx8ICcnO1xuICBjb25zdCB0b2tlbiA9IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi50b2tlbicpO1xuXG4gIGlmKGlzRW1wdHkodXBsb2FkSW1hZ2VVcmwpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF91cmwnIH1dLCBuZXcgRXJyb3IoJ3VwbG9hZF9lbmRwb2ludF9ub3RfY29uZmlndXJlZCcpKSk7XG4gIH1cblxuICBpZihpc0VtcHR5KHRva2VuKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2ludmFsaWRfc2Vzc2lvbicgfV0sIG5ldyBFcnJvcignbWlzc2luZ19hdXRoX3Rva2VuJykpKTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcblxuICBpZih0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgIHJldHVybiBmZXRjaCh1cGxvYWRJbWFnZVVybCwge1xuICAgICAgYm9keTogaW1hZ2UsXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlVHlwZS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpXG4gICAgICAgID8gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gICAgICBpZighcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICYmICdlcnJvcicgaW4gZGF0YVxuICAgICAgICAgID8gU3RyaW5nKChkYXRhIGFzIHtlcnJvcj86IHN0cmluZ30pLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAgICAgOiBTdHJpbmcoZGF0YSB8fCByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICd1cGxvYWRfZXJyb3InIH1dLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YSBhcyBBcGlSZXN1bHRzVHlwZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwb3N0KHVwbG9hZEltYWdlVXJsLCBpbWFnZSwge2hlYWRlcnMsIC4uLm9wdGlvbnN9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoU2Vzc2lvbiA9IGFzeW5jIChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgdG9rZW4/OiBzdHJpbmcsXG4gIGV4cGlyZXM/OiBudW1iZXJcbik6IFByb21pc2U8Rmx1eEFjdGlvbiB8IG51bGw+ID0+IHtcbiAgY29uc3QgcmVmcmVzaFRva2VuID0gaXNFbXB0eSh0b2tlbikgPyBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nKSA6IHRva2VuO1xuXG4gIGlmKGlzRW1wdHkocmVmcmVzaFRva2VuKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgdG9rZW5FeHBpcmVzQXQgPSBwYXJzZUp3dEV4cGlyeU1zKFN0cmluZyhyZWZyZXNoVG9rZW4pKTtcblxuICBpZih0b2tlbkV4cGlyZXNBdCA+IDAgJiYgRGF0ZS5ub3coKSA+PSB0b2tlbkV4cGlyZXNBdCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdleHBpcmVkX3Nlc3Npb24nKTtcbiAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX0VSUk9SfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEV4cGlyZXMgPSBNYXRoLm1heChcbiAgICAgIDEsXG4gICAgICBOdW1iZXIoZXhwaXJlcyB8fCBjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUylcbiAgICApO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZXhwaXJlczoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHJlcXVlc3RlZEV4cGlyZXNcbiAgICAgIH0sXG4gICAgICB0b2tlbjoge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiByZWZyZXNoVG9rZW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IGFzeW5jIChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCByYXdTZXNzaW9uRGF0YSA9IChkYXRhIGFzIHt1c2Vycz86IHtyZWZyZXNoU2Vzc2lvbj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fX0pPy51c2Vycz8ucmVmcmVzaFNlc3Npb247XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHJhd1Nlc3Npb25EYXRhICYmIHR5cGVvZiByYXdTZXNzaW9uRGF0YSA9PT0gJ29iamVjdCdcbiAgICAgICAgPyByYXdTZXNzaW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgY3VycmVudFNlc3Npb24gPSAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG1lcmdlZFNlc3Npb24gPSBhd2FpdCBzdG9yZVNlc3Npb24oZmx1eCwgey4uLmN1cnJlbnRTZXNzaW9uLCAuLi5zZXNzaW9uRGF0YX0pO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IG1lcmdlZFNlc3Npb24sIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9TRVNTSU9OX1NVQ0NFU1N9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IHB1YmxpY011dGF0aW9uKGZsdXgsICdyZWZyZXNoU2Vzc2lvbicsICd1c2VycycsIHF1ZXJ5VmFyaWFibGVzLCBbJ2V4cGlyZXMnLCAnaXNzdWVkJywgJ3Rva2VuJ10sIHtcbiAgICAgIG9uU3VjY2Vzc1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfc2Vzc2lvbicgfHwgZXJyb3JNZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgIH1cblxuICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfU0VTU0lPTl9FUlJPUn0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIkFwaUVycm9yIiwiYWpheCIsImRlbCIsImdldCIsImdyYXBocWxRdWVyeSIsInBvc3QiLCJwdXQiLCJjYW1lbENhc2UiLCJpc0VtcHR5IiwidXBwZXJGaXJzdCIsIkFQUF9DT05TVEFOVFMiLCJVU0VSX0NPTlNUQU5UUyIsImdldENvbmZpZ0Zyb21GbHV4IiwiY2xlYXJQZXJzaXN0ZWRTZXNzaW9uIiwiZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlIiwicGFyc2VKd3RFeHBpcnlNcyIsInN0b3JlU2Vzc2lvbiIsIkRFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyIsIkRFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyIsImdldE1pbnV0ZXNVbnRpbCIsImV4cGlyZXNBdCIsIk1hdGgiLCJyb3VuZCIsIkRhdGUiLCJub3ciLCJjbGVhckludmFsaWRTZXNzaW9uU3RhdGUiLCJmbHV4IiwiY2xlYXJBcHBEYXRhIiwiZGlzcGF0Y2giLCJzZXNzaW9uIiwidHlwZSIsIlNJR05fT1VUX1NVQ0NFU1MiLCJyZXNvbHZlQXV0aFRva2VuIiwic3RhdGVTZXNzaW9uIiwiZ2V0U3RhdGUiLCJoeWRyYXRlZFNlc3Npb24iLCJ0b2tlbiIsImV4cGlyZXMiLCJhdXRoRXhwaXJlcyIsImlzc3VlZCIsImF1dGhJc3N1ZWQiLCJoeWRyYXRlZFRva2VuIiwibWVzc2FnZSIsIkVycm9yIiwidG9rZW5FeHBpcmVzQXQiLCJjb25maWciLCJtaW51dGVzVW50aWxFeHBpcnkiLCJOdW1iZXIiLCJzZXNzaW9uTGlmZXRpbWVNaW51dGVzIiwicmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJhcHAiLCJyZWZyZXNoRXhwaXJlc01pbnV0ZXMiLCJtYXgiLCJtYXhNaW51dGVzIiwidXBkYXRlZFNlc3Npb24iLCJyZWZyZXNoU2Vzc2lvbiIsIm5ld1Rva2VuIiwiZ2V0R3JhcGhxbCIsInVybCIsImF1dGhlbnRpY2F0ZSIsInF1ZXJ5Iiwib3B0aW9ucyIsIm9uU3VjY2VzcyIsInJldHJ5IiwicmVzcG9uc2VNZXRob2QiLCJuZXR3b3JrVHlwZSIsIkFQSV9ORVRXT1JLX0VSUk9SIiwidGhlbiIsInJlc3VsdHMiLCJBUElfTkVUV09SS19TVUNDRVNTIiwiZGF0YSIsImNhdGNoIiwiZXJyb3IiLCJlcnJvcnMiLCJpbmNsdWRlcyIsIlByb21pc2UiLCJyZWplY3QiLCJyZXNvbHZlIiwicmVzb2x2ZVJlc3RFbmRwb2ludCIsImVuZHBvaW50IiwidGFyZ2V0RW5kcG9pbnQiLCJTdHJpbmciLCJ0cmltIiwidGVzdCIsInN0YXJ0c1dpdGgiLCJjb25maWd1cmVkRW5kcG9pbnQiLCJhcGkiLCJlbmRwb2ludHMiLCJyZXN0UmVxdWVzdCIsIm1ldGhvZCIsInBhcmFtcyIsImh1bnRlck9wdGlvbnMiLCJyZXF1ZXN0TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0IiwicmVxdWVzdE9wdGlvbnMiLCJjcmVhdGVRdWVyeSIsIm5hbWUiLCJkYXRhVHlwZSIsInZhcmlhYmxlcyIsInJldHVyblByb3BlcnRpZXMiLCJxdWVyeVZhcmlhYmxlcyIsInZhcmlhYmxlS2V5cyIsIk9iamVjdCIsImtleXMiLCJxdWVyeU5hbWUiLCJyZXBsYWNlIiwibXV0YXRpb25OYW1lIiwibGVuZ3RoIiwibWFwIiwia2V5Iiwiam9pbiIsInVwZGF0ZWRWYXJpYWJsZXMiLCJyZWR1Y2UiLCJxdWVyeURhdGEiLCJ2YWx1ZSIsImNyZWF0ZU11dGF0aW9uIiwiYXBwUXVlcnkiLCJhcHBVcmwiLCJhcHBNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicHVibGljVXJsIiwicHVibGljIiwicHVibGljTXV0YXRpb24iLCJydW1NdXRhdGlvbiIsInJ1bVVybCIsInJ1bSIsInJ1bVJlcXVlc3QiLCJiYXRjaCIsInVwbG9hZEltYWdlIiwiaW1hZ2UiLCJ1cGxvYWRJbWFnZVVybCIsImhlYWRlcnMiLCJIZWFkZXJzIiwic2V0IiwiRm9ybURhdGEiLCJmZXRjaCIsImJvZHkiLCJyZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsImpzb24iLCJ0ZXh0Iiwib2siLCJzdGF0dXNUZXh0IiwicmVmcmVzaFRva2VuIiwiR0VUX1NFU1NJT05fRVJST1IiLCJyZXF1ZXN0ZWRFeHBpcmVzIiwicmF3U2Vzc2lvbkRhdGEiLCJ1c2VycyIsInNlc3Npb25EYXRhIiwiY3VycmVudFNlc3Npb24iLCJtZXJnZWRTZXNzaW9uIiwiVVBEQVRFX1NFU1NJT05fU1VDQ0VTUyIsImVycm9yTWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxZQUFZLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFPLG9CQUFvQjtBQUNwRixTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxRQUFPLGVBQWU7QUFFNUQsU0FBUUMsYUFBYSxRQUFPLHdCQUF3QjtBQUNwRCxTQUFRQyxjQUFjLFFBQU8seUJBQXlCO0FBQ3RELFNBQVFDLGlCQUFpQixRQUFPLG1CQUFtQjtBQUNuRCxTQUFRQyxxQkFBcUIsRUFBRUMsdUJBQXVCLEVBQUVDLHlCQUF5QixFQUFFQyxnQkFBZ0IsRUFBRUMsWUFBWSxRQUFPLGVBQWU7QUF5RXZJLE1BQU1DLGlDQUFpQztBQUN2QyxNQUFNQyw4QkFB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
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGFqYXgsIGRlbCwgZ2V0LCBncmFwaHFsUXVlcnksIHBvc3QsIHB1dH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdE1ldGhvZCA9ICdERUxFVEUnIHwgJ0dFVCcgfCAnUEFUQ0gnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RBcGlPcHRpb25zIGV4dGVuZHMgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24gPVxuICAnYXBwcycgfFxuICAnY29ubmVjdGlvbnMnIHxcbiAgJ2NvbnRlbnRzJyB8XG4gICdjb252ZXJzYXRpb25zJyB8XG4gICdjcm0nIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdydW0nIHxcbiAgJ3N1YnNjcmlwdGlvbnMnIHxcbiAgJ3RhZ3MnIHxcbiAgJ3RyYW5zbGF0aW9ucycgfFxuICAndXNlcnMnIHxcbiAgJ3ZpZGVvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVlcnlWYXJpYWJsZVR5cGUge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVzIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogQXBpUXVlcnlWYXJpYWJsZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5PzogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlcXVlc3Q/OiB7XG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1zPzogdW5rbm93bjtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgcmVzcG9uc2VNZXRob2Q6IChyZXN1bHRzOiBBcGlSZXN1bHRzVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHlwZSB7XG4gIHJlYWRvbmx5IGV4cGlyZXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzc3VlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyA9IDU7XG5jb25zdCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMgPSAxNTtcblxuY29uc3QgZ2V0TWludXRlc1VudGlsID0gKGV4cGlyZXNBdDogbnVtYmVyKTogbnVtYmVyID0+XG4gIE1hdGgucm91bmQoKGV4cGlyZXNBdCAtIERhdGUubm93KCkpIC8gKDEwMDAgKiA2MCkpO1xuXG5jb25zdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yayk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gIGF3YWl0IGZsdXguY2xlYXJBcHBEYXRhKCk7XG4gIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG59O1xuXG5jb25zdCByZXNvbHZlQXV0aFRva2VuID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gIGNvbnN0IHtcbiAgICBleHBpcmVzOiBhdXRoRXhwaXJlcyA9IDAsXG4gICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICB0b2tlbjogaHlkcmF0ZWRUb2tlblxuICB9OiBTZXNzaW9uVHlwZSA9IGh5ZHJhdGVkU2Vzc2lvbiB8fCB7fTtcbiAgbGV0IHRva2VuID0gaHlkcmF0ZWRUb2tlbiB8fCBzdGF0ZVNlc3Npb24udG9rZW47XG5cbiAgaWYoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3Nlc3Npb24nIH1dLCBuZXcgRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICB0aHJvdyBuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2V4cGlyZWRfc2Vzc2lvbicgfV0sIG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJykpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IG1pbnV0ZXNVbnRpbEV4cGlyeSA9IGdldE1pbnV0ZXNVbnRpbChOdW1iZXIoYXV0aEV4cGlyZXMgfHwgMCkpO1xuICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgY29uc3QgcmVmcmVzaFdpbmRvd01pbnV0ZXMgPSBnZXRSZWZyZXNoV2luZG93TWludXRlcyhcbiAgICBzZXNzaW9uTGlmZXRpbWVNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyxcbiAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICk7XG4gIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgTnVtYmVyKGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICk7XG5cbiAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uOiB1cGRhdGVkU2Vzc2lvbiA9IHt9XG4gICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgIGNvbnN0IHt0b2tlbjogbmV3VG9rZW59OiBTZXNzaW9uVHlwZSA9ICh1cGRhdGVkU2Vzc2lvbiB8fCB7fSk7XG5cbiAgICBpZighbmV3VG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF9zZXNzaW9uJyB9XSwgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKSk7XG4gICAgfVxuXG4gICAgdG9rZW4gPSBuZXdUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaHFsID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB1cmw6IHN0cmluZyxcbiAgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnNcbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7b25TdWNjZXNzfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmV0cnk6IFJldHJ5VHlwZSA9IHtxdWVyeSwgcmVzcG9uc2VNZXRob2Q6IG9uU3VjY2VzcyB8fCAoKCkgPT4ge30pfTtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogc3RyaW5nID0gZmx1eC5nZXRTdGF0ZSgnYXBwLm5ldHdvcmtUeXBlJykgYXMgc3RyaW5nO1xuXG4gICAgaWYobmV0d29ya1R5cGUgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgfVxuXG4gICAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZihhdXRoZW50aWNhdGUpIHtcbiAgICAgIHRva2VuID0gYXdhaXQgcmVzb2x2ZUF1dGhUb2tlbihmbHV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhxbFF1ZXJ5KHVybCwgcXVlcnksIHt0b2tlbjogdG9rZW4gfHwgJyd9KVxuICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdHMpID0+IHtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19TVUNDRVNTfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IChvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhKSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3Qge2Vycm9ycyA9IFtdfSA9IGVycm9yO1xuXG4gICAgICAgIGlmKG9uU3VjY2VzcyAmJiBlcnJvcnMuaW5jbHVkZXMoJ25ldHdvcmtfZXJyb3InKSkge1xuICAgICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSkge1xuICAgICAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgPyBlcnJvci5lcnJvcnMgOiBbXTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSB8fCBtZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBtZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlc3RFbmRwb2ludCA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFyZ2V0RW5kcG9pbnQgPSBTdHJpbmcoZW5kcG9pbnQgfHwgJycpLnRyaW0oKTtcblxuICBpZihpc0VtcHR5KHRhcmdldEVuZHBvaW50KSkge1xuICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF91cmwnIH1dLCBuZXcgRXJyb3IoJ3Jlc3RfZW5kcG9pbnRfcmVxdWlyZWQnKSk7XG4gIH1cblxuICBpZigvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRhcmdldEVuZHBvaW50KSB8fCB0YXJnZXRFbmRwb2ludC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gdGFyZ2V0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgY29uZmlndXJlZEVuZHBvaW50ID0gY29uZmlnLmFwcD8uYXBpPy5lbmRwb2ludHM/Llt0YXJnZXRFbmRwb2ludF0gfHwgJyc7XG5cbiAgaWYoaXNFbXB0eShjb25maWd1cmVkRW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3VybCcgfV0sIG5ldyBFcnJvcihgcmVzdF9lbmRwb2ludF9ub3RfY29uZmlndXJlZDoke3RhcmdldEVuZHBvaW50fWApKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWd1cmVkRW5kcG9pbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdFJlcXVlc3QgPSBhc3luYyA8VCA9IEFwaVJlc3VsdHNUeXBlPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgbWV0aG9kOiBSZXN0TWV0aG9kID0gJ0dFVCcsXG4gIHBhcmFtcz86IHVua25vd24sXG4gIG9wdGlvbnM6IFJlc3RBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCB7YXV0aGVudGljYXRlID0gZmFsc2UsIG9uU3VjY2VzcywgLi4uaHVudGVyT3B0aW9uc30gPSBvcHRpb25zO1xuICBjb25zdCB1cmwgPSByZXNvbHZlUmVzdEVuZHBvaW50KGZsdXgsIGVuZHBvaW50KTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IFN0cmluZyhtZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHJldHJ5OiBSZXRyeVR5cGUgPSB7XG4gICAgcmVxdWVzdDoge21ldGhvZDogcmVxdWVzdE1ldGhvZCwgcGFyYW1zLCB1cmx9LFxuICAgIHJlc3BvbnNlTWV0aG9kOiBvblN1Y2Nlc3MgfHwgKCgpID0+IHt9KVxuICB9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbmV0d29ya1R5cGU6IHN0cmluZyA9IGZsdXguZ2V0U3RhdGUoJ2FwcC5uZXR3b3JrVHlwZScpIGFzIHN0cmluZztcblxuICAgIGlmKG5ldHdvcmtUeXBlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtyZXRyeSwgdHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19FUlJPUn0pIGFzIFByb21pc2U8VD47XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhdXRoZW50aWNhdGUgPyBhd2FpdCByZXNvbHZlQXV0aFRva2VuKGZsdXgpIDogaHVudGVyT3B0aW9ucy50b2tlbjtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7XG4gICAgICAuLi5odW50ZXJPcHRpb25zLFxuICAgICAgLi4uKHRva2VuID8ge3Rva2VufSA6IHt9KVxuICAgIH07XG4gICAgbGV0IGRhdGE6IFQ7XG5cbiAgICBzd2l0Y2gocmVxdWVzdE1ldGhvZCkge1xuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGRlbCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnR0VUJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGdldCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUE9TVCc6XG4gICAgICAgIGRhdGEgPSBhd2FpdCBwb3N0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgICBkYXRhID0gYXdhaXQgcHV0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkYXRhID0gYXdhaXQgYWpheCh1cmwsIHJlcXVlc3RNZXRob2QsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX1NVQ0NFU1N9KTtcblxuICAgIHJldHVybiBvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciA/IGVycm9yLmVycm9ycyA6IFtdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpIHx8IG1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IG1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgICByZXR1cm4ge30gYXMgVDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB2YXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzID0ge30sXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW10sXG4gIHR5cGUgPSAncXVlcnknXG4pID0+IHtcbiAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7Li4udmFyaWFibGVzIHx8IHt9fTtcbiAgY29uc3QgdmFyaWFibGVLZXlzID0gT2JqZWN0LmtleXMocXVlcnlWYXJpYWJsZXMpO1xuICBjb25zdCBxdWVyeU5hbWUgPSBuYW1lLnJlcGxhY2UoLyAvZywgJycpO1xuICBsZXQgcXVlcnk6IHN0cmluZztcblxuICBpZih0eXBlID09PSAnbXV0YXRpb24nKSB7XG4gICAgY29uc3QgbXV0YXRpb25OYW1lID0gdXBwZXJGaXJzdChjYW1lbENhc2UoZGF0YVR5cGUpKSArIHVwcGVyRmlyc3QoY2FtZWxDYXNlKHF1ZXJ5TmFtZSkpO1xuICAgIHF1ZXJ5ID0gYCR7dHlwZX0gJHttdXRhdGlvbk5hbWV9JHtcbiAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJCR7a2V5fTogJHtxdWVyeVZhcmlhYmxlc1trZXldLnR5cGV9YCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnXG4gICAgfSB7XG4gICAgICAke2RhdGFUeXBlfSB7XG4gICAgICAgICR7Y2FtZWxDYXNlKHF1ZXJ5TmFtZSl9JHtcbiAgICAgICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAke2tleX06ICQke2tleX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtyZXR1cm5Qcm9wZXJ0aWVzPy5sZW5ndGggPyBgeyR7cmV0dXJuUHJvcGVydGllcy5qb2luKCcsICcpfX1gIDogJyd9XG4gICAgICB9XG4gICAgfWA7XG4gIH0gZWxzZSB7XG4gICAgcXVlcnkgPSBgJHt0eXBlfSAke3F1ZXJ5TmFtZX0ke1xuICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAkJHtrZXl9OiAke3F1ZXJ5VmFyaWFibGVzW2tleV0udHlwZX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgIDogJydcbiAgICB9IHtcbiAgICAgICR7ZGF0YVR5cGV9IHtcbiAgICAgICAgJHtjYW1lbENhc2UocXVlcnlOYW1lKX0ke1xuICAgICAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fTogJCR7a2V5fWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICAke3JldHVyblByb3BlcnRpZXM/Lmxlbmd0aCA/IGB7JHtyZXR1cm5Qcm9wZXJ0aWVzLmpvaW4oJywgJyl9fWAgOiAnJ31cbiAgICAgIH1cbiAgICB9YDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRWYXJpYWJsZXMgPSB2YXJpYWJsZUtleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigocXVlcnlEYXRhLCBrZXkpID0+IHtcbiAgICBxdWVyeURhdGFba2V5XSA9IHF1ZXJ5VmFyaWFibGVzW2tleV0udmFsdWU7XG4gICAgcmV0dXJuIHF1ZXJ5RGF0YTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB7cXVlcnksIHZhcmlhYmxlczogdXBkYXRlZFZhcmlhYmxlc307XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTXV0YXRpb24gPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMgPSB7fSxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10gPSBbXVxuKSA9PiBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgdmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzLCAnbXV0YXRpb24nKTtcblxuZXhwb3J0IGNvbnN0IGFwcFF1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcE11dGF0aW9uID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZU11dGF0aW9uKG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY1F1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBwdWJsaWNVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8ucHVibGljIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBwdWJsaWNVcmwsIGZhbHNlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNNdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcHVibGljVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnB1YmxpYyB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcHVibGljVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcnVtTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHJ1bVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHJ1bVVybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHJ1bVJlcXVlc3QgPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGJhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogUmVzdEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBydW1Vcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8uZW5kcG9pbnRzPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgJyc7XG5cbiAgcmV0dXJuIHJlc3RSZXF1ZXN0PFQ+KGZsdXgsIHJ1bVVybCwgJ1BPU1QnLCBiYXRjaCwgey4uLm9wdGlvbnMsIGF1dGhlbnRpY2F0ZTogZmFsc2V9KTtcbn07XG5cbi8qKlxuICogQXR0ZW1wdHMgdGVybWluYWwgUlVNIGRlbGl2ZXJ5IHdpdGggdGhlIEJlYWNvbiBBUEkuXG4gKlxuICogUmV0dXJucyBmYWxzZSB3aGVuIGJlYWNvbiBkZWxpdmVyeSBpcyB1bmF2YWlsYWJsZSBvciBkZWNsaW5lZCBzbyBjYWxsZXJzXG4gKiBjYW4gZmFsbCBiYWNrIHRvIHRoZSBzdGFuZGFyZCByZXF1ZXN0IHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJ1bUJlYWNvblJlcXVlc3QgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGJhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBydW1Vcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8uZW5kcG9pbnRzPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgJyc7XG5cbiAgaWYoIXJ1bVVybCB8fCB0eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LnNlbmRCZWFjb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLm5hdmlnYXRvci5zZW5kQmVhY29uKHJ1bVVybCwgSlNPTi5zdHJpbmdpZnkoYmF0Y2gpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkSW1hZ2UgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGltYWdlOiBGb3JtRGF0YSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiBIdW50ZXJPcHRpb25zVHlwZSA9IHt9XG4pOiBQcm9taXNlPEFwaVJlc3VsdHNUeXBlPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCB1cGxvYWRJbWFnZVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy51cGxvYWRJbWFnZSB8fCAnJztcbiAgY29uc3QgdG9rZW4gPSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nKTtcblxuICBpZihpc0VtcHR5KHVwbG9hZEltYWdlVXJsKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2ludmFsaWRfdXJsJyB9XSwgbmV3IEVycm9yKCd1cGxvYWRfZW5kcG9pbnRfbm90X2NvbmZpZ3VyZWQnKSkpO1xuICB9XG5cbiAgaWYoaXNFbXB0eSh0b2tlbikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3Nlc3Npb24nIH1dLCBuZXcgRXJyb3IoJ21pc3NpbmdfYXV0aF90b2tlbicpKSk7XG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG5cbiAgaWYodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gZmV0Y2godXBsb2FkSW1hZ2VVcmwsIHtcbiAgICAgIGJvZHk6IGltYWdlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJztcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZVR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgICA/IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICA6IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgaWYoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAmJiAnZXJyb3InIGluIGRhdGFcbiAgICAgICAgICA/IFN0cmluZygoZGF0YSBhcyB7ZXJyb3I/OiBzdHJpbmd9KS5lcnJvciB8fCByZXNwb25zZS5zdGF0dXNUZXh0KVxuICAgICAgICAgIDogU3RyaW5nKGRhdGEgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAndXBsb2FkX2Vycm9yJyB9XSwgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgQXBpUmVzdWx0c1R5cGU7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcG9zdCh1cGxvYWRJbWFnZVVybCwgaW1hZ2UsIHtoZWFkZXJzLCAuLi5vcHRpb25zfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFNlc3Npb24gPSBhc3luYyAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIHRva2VuPzogc3RyaW5nLFxuICBleHBpcmVzPzogbnVtYmVyXG4pOiBQcm9taXNlPEZsdXhBY3Rpb24gfCBudWxsPiA9PiB7XG4gIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGlzRW1wdHkodG9rZW4pID8gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJykgOiB0b2tlbjtcblxuICBpZihpc0VtcHR5KHJlZnJlc2hUb2tlbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyhTdHJpbmcocmVmcmVzaFRva2VuKSk7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJyk7XG4gICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfU0VTU0lPTl9FUlJPUn0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCByZXF1ZXN0ZWRFeHBpcmVzID0gTWF0aC5tYXgoXG4gICAgICAxLFxuICAgICAgTnVtYmVyKGV4cGlyZXMgfHwgY29uZmlnLmFwcD8uc2Vzc2lvbj8ubWF4TWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICAgKTtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0ZWRFeHBpcmVzXG4gICAgICB9LFxuICAgICAgdG9rZW46IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogcmVmcmVzaFRva2VuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgcmF3U2Vzc2lvbkRhdGEgPSAoZGF0YSBhcyB7dXNlcnM/OiB7cmVmcmVzaFNlc3Npb24/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn19KT8udXNlcnM/LnJlZnJlc2hTZXNzaW9uO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSByYXdTZXNzaW9uRGF0YSAmJiB0eXBlb2YgcmF3U2Vzc2lvbkRhdGEgPT09ICdvYmplY3QnXG4gICAgICAgID8gcmF3U2Vzc2lvbkRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBtZXJnZWRTZXNzaW9uID0gYXdhaXQgc3RvcmVTZXNzaW9uKGZsdXgsIHsuLi5jdXJyZW50U2Vzc2lvbiwgLi4uc2Vzc2lvbkRhdGF9KTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBtZXJnZWRTZXNzaW9uLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfU0VTU0lPTl9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbihmbHV4LCAncmVmcmVzaFNlc3Npb24nLCAndXNlcnMnLCBxdWVyeVZhcmlhYmxlcywgWydleHBpcmVzJywgJ2lzc3VlZCcsICd0b2tlbiddLCB7XG4gICAgICBvblN1Y2Nlc3NcbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyc7XG5cbiAgICBpZihlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IGVycm9yTWVzc2FnZSA9PT0gJ2V4cGlyZWRfc2Vzc2lvbicpIHtcbiAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICB9XG5cbiAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJBcGlFcnJvciIsImFqYXgiLCJkZWwiLCJnZXQiLCJncmFwaHFsUXVlcnkiLCJwb3N0IiwicHV0IiwiY2FtZWxDYXNlIiwiaXNFbXB0eSIsInVwcGVyRmlyc3QiLCJBUFBfQ09OU1RBTlRTIiwiVVNFUl9DT05TVEFOVFMiLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImdldFJlZnJlc2hXaW5kb3dNaW51dGVzIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsInBhcnNlSnd0RXhwaXJ5TXMiLCJzdG9yZVNlc3Npb24iLCJERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMiLCJERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMiLCJnZXRNaW51dGVzVW50aWwiLCJleHBpcmVzQXQiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwibm93IiwiY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlIiwiZmx1eCIsImNsZWFyQXBwRGF0YSIsImRpc3BhdGNoIiwic2Vzc2lvbiIsInR5cGUiLCJTSUdOX09VVF9TVUNDRVNTIiwicmVzb2x2ZUF1dGhUb2tlbiIsInN0YXRlU2Vzc2lvbiIsImdldFN0YXRlIiwiaHlkcmF0ZWRTZXNzaW9uIiwidG9rZW4iLCJleHBpcmVzIiwiYXV0aEV4cGlyZXMiLCJpc3N1ZWQiLCJhdXRoSXNzdWVkIiwiaHlkcmF0ZWRUb2tlbiIsIm1lc3NhZ2UiLCJFcnJvciIsInRva2VuRXhwaXJlc0F0IiwiY29uZmlnIiwibWludXRlc1VudGlsRXhwaXJ5IiwiTnVtYmVyIiwic2Vzc2lvbkxpZmV0aW1lTWludXRlcyIsInJlZnJlc2hXaW5kb3dNaW51dGVzIiwiYXBwIiwicmVmcmVzaEV4cGlyZXNNaW51dGVzIiwibWF4IiwibWF4TWludXRlcyIsInVwZGF0ZWRTZXNzaW9uIiwicmVmcmVzaFNlc3Npb24iLCJuZXdUb2tlbiIsImdldEdyYXBocWwiLCJ1cmwiLCJhdXRoZW50aWNhdGUiLCJxdWVyeSIsIm9wdGlvbnMiLCJvblN1Y2Nlc3MiLCJyZXRyeSIsInJlc3BvbnNlTWV0aG9kIiwibmV0d29ya1R5cGUiLCJBUElfTkVUV09SS19FUlJPUiIsInRoZW4iLCJyZXN1bHRzIiwiQVBJX05FVFdPUktfU1VDQ0VTUyIsImRhdGEiLCJjYXRjaCIsImVycm9yIiwiZXJyb3JzIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVqZWN0IiwicmVzb2x2ZSIsInJlc29sdmVSZXN0RW5kcG9pbnQiLCJlbmRwb2ludCIsInRhcmdldEVuZHBvaW50IiwiU3RyaW5nIiwidHJpbSIsInRlc3QiLCJzdGFydHNXaXRoIiwiY29uZmlndXJlZEVuZHBvaW50IiwiYXBpIiwiZW5kcG9pbnRzIiwicmVzdFJlcXVlc3QiLCJtZXRob2QiLCJwYXJhbXMiLCJodW50ZXJPcHRpb25zIiwicmVxdWVzdE1ldGhvZCIsInRvVXBwZXJDYXNlIiwicmVxdWVzdCIsInJlcXVlc3RPcHRpb25zIiwiY3JlYXRlUXVlcnkiLCJuYW1lIiwiZGF0YVR5cGUiLCJ2YXJpYWJsZXMiLCJyZXR1cm5Qcm9wZXJ0aWVzIiwicXVlcnlWYXJpYWJsZXMiLCJ2YXJpYWJsZUtleXMiLCJPYmplY3QiLCJrZXlzIiwicXVlcnlOYW1lIiwicmVwbGFjZSIsIm11dGF0aW9uTmFtZSIsImxlbmd0aCIsIm1hcCIsImtleSIsImpvaW4iLCJ1cGRhdGVkVmFyaWFibGVzIiwicmVkdWNlIiwicXVlcnlEYXRhIiwidmFsdWUiLCJjcmVhdGVNdXRhdGlvbiIsImFwcFF1ZXJ5IiwiYXBwVXJsIiwiYXBwTXV0YXRpb24iLCJwdWJsaWNRdWVyeSIsInB1YmxpY1VybCIsInB1YmxpYyIsInB1YmxpY011dGF0aW9uIiwicnVtTXV0YXRpb24iLCJydW1VcmwiLCJydW0iLCJydW1SZXF1ZXN0IiwiYmF0Y2giLCJydW1CZWFjb25SZXF1ZXN0IiwiZ2xvYmFsVGhpcyIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJKU09OIiwic3RyaW5naWZ5IiwidXBsb2FkSW1hZ2UiLCJpbWFnZSIsInVwbG9hZEltYWdlVXJsIiwiaGVhZGVycyIsIkhlYWRlcnMiLCJzZXQiLCJGb3JtRGF0YSIsImZldGNoIiwiYm9keSIsInJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwianNvbiIsInRleHQiLCJvayIsInN0YXR1c1RleHQiLCJyZWZyZXNoVG9rZW4iLCJHRVRfU0VTU0lPTl9FUlJPUiIsInJlcXVlc3RlZEV4cGlyZXMiLCJyYXdTZXNzaW9uRGF0YSIsInVzZXJzIiwic2Vzc2lvbkRhdGEiLCJjdXJyZW50U2Vzc2lvbiIsIm1lcmdlZFNlc3Npb24iLCJVUERBVEVfU0VTU0lPTl9TVUNDRVNTIiwiZXJyb3JNZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLEVBQUVDLElBQUksRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLFlBQVksRUFBRUMsSUFBSSxFQUFFQyxHQUFHLFFBQU8sb0JBQW9CO0FBQ3BGLFNBQVFDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLFFBQU8sZUFBZTtBQUU1RCxTQUFRQyxhQUFhLFFBQU8sd0JBQXdCO0FBQ3BELFNBQVFDLGNBQWMsUUFBTyx5QkFBeUI7QUFDdEQsU0FBUUMsaUJBQWlCLFFBQU8sbUJBQW1CO0FBQ25ELFNBQVFDLHFCQUFxQixFQUFFQyx1QkFBdUIsRUFBRUMseUJBQXlCLEVBQUVDLGdCQUFnQixFQUFFQyxZQUFZLFFBQU8sZUFBZTtBQXlFdkksTUFBTUMsaUNBQWlDO0FBQ3ZDLE1BQU1DLDhCQUE4QjtBQUVwQyxNQUFNQyxrQkFBa0IsQ0FBQ0MsWUFDdkJDLEtBQUtDLEtBQUssQ0FBQyxBQUFDRixDQUFBQSxZQUFZRyxLQUFLQyxHQUFHLEVBQUMsSUFBTSxDQUFBLE9BQU8sRUFBQztBQUVqRCxNQUFNQywyQkFBMkIsT0FBT0M7SUFDdEMsTUFBTWQsc0JBQXNCYztJQUM1QixNQUFNQSxLQUFLQyxZQUFZO0lBQ3ZCLE1BQU1ELEtBQUtFLFFBQVEsQ0FBQztRQUFDQyxTQUFTLENBQUM7UUFBR0MsTUFBTXBCLGVBQWVxQixnQkFBZ0I7SUFBQTtBQUN6RTtBQUVBLE1BQU1DLG1CQUFtQixPQUFPTjtJQUM5QixNQUFNTyxlQUE2QlAsS0FBS1EsUUFBUSxDQUFDLG1CQUFtQixDQUFDO0lBQ3JFLE1BQU1DLGtCQUErQkYsYUFBYUcsS0FBSyxHQUFHSCxlQUFlLE1BQU1uQiwwQkFBMEJZO0lBQ3pHLE1BQU0sRUFDSlcsU0FBU0MsY0FBYyxDQUFDLEVBQ3hCQyxRQUFRQyxhQUFhLENBQUMsRUFDdEJKLE9BQU9LLGFBQWEsRUFDckIsR0FBZ0JOLG1CQUFtQixDQUFDO0lBQ3JDLElBQUlDLFFBQVFLLGlCQUFpQlIsYUFBYUcsS0FBSztJQUUvQyxJQUFHLENBQUNBLE9BQU87UUFDVCxNQUFNLElBQUlyQyxTQUFTO1lBQUM7Z0JBQUUyQyxTQUFTO1lBQWtCO1NBQUUsRUFBRSxJQUFJQyxNQUFNO0lBQ2pFO0lBRUEsTUFBTUMsaUJBQWlCN0IsaUJBQWlCcUI7SUFFeEMsSUFBR1EsaUJBQWlCLEtBQUtyQixLQUFLQyxHQUFHLE1BQU1vQixnQkFBZ0I7UUFDckQsTUFBTSxJQUFJN0MsU0FBUztZQUFDO2dCQUFFMkMsU0FBUztZQUFrQjtTQUFFLEVBQUUsSUFBSUMsTUFBTTtJQUNqRTtJQUVBLE1BQU1FLFNBQVNsQyxrQkFBa0JlO0lBQ2pDLE1BQU1vQixxQkFBcUIzQixnQkFBZ0I0QixPQUFPVCxlQUFlO0lBQ2pFLE1BQU1VLHlCQUF5QjNCLEtBQUtDLEtBQUssQ0FBQyxBQUFDZ0IsQ0FBQUEsY0FBY0UsVUFBUyxJQUFNLENBQUEsT0FBTyxFQUFDO0lBQ2hGLE1BQU1TLHVCQUF1QnBDLHdCQUMzQm1DLDBCQUEwQjlCLDZCQUMxQjJCLE9BQU9LLEdBQUcsRUFBRXJCLFdBQVcsQ0FBQztJQUUxQixNQUFNc0Isd0JBQXdCOUIsS0FBSytCLEdBQUcsQ0FDcEMsR0FDQUwsT0FBT0YsT0FBT0ssR0FBRyxFQUFFckIsU0FBU3dCLGNBQWNMLDBCQUEwQjlCO0lBR3RFLElBQUc0QixxQkFBcUIsS0FBS0Esc0JBQXNCRyxzQkFBc0I7UUFDdkUsTUFBTSxFQUNKcEIsU0FBU3lCLGlCQUFpQixDQUFDLENBQUMsRUFDN0IsR0FBbUIsQUFBQyxNQUFNQyxlQUFlN0IsTUFBTVUsT0FBT2UsMEJBQTJCLENBQUM7UUFDbkYsTUFBTSxFQUFDZixPQUFPb0IsUUFBUSxFQUFDLEdBQWlCRixrQkFBa0IsQ0FBQztRQUUzRCxJQUFHLENBQUNFLFVBQVU7WUFDWixNQUFNLElBQUl6RCxTQUFTO2dCQUFDO29CQUFFMkMsU0FBUztnQkFBa0I7YUFBRSxFQUFFLElBQUlDLE1BQU07UUFDakU7UUFFQVAsUUFBUW9CO0lBQ1Y7SUFFQSxPQUFPcEI7QUFDVDtBQUVBLE9BQU8sTUFBTXFCLGFBQWEsT0FDeEIvQixNQUNBZ0MsS0FDQUMsY0FDQUMsT0FDQUM7SUFFQSxJQUFJO1FBQ0YsTUFBTSxFQUFDQyxTQUFTLEVBQUMsR0FBR0Q7UUFDcEIsTUFBTUUsUUFBbUI7WUFBQ0g7WUFBT0ksZ0JBQWdCRixhQUFjLENBQUEsS0FBTyxDQUFBO1FBQUU7UUFDeEUsTUFBTUcsY0FBc0J2QyxLQUFLUSxRQUFRLENBQUM7UUFFMUMsSUFBRytCLGdCQUFnQixRQUFRO1lBQ3pCLE9BQU92QyxLQUFLRSxRQUFRLENBQUM7Z0JBQUNtQztnQkFBT2pDLE1BQU1yQixjQUFjeUQsaUJBQWlCO1lBQUE7UUFDcEU7UUFFQSxJQUFJOUI7UUFFSixJQUFHdUIsY0FBYztZQUNmdkIsUUFBUSxNQUFNSixpQkFBaUJOO1FBQ2pDO1FBRUEsT0FBT3ZCLGFBQWF1RCxLQUFLRSxPQUFPO1lBQUN4QixPQUFPQSxTQUFTO1FBQUUsR0FDaEQrQixJQUFJLENBQUMsT0FBT0M7WUFDWCxNQUFNMUMsS0FBS0UsUUFBUSxDQUFDO2dCQUFDRSxNQUFNckIsY0FBYzRELG1CQUFtQjtZQUFBO1lBRTVELE9BQU9EO1FBQ1QsR0FDQ0QsSUFBSSxDQUFDLENBQUNHLE9BQVVSLFlBQVlBLFVBQVVRLFFBQVFBLE1BQzlDQyxLQUFLLENBQUMsT0FBT0M7WUFDWixNQUFNLEVBQUNDLFNBQVMsRUFBRSxFQUFDLEdBQUdEO1lBRXRCLElBQUdWLGFBQWFXLE9BQU9DLFFBQVEsQ0FBQyxrQkFBa0I7Z0JBQ2hELE1BQU1oRCxLQUFLRSxRQUFRLENBQUM7b0JBQUNtQztvQkFBT2pDLE1BQU1yQixjQUFjeUQsaUJBQWlCO2dCQUFBO2dCQUNqRSxPQUFPUyxRQUFRQyxNQUFNLENBQUNKO1lBQ3hCLE9BQU8sSUFBR0MsT0FBT0MsUUFBUSxDQUFDLHNCQUFzQkQsT0FBT0MsUUFBUSxDQUFDLG9CQUFvQjtnQkFDbEYsTUFBTWpELHlCQUF5QkM7Z0JBQy9CLE9BQU9pRCxRQUFRRSxPQUFPLENBQUMsQ0FBQztZQUMxQjtZQUVBLE9BQU9GLFFBQVFDLE1BQU0sQ0FBQ0o7UUFDeEI7SUFDSixFQUFFLE9BQU1BLE9BQU87UUFDYixNQUFNQyxTQUFTRCxpQkFBaUJ6RSxXQUFXeUUsTUFBTUMsTUFBTSxHQUFHLEVBQUU7UUFDNUQsTUFBTS9CLFVBQVU4QixpQkFBaUI3QixRQUFRNkIsTUFBTTlCLE9BQU8sR0FBRztRQUV6RCxJQUFHK0IsT0FBT0MsUUFBUSxDQUFDLHNCQUFzQkQsT0FBT0MsUUFBUSxDQUFDLHNCQUFzQmhDLFlBQVkscUJBQXFCQSxZQUFZLG1CQUFtQjtZQUM3SSxNQUFNakIseUJBQXlCQztZQUMvQixPQUFPLENBQUM7UUFDVjtRQUVBLE1BQU04QztJQUNSO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTU0sc0JBQXNCLENBQ2pDcEQsTUFDQXFEO0lBRUEsTUFBTUMsaUJBQWlCQyxPQUFPRixZQUFZLElBQUlHLElBQUk7SUFFbEQsSUFBRzNFLFFBQVF5RSxpQkFBaUI7UUFDMUIsTUFBTSxJQUFJakYsU0FBUztZQUFDO2dCQUFFMkMsU0FBUztZQUFjO1NBQUUsRUFBRSxJQUFJQyxNQUFNO0lBQzdEO0lBRUEsSUFBRyxnQkFBZ0J3QyxJQUFJLENBQUNILG1CQUFtQkEsZUFBZUksVUFBVSxDQUFDLE1BQU07UUFDekUsT0FBT0o7SUFDVDtJQUVBLE1BQU1uQyxTQUFTbEMsa0JBQWtCZTtJQUNqQyxNQUFNMkQscUJBQXFCeEMsT0FBT0ssR0FBRyxFQUFFb0MsS0FBS0MsV0FBVyxDQUFDUCxlQUFlLElBQUk7SUFFM0UsSUFBR3pFLFFBQVE4RSxxQkFBcUI7UUFDOUIsTUFBTSxJQUFJdEYsU0FBUztZQUFDO2dCQUFFMkMsU0FBUztZQUFjO1NBQUUsRUFBRSxJQUFJQyxNQUFNLENBQUMsNkJBQTZCLEVBQUVxQyxnQkFBZ0I7SUFDN0c7SUFFQSxPQUFPSztBQUNULEVBQUU7QUFFRixPQUFPLE1BQU1HLGNBQWMsT0FDekI5RCxNQUNBcUQsVUFDQVUsU0FBcUIsS0FBSyxFQUMxQkMsUUFDQTdCLFVBQTBCLENBQUMsQ0FBQztJQUU1QixNQUFNLEVBQUNGLGVBQWUsS0FBSyxFQUFFRyxTQUFTLEVBQUUsR0FBRzZCLGVBQWMsR0FBRzlCO0lBQzVELE1BQU1ILE1BQU1vQixvQkFBb0JwRCxNQUFNcUQ7SUFDdEMsTUFBTWEsZ0JBQWdCWCxPQUFPUSxVQUFVLE9BQU9JLFdBQVc7SUFDekQsTUFBTTlCLFFBQW1CO1FBQ3ZCK0IsU0FBUztZQUFDTCxRQUFRRztZQUFlRjtZQUFRaEM7UUFBRztRQUM1Q00sZ0JBQWdCRixhQUFjLENBQUEsS0FBTyxDQUFBO0lBQ3ZDO0lBRUEsSUFBSTtRQUNGLE1BQU1HLGNBQXNCdkMsS0FBS1EsUUFBUSxDQUFDO1FBRTFDLElBQUcrQixnQkFBZ0IsUUFBUTtZQUN6QixPQUFPdkMsS0FBS0UsUUFBUSxDQUFDO2dCQUFDbUM7Z0JBQU9qQyxNQUFNckIsY0FBY3lELGlCQUFpQjtZQUFBO1FBQ3BFO1FBRUEsTUFBTTlCLFFBQVF1QixlQUFlLE1BQU0zQixpQkFBaUJOLFFBQVFpRSxjQUFjdkQsS0FBSztRQUMvRSxNQUFNMkQsaUJBQW9DO1lBQ3hDLEdBQUdKLGFBQWE7WUFDaEIsR0FBSXZELFFBQVE7Z0JBQUNBO1lBQUssSUFBSSxDQUFDLENBQUM7UUFDMUI7UUFDQSxJQUFJa0M7UUFFSixPQUFPc0I7WUFDTCxLQUFLO2dCQUNIdEIsT0FBTyxNQUFNckUsSUFBSXlELEtBQUtnQyxRQUFRSztnQkFDOUI7WUFFRixLQUFLO2dCQUNIekIsT0FBTyxNQUFNcEUsSUFBSXdELEtBQUtnQyxRQUFRSztnQkFDOUI7WUFFRixLQUFLO2dCQUNIekIsT0FBTyxNQUFNbEUsS0FBS3NELEtBQUtnQyxRQUFRSztnQkFDL0I7WUFFRixLQUFLO2dCQUNIekIsT0FBTyxNQUFNakUsSUFBSXFELEtBQUtnQyxRQUFRSztnQkFDOUI7WUFFRjtnQkFDRXpCLE9BQU8sTUFBTXRFLEtBQUswRCxLQUFLa0MsZUFBZUYsUUFBUUs7Z0JBQzlDO1FBQ0o7UUFFQSxNQUFNckUsS0FBS0UsUUFBUSxDQUFDO1lBQUNFLE1BQU1yQixjQUFjNEQsbUJBQW1CO1FBQUE7UUFFNUQsT0FBT1AsWUFBWUEsVUFBVVEsUUFBUUE7SUFDdkMsRUFBRSxPQUFNRSxPQUFPO1FBQ2IsTUFBTUMsU0FBU0QsaUJBQWlCekUsV0FBV3lFLE1BQU1DLE1BQU0sR0FBRyxFQUFFO1FBQzVELE1BQU0vQixVQUFVOEIsaUJBQWlCN0IsUUFBUTZCLE1BQU05QixPQUFPLEdBQUc7UUFFekQsSUFBRytCLE9BQU9DLFFBQVEsQ0FBQyxzQkFBc0JELE9BQU9DLFFBQVEsQ0FBQyxzQkFBc0JoQyxZQUFZLHFCQUFxQkEsWUFBWSxtQkFBbUI7WUFDN0ksTUFBTWpCLHlCQUF5QkM7WUFDL0IsT0FBTyxDQUFDO1FBQ1Y7UUFFQSxNQUFNOEM7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU13QixjQUFjLENBQ3pCQyxNQUNBQyxVQUNBQyxZQUErQixDQUFDLENBQUMsRUFDakNDLG1CQUE2QixFQUFFLEVBQy9CdEUsT0FBTyxPQUFPO0lBRWQsTUFBTXVFLGlCQUFpQjtRQUFDLEdBQUdGLGFBQWEsQ0FBQyxDQUFDO0lBQUE7SUFDMUMsTUFBTUcsZUFBZUMsT0FBT0MsSUFBSSxDQUFDSDtJQUNqQyxNQUFNSSxZQUFZUixLQUFLUyxPQUFPLENBQUMsTUFBTTtJQUNyQyxJQUFJOUM7SUFFSixJQUFHOUIsU0FBUyxZQUFZO1FBQ3RCLE1BQU02RSxlQUFlbkcsV0FBV0YsVUFBVTRGLGFBQWExRixXQUFXRixVQUFVbUc7UUFDNUU3QyxRQUFRLEdBQUc5QixLQUFLLENBQUMsRUFBRTZFLGVBQ2pCTCxhQUFhTSxNQUFNLEdBQ2YsQ0FBQyxDQUFDLEVBQUVOLGFBQWFPLEdBQUcsQ0FBQyxDQUFDQyxNQUFRLENBQUMsQ0FBQyxFQUFFQSxJQUFJLEVBQUUsRUFBRVQsY0FBYyxDQUFDUyxJQUFJLENBQUNoRixJQUFJLEVBQUUsRUFBRWlGLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUNuRixHQUNMO01BQ0MsRUFBRWIsU0FBUztRQUNULEVBQUU1RixVQUFVbUcsYUFDVkgsYUFBYU0sTUFBTSxHQUNmLENBQUMsQ0FBQyxFQUFFTixhQUFhTyxHQUFHLENBQUMsQ0FBQ0MsTUFBUSxHQUFHQSxJQUFJLEdBQUcsRUFBRUEsS0FBSyxFQUFFQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDOUQsR0FDTDtRQUNELEVBQUVYLGtCQUFrQlEsU0FBUyxDQUFDLENBQUMsRUFBRVIsaUJBQWlCVyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHOztLQUV4RSxDQUFDO0lBQ0osT0FBTztRQUNMbkQsUUFBUSxHQUFHOUIsS0FBSyxDQUFDLEVBQUUyRSxZQUNqQkgsYUFBYU0sTUFBTSxHQUNmLENBQUMsQ0FBQyxFQUFFTixhQUFhTyxHQUFHLENBQUMsQ0FBQ0MsTUFBUSxDQUFDLENBQUMsRUFBRUEsSUFBSSxFQUFFLEVBQUVULGNBQWMsQ0FBQ1MsSUFBSSxDQUFDaEYsSUFBSSxFQUFFLEVBQUVpRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDbkYsR0FDTDtNQUNDLEVBQUViLFNBQVM7UUFDVCxFQUFFNUYsVUFBVW1HLGFBQ1ZILGFBQWFNLE1BQU0sR0FDZixDQUFDLENBQUMsRUFBRU4sYUFBYU8sR0FBRyxDQUFDLENBQUNDLE1BQVEsR0FBR0EsSUFBSSxHQUFHLEVBQUVBLEtBQUssRUFBRUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQzlELEdBQ0w7UUFDRCxFQUFFWCxrQkFBa0JRLFNBQVMsQ0FBQyxDQUFDLEVBQUVSLGlCQUFpQlcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRzs7S0FFeEUsQ0FBQztJQUNKO0lBRUEsTUFBTUMsbUJBQW1CVixhQUFhVyxNQUFNLENBQTBCLENBQUNDLFdBQVdKO1FBQ2hGSSxTQUFTLENBQUNKLElBQUksR0FBR1QsY0FBYyxDQUFDUyxJQUFJLENBQUNLLEtBQUs7UUFDMUMsT0FBT0Q7SUFDVCxHQUFHLENBQUM7SUFFSixPQUFPO1FBQUN0RDtRQUFPdUMsV0FBV2E7SUFBZ0I7QUFDNUMsRUFBRTtBQUVGLE9BQU8sTUFBTUksaUJBQWlCLENBQzVCbkIsTUFDQUMsVUFDQUMsWUFBK0IsQ0FBQyxDQUFDLEVBQ2pDQyxtQkFBNkIsRUFBRSxHQUM1QkosWUFBWUMsTUFBTUMsVUFBVUMsV0FBV0Msa0JBQWtCLFlBQVk7QUFFMUUsT0FBTyxNQUFNaUIsV0FBVyxDQUN0QjNGLE1BQ0F1RSxNQUNBQyxVQUNBRyxnQkFDQUQsa0JBQ0F2QyxVQUFzQixDQUFDLENBQUM7SUFFeEIsTUFBTUQsUUFBUW9DLFlBQVlDLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDMUQsTUFBTXZELFNBQVNsQyxrQkFBa0JlO0lBQ2pDLE1BQU00RixTQUFpQnpFLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUs1QixPQUFPO0lBQy9DLE9BQU9ELFdBQVcvQixNQUFNNEYsUUFBUSxNQUFNMUQsT0FBT0M7QUFDL0MsRUFBRTtBQUVGLE9BQU8sTUFBTTBELGNBQWMsQ0FDekI3RixNQUNBdUUsTUFDQUMsVUFDQUcsZ0JBQ0FELGtCQUNBdkMsVUFBc0IsQ0FBQyxDQUFDO0lBRXhCLE1BQU1ELFFBQVF3RCxlQUFlbkIsTUFBTUMsVUFBVUcsZ0JBQWdCRDtJQUM3RCxNQUFNdkQsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTTRGLFNBQWlCekUsT0FBT0ssR0FBRyxFQUFFb0MsS0FBSzVCLE9BQU87SUFDL0MsT0FBT0QsV0FBVy9CLE1BQU00RixRQUFRLE1BQU0xRCxPQUFPQztBQUMvQyxFQUFFO0FBRUYsT0FBTyxNQUFNMkQsY0FBYyxDQUN6QjlGLE1BQ0F1RSxNQUNBQyxVQUNBRyxnQkFDQUQsa0JBQ0F2QyxVQUFzQixDQUFDLENBQUM7SUFFeEIsTUFBTUQsUUFBUW9DLFlBQVlDLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDMUQsTUFBTXZELFNBQVNsQyxrQkFBa0JlO0lBQ2pDLE1BQU0rRixZQUFvQjVFLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUtvQyxVQUFVO0lBQ3JELE9BQU9qRSxXQUFXL0IsTUFBTStGLFdBQVcsT0FBTzdELE9BQU9DO0FBQ25ELEVBQUU7QUFFRixPQUFPLE1BQU04RCxpQkFBaUIsQ0FDNUJqRyxNQUNBdUUsTUFDQUMsVUFDQUcsZ0JBQ0FELGtCQUNBdkMsVUFBc0IsQ0FBQyxDQUFDO0lBRXhCLE1BQU1ELFFBQVF3RCxlQUFlbkIsTUFBTUMsVUFBVUcsZ0JBQWdCRDtJQUM3RCxNQUFNdkQsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTStGLFlBQW9CNUUsT0FBT0ssR0FBRyxFQUFFb0MsS0FBS29DLFVBQVU7SUFDckQsT0FBT2pFLFdBQVcvQixNQUFNK0YsV0FBVyxPQUFPN0QsT0FBT0M7QUFDbkQsRUFBRTtBQUVGLE9BQU8sTUFBTStELGNBQWMsQ0FDekJsRyxNQUNBdUUsTUFDQUMsVUFDQUcsZ0JBQ0FELGtCQUNBdkMsVUFBc0IsQ0FBQyxDQUFDO0lBRXhCLE1BQU1ELFFBQVF3RCxlQUFlbkIsTUFBTUMsVUFBVUcsZ0JBQWdCRDtJQUM3RCxNQUFNdkQsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTW1HLFNBQWlCaEYsT0FBT0ssR0FBRyxFQUFFb0MsS0FBS3dDLE9BQU9qRixPQUFPSyxHQUFHLEVBQUVvQyxLQUFLb0MsVUFBVTtJQUMxRSxPQUFPakUsV0FBVy9CLE1BQU1tRyxRQUFRLE9BQU9qRSxPQUFPQztBQUNoRCxFQUFFO0FBRUYsT0FBTyxNQUFNa0UsYUFBYSxDQUN4QnJHLE1BQ0FzRyxPQUNBbkUsVUFBMEIsQ0FBQyxDQUFDO0lBRTVCLE1BQU1oQixTQUFTbEMsa0JBQWtCZTtJQUNqQyxNQUFNbUcsU0FBaUJoRixPQUFPSyxHQUFHLEVBQUVvQyxLQUFLQyxXQUFXdUMsT0FBT2pGLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUt3QyxPQUFPO0lBRWxGLE9BQU90QyxZQUFlOUQsTUFBTW1HLFFBQVEsUUFBUUcsT0FBTztRQUFDLEdBQUduRSxPQUFPO1FBQUVGLGNBQWM7SUFBSztBQUNyRixFQUFFO0FBRUY7Ozs7O0NBS0MsR0FDRCxPQUFPLE1BQU1zRSxtQkFBbUIsQ0FDOUJ2RyxNQUNBc0c7SUFFQSxNQUFNbkYsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTW1HLFNBQWlCaEYsT0FBT0ssR0FBRyxFQUFFb0MsS0FBS0MsV0FBV3VDLE9BQU9qRixPQUFPSyxHQUFHLEVBQUVvQyxLQUFLd0MsT0FBTztJQUVsRixJQUFHLENBQUNELFVBQVUsT0FBT0ssV0FBV0MsU0FBUyxFQUFFQyxlQUFlLFlBQVk7UUFDcEUsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGLE9BQU9GLFdBQVdDLFNBQVMsQ0FBQ0MsVUFBVSxDQUFDUCxRQUFRUSxLQUFLQyxTQUFTLENBQUNOO0lBQ2hFLEVBQUUsT0FBTTtRQUNOLE9BQU87SUFDVDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1PLGNBQWMsQ0FDekI3RyxNQUNBOEcsT0FDQTNFLFVBQTZCLENBQUMsQ0FBQztJQUUvQixNQUFNaEIsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTStHLGlCQUF5QjVGLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUtpRCxlQUFlO0lBQy9ELE1BQU1uRyxRQUFRVixLQUFLUSxRQUFRLENBQUM7SUFFNUIsSUFBRzNCLFFBQVFrSSxpQkFBaUI7UUFDMUIsT0FBTzlELFFBQVFDLE1BQU0sQ0FBQyxJQUFJN0UsU0FBUztZQUFDO2dCQUFFMkMsU0FBUztZQUFjO1NBQUUsRUFBRSxJQUFJQyxNQUFNO0lBQzdFO0lBRUEsSUFBR3BDLFFBQVE2QixRQUFRO1FBQ2pCLE9BQU91QyxRQUFRQyxNQUFNLENBQUMsSUFBSTdFLFNBQVM7WUFBQztnQkFBRTJDLFNBQVM7WUFBa0I7U0FBRSxFQUFFLElBQUlDLE1BQU07SUFDakY7SUFFQSxNQUFNK0YsVUFBVSxJQUFJQztJQUNwQkQsUUFBUUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRXhHLE9BQU87SUFFOUMsSUFBRyxPQUFPeUcsYUFBYSxlQUFlTCxpQkFBaUJLLFVBQVU7UUFDL0RILFFBQVFFLEdBQUcsQ0FBQyxVQUFVO1FBRXRCLE9BQU9FLE1BQU1MLGdCQUFnQjtZQUMzQk0sTUFBTVA7WUFDTkU7WUFDQWpELFFBQVE7UUFDVixHQUFHdEIsSUFBSSxDQUFDLE9BQU82RTtZQUNiLE1BQU1DLGVBQWVELFNBQVNOLE9BQU8sQ0FBQ3hJLEdBQUcsQ0FBQyxtQkFBbUI7WUFDN0QsTUFBTW9FLE9BQU8yRSxhQUFhdkUsUUFBUSxDQUFDLHNCQUMvQixNQUFNc0UsU0FBU0UsSUFBSSxLQUNuQixNQUFNRixTQUFTRyxJQUFJO1lBRXZCLElBQUcsQ0FBQ0gsU0FBU0ksRUFBRSxFQUFFO2dCQUNmLE1BQU0xRyxVQUFVLE9BQU80QixTQUFTLFlBQVlBLFFBQVEsV0FBV0EsT0FDM0RXLE9BQU8sQUFBQ1gsS0FBMEJFLEtBQUssSUFBSXdFLFNBQVNLLFVBQVUsSUFDOURwRSxPQUFPWCxRQUFRMEUsU0FBU0ssVUFBVTtnQkFDdEMsTUFBTSxJQUFJdEosU0FBUztvQkFBQzt3QkFBRTJDLFNBQVM7b0JBQWU7aUJBQUUsRUFBRSxJQUFJQyxNQUFNRDtZQUM5RDtZQUVBLE9BQU80QjtRQUNUO0lBQ0Y7SUFFQSxPQUFPbEUsS0FBS3FJLGdCQUFnQkQsT0FBTztRQUFDRTtRQUFTLEdBQUc3RSxPQUFPO0lBQUE7QUFDekQsRUFBRTtBQUVGLE9BQU8sTUFBTU4saUJBQWlCLE9BQzVCN0IsTUFDQVUsT0FDQUM7SUFFQSxNQUFNaUgsZUFBZS9JLFFBQVE2QixTQUFTVixLQUFLUSxRQUFRLENBQUMsd0JBQXdCRTtJQUU1RSxJQUFHN0IsUUFBUStJLGVBQWU7UUFDeEIsT0FBTztJQUNUO0lBRUEsTUFBTTFHLGlCQUFpQjdCLGlCQUFpQmtFLE9BQU9xRTtJQUUvQyxJQUFHMUcsaUJBQWlCLEtBQUtyQixLQUFLQyxHQUFHLE1BQU1vQixnQkFBZ0I7UUFDckQsTUFBTTRCLFFBQVEsSUFBSTdCLE1BQU07UUFDeEIsTUFBTWxCLHlCQUF5QkM7UUFDL0JBLEtBQUtFLFFBQVEsQ0FBQztZQUFDNEM7WUFBTzFDLE1BQU1wQixlQUFlNkksaUJBQWlCO1FBQUE7UUFDNUQsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGLE1BQU0xRyxTQUFTbEMsa0JBQWtCZTtRQUNqQyxNQUFNOEgsbUJBQW1CbkksS0FBSytCLEdBQUcsQ0FDL0IsR0FDQUwsT0FBT1YsV0FBV1EsT0FBT0ssR0FBRyxFQUFFckIsU0FBU3dCLGNBQWNuQztRQUV2RCxNQUFNbUYsaUJBQWlCO1lBQ3JCaEUsU0FBUztnQkFDUFAsTUFBTTtnQkFDTnFGLE9BQU9xQztZQUNUO1lBQ0FwSCxPQUFPO2dCQUNMTixNQUFNO2dCQUNOcUYsT0FBT21DO1lBQ1Q7UUFDRjtRQUNBLE1BQU14RixZQUFZLE9BQU9RLE9BQXVCLENBQUMsQ0FBQztZQUNoRCxNQUFNbUYsaUJBQWtCbkYsTUFBK0RvRixPQUFPbkc7WUFDOUYsTUFBTW9HLGNBQWNGLGtCQUFrQixPQUFPQSxtQkFBbUIsV0FDNURBLGlCQUNBLENBQUM7WUFDTCxNQUFNRyxpQkFBa0JsSSxLQUFLUSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzlELE1BQU0ySCxnQkFBZ0IsTUFBTTdJLGFBQWFVLE1BQU07Z0JBQUMsR0FBR2tJLGNBQWM7Z0JBQUUsR0FBR0QsV0FBVztZQUFBO1lBQ2pGLE9BQU9qSSxLQUFLRSxRQUFRLENBQUM7Z0JBQUNDLFNBQVNnSTtnQkFBZS9ILE1BQU1wQixlQUFlb0osc0JBQXNCO1lBQUE7UUFDM0Y7UUFFQSxPQUFPLE1BQU1uQyxlQUFlakcsTUFBTSxrQkFBa0IsU0FBUzJFLGdCQUFnQjtZQUFDO1lBQVc7WUFBVTtTQUFRLEVBQUU7WUFDM0d2QztRQUNGO0lBQ0YsRUFBRSxPQUFNVSxPQUFPO1FBQ2IsTUFBTXVGLGVBQWV2RixpQkFBaUI3QixRQUFRNkIsTUFBTTlCLE9BQU8sR0FBRztRQUU5RCxJQUFHcUgsaUJBQWlCLHFCQUFxQkEsaUJBQWlCLG1CQUFtQjtZQUMzRSxNQUFNdEkseUJBQXlCQztRQUNqQztRQUVBQSxLQUFLRSxRQUFRLENBQUM7WUFBQzRDO1lBQU8xQyxNQUFNcEIsZUFBZTZJLGlCQUFpQjtRQUFBO1FBQzVELE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BaseAdapterOptions } from './validatorFactory.js';
|
|
2
1
|
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
import type { BaseAdapterOptions } from './validatorFactory.js';
|
|
3
3
|
export interface BaseActionOptions<T extends BaseAdapterOptions = BaseAdapterOptions> {
|
|
4
4
|
adapter?: (input: unknown, options?: T) => any;
|
|
5
5
|
adapterOptions?: T;
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
4
|
*/
|
|
5
|
-
export { appMutation, appQuery, getGraphql, publicMutation, publicQuery,
|
|
5
|
+
export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, rumRequest, refreshSession, resolveRestEndpoint, restRequest, uploadImage, type ApiResultsType, type ReaktorDbCollection, type RestApiOptions, type RestMethod, type SessionType } from './api.js';
|
|
6
6
|
export { createAction, createActions, createAllActions, type ActionOptions, type ActionReturnType, type ActionType, type ActionTypes } from './actionFactory.js';
|
|
7
7
|
export { createBaseActions, type BaseActionOptions } from './baseActionFactory.js';
|
|
8
8
|
export { createValidatorFactory, createValidatorManager, type BaseAdapterOptions } from './validatorFactory.js';
|
package/lib/utils/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
4
|
*/ // Export API utilities
|
|
5
|
-
export { appMutation, appQuery, getGraphql, publicMutation, publicQuery,
|
|
5
|
+
export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, rumRequest, refreshSession, resolveRestEndpoint, restRequest, uploadImage } from './api.js';
|
|
6
6
|
// Export action factory
|
|
7
7
|
export { createAction, createActions, createAllActions } from './actionFactory.js';
|
|
8
8
|
// Export base action factory
|
|
@@ -23,4 +23,4 @@ export * from './i18n.js';
|
|
|
23
23
|
export * from './location.js';
|
|
24
24
|
export * from './session.js';
|
|
25
25
|
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLy8gRXhwb3J0IEFQSSB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcE11dGF0aW9uLFxuICBhcHBRdWVyeSxcbiAgZ2V0R3JhcGhxbCxcbiAgcHVibGljTXV0YXRpb24sXG4gIHB1YmxpY1F1ZXJ5LFxuICBydW1SZXF1ZXN0LFxuICByZWZyZXNoU2Vzc2lvbixcbiAgcmVzb2x2ZVJlc3RFbmRwb2ludCxcbiAgcmVzdFJlcXVlc3QsXG4gIHVwbG9hZEltYWdlLFxuICB0eXBlIEFwaVJlc3VsdHNUeXBlLFxuICB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHR5cGUgUmVzdEFwaU9wdGlvbnMsXG4gIHR5cGUgUmVzdE1ldGhvZCxcbiAgdHlwZSBTZXNzaW9uVHlwZVxufSBmcm9tICcuL2FwaS5qcyc7XG5cbi8vIEV4cG9ydCBhY3Rpb24gZmFjdG9yeVxuZXhwb3J0IHtcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25zLFxuICBjcmVhdGVBbGxBY3Rpb25zLFxuICB0eXBlIEFjdGlvbk9wdGlvbnMsXG4gIHR5cGUgQWN0aW9uUmV0dXJuVHlwZSxcbiAgdHlwZSBBY3Rpb25UeXBlLFxuICB0eXBlIEFjdGlvblR5cGVzXG59IGZyb20gJy4vYWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8vIEV4cG9ydCBiYXNlIGFjdGlvbiBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVCYXNlQWN0aW9ucyxcbiAgdHlwZSBCYXNlQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcblxuLy8gRXhwb3J0IHZhbGlkYXRvciBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVWYWxpZGF0b3JGYWN0b3J5LFxuICBjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyLFxuICB0eXBlIEJhc2VBZGFwdGVyT3B0aW9uc1xufSBmcm9tICcuL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuXG4vLyBFeHBvcnQgUmVhY3QgaG9va3NcbmV4cG9ydCB7TWV0cm9wb2xpc0NvbnRleHR9IGZyb20gJy4vTWV0cm9wb2xpc0NvbnRleHQuanMnO1xuZXhwb3J0IHtcbiAgUGVybWlzc2lvbkd1YXJkLFxuICBQZXJtaXNzaW9uTGV2ZWwsXG4gIHVzZVBlcm1pc3Npb25zLFxuICB0eXBlIFBlcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbkd1YXJkUHJvcHMsXG4gIHR5cGUgVXNlUGVybWlzc2lvbnNSZXR1cm5cbn0gZnJvbSAnLi9wZXJtaXNzaW9uVXRpbHMuanMnO1xuZXhwb3J0IHtcbiAgdXNlQ29udGVudEFjdGlvbnMsXG4gIHVzZUF3c1J1bSxcbiAgdXNlQ3JtQWN0aW9ucyxcbiAgdXNlRXZlbnRBY3Rpb25zLFxuICB1c2VHcm91cEFjdGlvbnMsXG4gIHVzZUltYWdlQWN0aW9ucyxcbiAgdXNlTG9jYXRpb25BY3Rpb25zLFxuICB1c2VNZXNzYWdlQWN0aW9ucyxcbiAgdXNlTWV0cm9wb2xpcyxcbiAgdXNlTWV0cm9wb2xpc0NvbmZpZyxcbiAgdXNlTWV0cm9wb2xpc0ZsdXgsXG4gIHVzZVBlcm1pc3Npb25BY3Rpb25zLFxuICB1c2VQZXJzb25hQWN0aW9ucyxcbiAgdXNlUG9zdEFjdGlvbnMsXG4gIHVzZVJlYWN0aW9uQWN0aW9ucyxcbiAgdXNlUmVzdEFjdGlvbnMsXG4gIHVzZVRhZ0FjdGlvbnMsXG4gIHVzZVRyYW5zbGF0aW9uQWN0aW9ucyxcbiAgdXNlVXNlckFjdGlvbnMsXG4gIHVzZVZpZGVvQWN0aW9ucyxcbiAgdXNlV2Vic29ja2V0QWN0aW9uc1xufSBmcm9tICcuL3VzZU1ldHJvcG9saXMuanMnO1xuZXhwb3J0IHt1c2VDb252ZXJzYXRpb25UeXBpbmcsIHR5cGUgQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucywgdHlwZSBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zfSBmcm9tICcuL3VzZUNvbnZlcnNhdGlvblR5cGluZy5qcyc7XG5leHBvcnQge3VzZVRyYW5zbGF0aW9uc30gZnJvbSAnLi91c2VUcmFuc2xhdGlvbnMuanMnO1xuXG4vLyBFeHBvcnQgdXRpbGl0eSBmdW5jdGlvbnNcbmV4cG9ydCAqIGZyb20gJy4vYXBwLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZVV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24uanMnO1xuIl0sIm5hbWVzIjpbImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJnZXRHcmFwaHFsIiwicHVibGljTXV0YXRpb24iLCJwdWJsaWNRdWVyeSIsInJ1bVJlcXVlc3QiLCJyZWZyZXNoU2Vzc2lvbiIsInJlc29sdmVSZXN0RW5kcG9pbnQiLCJyZXN0UmVxdWVzdCIsInVwbG9hZEltYWdlIiwiY3JlYXRlQWN0aW9uIiwiY3JlYXRlQWN0aW9ucyIsImNyZWF0ZUFsbEFjdGlvbnMiLCJjcmVhdGVCYXNlQWN0aW9ucyIsImNyZWF0ZVZhbGlkYXRvckZhY3RvcnkiLCJjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyIiwiTWV0cm9wb2xpc0NvbnRleHQiLCJQZXJtaXNzaW9uR3VhcmQiLCJQZXJtaXNzaW9uTGV2ZWwiLCJ1c2VQZXJtaXNzaW9ucyIsInVzZUNvbnRlbnRBY3Rpb25zIiwidXNlQXdzUnVtIiwidXNlQ3JtQWN0aW9ucyIsInVzZUV2ZW50QWN0aW9ucyIsInVzZUdyb3VwQWN0aW9ucyIsInVzZUltYWdlQWN0aW9ucyIsInVzZUxvY2F0aW9uQWN0aW9ucyIsInVzZU1lc3NhZ2VBY3Rpb25zIiwidXNlTWV0cm9wb2xpcyIsInVzZU1ldHJvcG9saXNDb25maWciLCJ1c2VNZXRyb3BvbGlzRmx1eCIsInVzZVBlcm1pc3Npb25BY3Rpb25zIiwidXNlUGVyc29uYUFjdGlvbnMiLCJ1c2VQb3N0QWN0aW9ucyIsInVzZVJlYWN0aW9uQWN0aW9ucyIsInVzZVJlc3RBY3Rpb25zIiwidXNlVGFnQWN0aW9ucyIsInVzZVRyYW5zbGF0aW9uQWN0aW9ucyIsInVzZVVzZXJBY3Rpb25zIiwidXNlVmlkZW9BY3Rpb25zIiwidXNlV2Vic29ja2V0QWN0aW9ucyIsInVzZUNvbnZlcnNhdGlvblR5cGluZyIsInVzZVRyYW5zbGF0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsdUJBQXVCO0FBQ3ZCLFNBQ0VBLFdBQVcsRUFDWEMsUUFBUSxFQUNSQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsV0FBVyxFQUNYQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsbUJBQW1CLEVBQ25CQyxXQUFXLEVBQ1hDLFdBQVcsUUFNTixXQUFXO0FBRWxCLHdCQUF3QjtBQUN4QixTQUNFQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsZ0JBQWdCLFFBS1gscUJBQXFCO0FBRTVCLDZCQUE2QjtBQUM3QixTQUNFQyxpQkFBaUIsUUFFWix5QkFBeUI7QUFFaEMsMkJBQTJCO0FBQzNCLFNBQ0VDLHNCQUFzQixFQUN0QkMsc0JBQXNCLFFBRWpCLHdCQUF3QjtBQUUvQixxQkFBcUI7QUFDckIsU0FBUUMsaUJBQWlCLFFBQU8seUJBQXlCO0FBQ3pELFNBQ0VDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLFFBSVQsdUJBQXVCO0FBQzlCLFNBQ0VDLGlCQUFpQixFQUNqQkMsU0FBUyxFQUNUQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkMsaUJBQWlCLEVBQ2pCQyxvQkFBb0IsRUFDcEJDLGlCQUFpQixFQUNqQkMsY0FBYyxFQUNkQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsYUFBYSxFQUNiQyxxQkFBcUIsRUFDckJDLGNBQWMsRUFDZEMsZUFBZSxFQUNmQyxtQkFBbUIsUUFDZCxxQkFBcUI7QUFDNUIsU0FBUUMscUJBQXFCLFFBQTBFLDZCQUE2QjtBQUNwSSxTQUFRQyxlQUFlLFFBQU8sdUJBQXVCO0FBRXJELDJCQUEyQjtBQUMzQixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxZQUFZO0FBQzFCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWUifQ==
|
package/lib/utils/session.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
-
import type { SessionType } from './api.js';
|
|
3
2
|
import type { ConfigAppSessionType } from '../config/index.js';
|
|
3
|
+
import type { SessionType } from './api.js';
|
|
4
4
|
export declare const parseJwtExpiryMs: (token: string) => number;
|
|
5
5
|
export declare const parseJwtIssuedMs: (token: string) => number;
|
|
6
6
|
export declare const normalizeSession: (session?: Record<string, unknown>) => Record<string, unknown>;
|
package/package.json
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlabs/metropolisjs",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MetropolisJS is a library to connect users to Reaktor",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "lib/index.js",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"types": "./lib/index.d.ts",
|
|
10
11
|
"import": "./lib/index.js",
|
|
11
|
-
"require": "./lib/index.js"
|
|
12
|
-
"types": "./lib/index.d.ts"
|
|
12
|
+
"require": "./lib/index.js"
|
|
13
13
|
},
|
|
14
14
|
"./stores": {
|
|
15
|
+
"types": "./lib/stores/index.d.ts",
|
|
15
16
|
"import": "./lib/stores/index.js",
|
|
16
|
-
"require": "./lib/stores/index.js"
|
|
17
|
-
"types": "./lib/stores/index.d.ts"
|
|
17
|
+
"require": "./lib/stores/index.js"
|
|
18
18
|
},
|
|
19
19
|
"./actions": {
|
|
20
|
+
"types": "./lib/actions/index.d.ts",
|
|
20
21
|
"import": "./lib/actions/index.js",
|
|
21
|
-
"require": "./lib/actions/index.js"
|
|
22
|
-
"types": "./lib/actions/index.d.ts"
|
|
22
|
+
"require": "./lib/actions/index.js"
|
|
23
23
|
},
|
|
24
24
|
"./adapters": {
|
|
25
|
+
"types": "./lib/adapters/index.d.ts",
|
|
25
26
|
"import": "./lib/adapters/index.js",
|
|
26
|
-
"require": "./lib/adapters/index.js"
|
|
27
|
-
"types": "./lib/adapters/index.d.ts"
|
|
27
|
+
"require": "./lib/adapters/index.js"
|
|
28
28
|
},
|
|
29
29
|
"./utils": {
|
|
30
|
+
"types": "./lib/utils/index.d.ts",
|
|
30
31
|
"import": "./lib/utils/index.js",
|
|
31
|
-
"require": "./lib/utils/index.js"
|
|
32
|
-
"types": "./lib/utils/index.d.ts"
|
|
32
|
+
"require": "./lib/utils/index.js"
|
|
33
33
|
},
|
|
34
34
|
"./config": {
|
|
35
|
+
"types": "./lib/config/index.d.ts",
|
|
35
36
|
"import": "./lib/config/index.js",
|
|
36
|
-
"require": "./lib/config/index.js"
|
|
37
|
-
"types": "./lib/config/index.d.ts"
|
|
37
|
+
"require": "./lib/config/index.js"
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"types": "./lib/index.d.ts",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"clean": "lex clean",
|
|
46
46
|
"dev": "lex dev --remove",
|
|
47
47
|
"format": "npm run prettier && npm run lint",
|
|
48
|
-
"lint": "lex lint --fix",
|
|
48
|
+
"lint": "lex lint --fix && npm run lint:examples",
|
|
49
|
+
"lint:examples": "eslint --config node_modules/@nlabs/lex/eslint.config.mjs examples/factory-pattern-usage.ts --fix",
|
|
49
50
|
"prettier": "prettier --write ./src",
|
|
50
51
|
"production": "lex build",
|
|
51
52
|
"publish:major": "npm version major && npm run publish:tags && npm publish",
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"publish:tags": "git push --tags && git push origin HEAD",
|
|
55
56
|
"start": "lex dev -r -o",
|
|
56
57
|
"test": "lex test",
|
|
58
|
+
"typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json --noEmit && tsc -p tsconfig.lint.json --noEmit && tsc -p tsconfig.examples.json",
|
|
57
59
|
"update": "lex update --interactive",
|
|
58
60
|
"watch": "lex compile --watch"
|
|
59
61
|
},
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"noEmit": true,
|
|
5
|
+
"paths": {
|
|
6
|
+
"@nlabs/metropolisjs": [
|
|
7
|
+
"./src/index.tsx"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"rootDir": ".",
|
|
11
|
+
"types": [
|
|
12
|
+
"node"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
"exclude": [
|
|
16
|
+
"lib",
|
|
17
|
+
"node_modules"
|
|
18
|
+
],
|
|
19
|
+
"include": [
|
|
20
|
+
"examples/**/*.ts",
|
|
21
|
+
"examples/**/*.tsx"
|
|
22
|
+
]
|
|
23
|
+
}
|